diff --git a/hyde/ext/plugins/depends.py b/hyde/ext/plugins/depends.py index 70d0fd8..38187a4 100644 --- a/hyde/ext/plugins/depends.py +++ b/hyde/ext/plugins/depends.py @@ -25,7 +25,7 @@ class DependsPlugin(Plugin): The dependency can contain the following template variables: node, resource, site, context. - The folloing strings are valid: + The following strings are valid: '{node.module}/dependencies/{resource.source.name_without_extension}.inc' '{context.dependency_folder}/{resource.source.name_without_extension}.{site.meta.depext}' """ @@ -35,9 +35,11 @@ class DependsPlugin(Plugin): except AttributeError: pass - if not hasattr(resource, 'depends'): + if not hasattr(resource, 'depends') or not resource.depends: resource.depends = [] - resource.depends = resource.depends or [] + + if isinstance(depends, basestring): + depends = [depends] for dep in depends: resource.depends.append(dep.format(node=resource.node, diff --git a/hyde/generator.py b/hyde/generator.py index a60e306..69fad92 100644 --- a/hyde/generator.py +++ b/hyde/generator.py @@ -112,7 +112,18 @@ class Generator(object): """ Gets the dependencies for a given resource. """ - return self.template.get_dependencies(resource.relative_path) + deps = [] + if hasattr(resource, 'depends'): + user_deps = resource.depends + for dep in user_deps: + deps.append(dep) + deps.extend(self.template.get_dependencies(dep)) + + deps.extend(self.template.get_dependencies(resource.relative_path)) + deps = list(set(deps)) + if None in deps: + deps.remove(None) + return deps def has_resource_changed(self, resource): """ diff --git a/hyde/tests/ext/test_depends.py b/hyde/tests/ext/test_depends.py index 65b8ed8..995011f 100644 --- a/hyde/tests/ext/test_depends.py +++ b/hyde/tests/ext/test_depends.py @@ -21,6 +21,9 @@ class TestDepends(object): TEST_SITE.make() TEST_SITE.parent.child_folder( 'sites/test_jinja').copy_contents_to(TEST_SITE) + TEST_SITE.parent.child_folder( + 'templates/jinja2').copy_contents_to( + TEST_SITE.child_folder('content')) def tearDown(self): TEST_SITE.delete() @@ -41,9 +44,14 @@ depends: index.html gen = Generator(s) gen.load_site_if_needed() gen.load_template_if_needed() - res = s.content.resource_from_relative_path('inc.md') + def dateformat(x): + return x.strftime('%Y-%m-%d') + gen.template.env.filters['dateformat'] = dateformat + gen.generate_resource_at_path(inc.name) + res = s.content.resource_from_relative_path(inc.name) + assert len(res.depends) == 1 + assert 'index.html' in res.depends deps = list(gen.get_dependencies(res)) - assert len(deps) == 3 assert 'helpers.html' in deps