def get_urls(modeladmin):

        # This is django wrapper nastiness inherited from the default admin get_url method
        from django.conf.urls.defaults import patterns, url
        def wrap(view):
            def wrapper(*args, **kwargs):
                return modeladmin.admin_site.admin_view(view)(*args, **kwargs)
            return update_wrapper(wrapper, view)

        info = modeladmin.model._meta.app_label, modeladmin.model._meta.module_name

        # Add patterns special to subject uploading
        urlpatterns = patterns('',
            # subject/template GETs a csv template
            url(r'^template/$',
                wrap(modeladmin.template_view),
                name='%s_%s_add' % info),
            # subject/upload/ POSTs a user-edited csv template
            url(r'^upload/$',
                wrap(modeladmin.upload_view),
                name='%s_%s_upload' % info),
            # subject/upload/<uuid>/status GETs the status of a celery task
            url(r'^upload/(?P<task_uuid>.+)/status/$',
                wrap(modeladmin.upload_status_view),
                name='%s_%s_status' % info),
        ) + super(SubjectAdmin, modeladmin).get_urls()

        return urlpatterns
Check node boundaries in path graph.
dataset/ETHPy150Open PublicMapping/DistrictBuilder/django/publicmapping/redistricting/admin.py/SubjectAdmin.get_urls--crossover with--dataset/ETHPy150Open gkno/gkno_launcher/src/networkx/algorithms/tests/test_boundary.py/TestBoundary.test_path_node_boundary