def test_determine_requirement_group(self): groups = ["css", "js"] self.assertEquals("js", utils.determine_requirement_group("jquery.js", groups)) self.assertEquals("js", utils.determine_requirement_group("http://example.com/url/example.js", groups)) self.assertEquals("js", utils.determine_requirement_group("http://example.com/url/example.js?query=string&example", groups)) self.assertEquals(None, utils.determine_requirement_group("var a = null;", groups)) self.assertEquals("css", utils.determine_requirement_group("reset.css", groups)) self.assertEquals("css", utils.determine_requirement_group("http://example.com/css/reset.css", groups)) self.assertEquals("css", utils.determine_requirement_group("http://example.com/css/reset.css?query=string&example", groups)) self.assertEquals(None, utils.determine_requirement_group("h1 { background: #fff; }", groups))
def compile_require_node(parser, token): """ Registers an external requirement with the current request context. The tag is invoked with the following signature:: {% require [<group>] requirement [<depends> ...] %} The optional ``group`` argument specifies a requirement group, such as "css" or "js", the ``requirement`` argument specifies the desired requirement, and all further arguments are interpreted as requirements of the one currently being specified. A simple example that causes ``jquery.js`` to be added to the list of ``js`` requirements for the current request:: {% require js jquery.js %} This more complicated example would add ``jquery-ui.js`` to the list of ``js`` requirements after ``jquery.js``:: {% require js jquery-ui.js jquery.js %} """ parts = token.split_contents() if not len(parts) >= 2: raise template.TemplateSyntaxError("%s tag requires one or more arguments" % parts[0]) tag_name, args = parts[0], parts[1:] group_aliases = settings.REQUIREMENT_GROUP_ALIASES or {} requirement_aliases = settings.REQUIREMENT_ALIASES or {} potential_group = group_aliases.get(args[0]) or args[0] if potential_group and potential_group in settings.GROUPS: if not len(args) >= 2: raise template.TemplateSyntaxError("%s tag requires a requirement to be specified" % parts[0]) group = potential_group args = args[1:] else: group = None requirement = requirement_aliases.get(args[0]) or args[0] depends_on = args[1:] depends_on = [requirement_aliases.get(dependency, dependency) for dependency in depends_on] if group is None: group = determine_requirement_group(requirement, settings.GROUPS) return RequireNode(requirement, group, depends_on)