Пример #1
0
    def _add_test_methods(mcs, attrs, urlpatterns):
        # loop through every URL pattern
        for index, (func, regex, url_name) in enumerate(extract_views_from_urlpatterns(urlpatterns)):

            if func.__module__.startswith("%s." % attrs["module"]):
                pass
            elif func.__module__ == attrs["module"]:
                pass
            else:
                continue

            if hasattr(func, "__name__"):
                func_name = func.__name__
            elif hasattr(func, "__class__"):
                func_name = "%s()" % func.__class__.__name__
            else:
                func_name = re.sub(r" at 0x[0-9a-f]+", "", repr(func))

            url_pattern = smart_text(simplify_regex(regex))
            name = "_".join(
                ["test", func.__module__.replace(".", "_"), slugify("%s" % func_name)]
                + slugify(url_pattern.replace("/", "_") or "root").replace("_", " ").split()
            )
            url = url_pattern

            for key, value in attrs["variables"].items():
                url = url.replace("<%s>" % key, value)

            # bail out if we don't know how to visit this URL properly
            testfunc = unittest.skipIf(
                any(re.search(stop_pattern, url) for stop_pattern in [r"<.*>"]),
                "URL pattern %r contains stop pattern." % url,
            )(make_test_get_function(name, url, url_pattern))

            attrs[name] = testfunc
Пример #2
0
    def handle(self, *args, **options):
        if args:
            appname, = args

        namespace = options.get("namespace", "")

        if settings.ADMIN_FOR:
            settings_modules = [__import__(m, {}, {}, [""]) for m in settings.ADMIN_FOR]
        else:
            settings_modules = [settings]

        views = {}
        for settings_mod in settings_modules:
            try:
                urlconf = __import__(settings_mod.ROOT_URLCONF, {}, {}, [""])
            except Exception, e:
                if options.get("traceback", None):
                    import traceback

                    traceback.print_exc()
                print style.ERROR("Error occurred while trying to load %s: %s" % (settings_mod.ROOT_URLCONF, str(e)))
                continue
            view_functions = extract_views_from_urlpatterns(urlconf.urlpatterns)
            for (func, regex, url_name) in view_functions:
                if url_name:
                    views[url_name] = simplify_regex(regex)
Пример #3
0
    def _add_test_methods(mcs, attrs, urlpatterns):
        # loop through every URL pattern
        for index, (func, regex, url_name) in enumerate(
                extract_views_from_urlpatterns(urlpatterns)):

            if func.__module__.startswith("%s." % attrs['module']):
                pass
            elif func.__module__ == attrs['module']:
                pass
            else:
                continue

            if hasattr(func, '__name__'):
                func_name = func.__name__
            elif hasattr(func, '__class__'):
                func_name = '%s()' % func.__class__.__name__
            else:
                func_name = re.sub(r' at 0x[0-9a-f]+', '', repr(func))

            url_pattern = smart_text(simplify_regex(regex))
            name = '_'.join([
                'test',
                func.__module__.replace('.', '_'),
                slugify('%s' % func_name),
            ] + slugify(url_pattern.replace('/', '_') or 'root').replace(
                '_', ' ').split(), )
            url = url_pattern

            for key, value in attrs['variables'].items():
                url = url.replace('<%s>' % key, value)

            # bail out if we don't know how to visit this URL properly
            testfunc = unittest.skipIf(
                any(
                    re.search(stop_pattern, url) for stop_pattern in [
                        r'<.*>',
                    ]),
                'URL pattern %r contains stop pattern.' % url,
            )(make_test_get_function(name, url, url_pattern), )

            attrs[name] = testfunc
Пример #4
0
def add_test_methods(testcase, urlpatterns):
    decorator = ['login_required']
    # loop through every URL pattern
    for index, (func, regex, url_name) in enumerate(
        extract_views_from_urlpatterns(urlpatterns)
    ):
        if hasattr(func, '__globals__'):
            func_globals = func.__globals__
        elif hasattr(func, 'func_globals'):
            func_globals = func.func_globals
        else:
            func_globals = {}

        decorators = [d for d in decorator if d in func_globals]

        if isinstance(func, functools.partial):
            func = func.func
            decorators.insert(0, 'functools.partial')

        if hasattr(func, '__name__'):
            func_name = func.__name__
        elif hasattr(func, '__class__'):
            func_name = '%s()' % func.__class__.__name__
        else:
            func_name = re.sub(r' at 0x[0-9a-f]+', '', repr(func))

        url_pattern = smart_text(simplify_regex(regex))
        name = '_'.join(
            [
                'test',
                '%.4d' % index,
                func.__module__.replace(u'.', u'_'),
                slugify(u'%s' % func_name),
            ] + slugify(
                url_pattern.replace(u'/', u'_') or u'root'
            ).replace(u'_', u' ').split(),
        )
        url = re.sub('<[\w_]+>', '1', url_pattern)
        # bail out if we don't know how to visit this URL properly
        testfunc = unittest.skipIf(
            any(
                re.search(stop_pattern, url_pattern)
                for stop_pattern
                in [
                    r'<uidb64>',
                    #r'<app_label>',
                    #r'<model>',
                    #r'<key>',
                    #r'<token>',
                    #r'/tasks/',
                    #r'/usage/',
                    #r'/captcha/',
                ]
            ),
            'URL pattern %r contains stop pattern.' % url_pattern,
        )(
            make_test_get_function(name, url, url_pattern),
        )
        view_path = '%s.%s' % (func.__module__, func_name)
        testfunc = unittest.skipIf(
            any(
                re.search(stop_pattern, view_path)
                for stop_pattern in [
                    r'^captcha\.',
                    r'^djcelery\.',
                    r'^ajax_select\.',
                    r'^django\.contrib\.auth\.views\.',
                    r'^django\.contrib\.staticfiles\.views\.',
                    r'^django_xmlrpc\.views\.',
                    r'^karaage\.people\.views\.persons\.activate$',
                    r'^kgusage\.views\.',
                ]
            ),
            'View %r contains stop pattern.' % view_path,
        )(
            testfunc,
        )
        setattr(testcase, name, testfunc)