Browse Source

Now passing through ~None~ dependency to regenerate always for dynamic imports. Must replace this with a configurable depends plugin later

main
Lakshmi Vyasarajan 14 years ago
parent
commit
34308069b3
6 changed files with 79 additions and 8 deletions
  1. +2
    -2
      hyde/ext/plugins/auto_extend.py
  2. +1
    -1
      hyde/ext/plugins/folders.py
  3. +3
    -2
      hyde/ext/templates/jinja.py
  4. +11
    -3
      hyde/generator.py
  5. +1
    -0
      hyde/site.py
  6. +61
    -0
      hyde/tests/test_jinja2template.py

+ 2
- 2
hyde/ext/plugins/auto_extend.py View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""
Autoextend css plugin
Autoextend plugin
"""

from hyde.plugin import Plugin
@@ -8,7 +8,7 @@ import re

class AutoExtendPlugin(Plugin):
"""
The plugin class for less css
The plugin class for extending templates using metadata.
"""

def __init__(self, site):


+ 1
- 1
hyde/ext/plugins/folders.py View File

@@ -8,7 +8,7 @@ from hyde.fs import Folder

class FlattenerPlugin(Plugin):
"""
The plugin class for syntax text replacement.
The plugin class for flattening nested folders.
"""
def __init__(self, site):
super(FlattenerPlugin, self).__init__(site)


+ 3
- 2
hyde/ext/templates/jinja.py View File

@@ -384,6 +384,7 @@ class Jinja2Template(Template):
self.env.globals['media_url'] = media_url
self.env.globals['content_url'] = content_url
self.env.globals['engine'] = engine
self.env.globals['deps'] = {}
self.env.filters['markdown'] = markdown
self.env.filters['syntax'] = syntax

@@ -411,10 +412,10 @@ class Jinja2Template(Template):
from jinja2.meta import find_referenced_templates
ast = self.env.parse(text)
tpls = find_referenced_templates(ast)
deps = []
deps = list(self.env.globals['deps'].get('path', []))
for dep in tpls:
deps.append(dep)
if dep:
deps.append(dep)
deps.extend(self.get_dependencies(dep))
return list(set(deps))



+ 11
- 3
hyde/generator.py View File

@@ -25,8 +25,8 @@ class Generator(object):
self.generated_once = False
self.__context__ = dict(site=site)
if hasattr(site.config, 'context'):
self.__context__.update(
Context.load(site.sitepath, site.config.context))
site.context = Context.load(site.sitepath, site.config.context)
self.__context__.update(site.context)

self.template = None
Plugin.load_all(site)
@@ -108,6 +108,12 @@ class Generator(object):
logger.info("Generation Complete")
self.events.generation_complete()

def get_dependencies(self, resource):
"""
Gets the dependencies for a given resource.
"""
return self.template.get_dependencies(resource.relative_path)

def has_resource_changed(self, resource):
"""
Checks if the given resource has changed since the
@@ -126,7 +132,7 @@ class Generator(object):
if resource.source_file.is_binary or not resource.uses_template:
logger.debug("No Changes found in %s" % resource)
return False
deps = self.template.get_dependencies(resource.relative_path)
deps = self.get_dependencies(resource)
if not deps or None in deps:
logger.debug("No changes found in %s" % resource)
return False
@@ -134,6 +140,8 @@ class Generator(object):
layout = Folder(self.site.sitepath).child_folder('layout')
logger.debug("Checking for changes in dependents:%s" % deps)
for dep in deps:
if not dep:
return True
source = File(content.child(dep))
if not source.exists:
source = File(layout.child(dep))


+ 1
- 0
hyde/site.py View File

@@ -348,6 +348,7 @@ class Site(object):
self.config = config if config else Config(self.sitepath)
self.content = RootNode(self.config.content_root_path, self)
self.plugins = []
self.context = {}

def load(self):
"""


+ 61
- 0
hyde/tests/test_jinja2template.py View File

@@ -171,6 +171,39 @@ class TestJinjaTemplate(object):
assert 'layout.html' in deps
assert 'index.html' in deps

def test_depends_with_reference_tag(self):
site = Site(TEST_SITE)
JINJA2.copy_contents_to(site.content.source)
inc = File(TEST_SITE.child('content/inc.md'))
inc.write("{% refer to 'index.html' as index%}")
site.load()
gen = Generator(site)
gen.load_template_if_needed()
t = gen.template
deps = list(t.get_dependencies('inc.md'))

assert len(deps) == 3

assert 'helpers.html' in deps
assert 'layout.html' in deps
assert 'index.html' in deps

def test_cant_find_depends_with_reference_tag_var(self):
site = Site(TEST_SITE)
JINJA2.copy_contents_to(site.content.source)
inc = File(TEST_SITE.child('content/inc.md'))
inc.write("{% set ind = 'index.html' %}{% refer to ind as index %}")
site.load()
gen = Generator(site)
gen.load_template_if_needed()
t = gen.template
deps = list(t.get_dependencies('inc.md'))

assert len(deps) == 1
assert not deps[0]


def test_can_include_templates_with_processing(self):
text = """
===
@@ -276,6 +309,34 @@ Hyde & Jinja.
text2 = """
{% refer to "inc.md" as inc %}
{{ inc.html('.fulltext') }}
"""
html = assert_markdown_typogrify_processed_well(text, text2)
assert "mark" not in html
assert "reference" not in html


def test_refer_with_var(self):
text = """
===
is_processable: False
===
<div class="fulltext">
{% filter markdown|typogrify %}
{% mark heading %}
This is a heading
=================
{% endmark %}
{% reference content %}
Hyde & Jinja.
{% endreference %}
{% endfilter %}
</div>
"""

text2 = """
{% set incu = 'inc.md' %}
{% refer to incu as inc %}
{{ inc.html('.fulltext') }}
"""
html = assert_markdown_typogrify_processed_well(text, text2)
assert "mark" not in html

Loading…
Cancel
Save