Browse Source

Added context loaders

main
Lakshmi Vyasarajan 14 years ago
parent
commit
7b446bb38b
4 changed files with 86 additions and 10 deletions
  1. +2
    -1
      hyde/engine.py
  2. +4
    -1
      hyde/generator.py
  3. +24
    -1
      hyde/model.py
  4. +56
    -7
      hyde/tests/test_generate.py

+ 2
- 1
hyde/engine.py View File

@@ -11,6 +11,7 @@ from hyde.site import Site
from hyde.version import __version__ from hyde.version import __version__
from hyde.util import getLoggerWithConsoleHandler from hyde.util import getLoggerWithConsoleHandler


import codecs
import os import os
import yaml import yaml


@@ -118,6 +119,6 @@ class Engine(Application):
config_file = sitepath.child(config) config_file = sitepath.child(config)
logger.info("Reading site configuration from [%s]", config_file) logger.info("Reading site configuration from [%s]", config_file)
conf = {} conf = {}
with open(config_file) as stream:
with codecs.open(config_file, 'r', 'utf-8') as stream:
conf = yaml.load(stream) conf = yaml.load(stream)
return Site(sitepath, Config(sitepath, conf)) return Site(sitepath, Config(sitepath, conf))

+ 4
- 1
hyde/generator.py View File

@@ -4,6 +4,7 @@ The generator class and related utility functions.
""" """
from hyde.exceptions import HydeException from hyde.exceptions import HydeException
from hyde.fs import File, Folder from hyde.fs import File, Folder
from hyde.model import Context
from hyde.plugin import Plugin from hyde.plugin import Plugin
from hyde.template import Template from hyde.template import Template


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

self.template = None self.template = None
Plugin.load_all(site) Plugin.load_all(site)




+ 24
- 1
hyde/model.py View File

@@ -2,6 +2,8 @@
""" """
Contains data structures and utilities for hyde. Contains data structures and utilities for hyde.
""" """
from hyde.fs import File, Folder
import yaml


class Expando(object): class Expando(object):
""" """
@@ -38,7 +40,28 @@ class Expando(object):
else: else:
return primitive return primitive


from hyde.fs import File, Folder

class Context(object):
"""
Wraps the context related functions and utilities.
"""

@staticmethod
def load(sitepath, ctx):
"""
Load context from config data and providers.
"""
context = {}
try:
context.update(ctx.data.__dict__)
for provider_name, resource_name in ctx.providers.__dict__.items():
res = File(Folder(sitepath).child(resource_name))
if res.exists:
context[provider_name] = yaml.load(res.read_all())
except AttributeError:
# No context data found
pass
return context




class Config(Expando): class Config(Expando):


+ 56
- 7
hyde/tests/test_generate.py View File

@@ -5,9 +5,9 @@ Use nose
`$ nosetests` `$ nosetests`
""" """



from hyde.generator import Generator from hyde.generator import Generator
from hyde.fs import FS, File, Folder from hyde.fs import FS, File, Folder
from hyde.model import Config
from hyde.site import Site from hyde.site import Site


from nose.tools import raises, with_setup, nottest from nose.tools import raises, with_setup, nottest
@@ -90,16 +90,58 @@ class TestGenerator(object):
l.write(l.read_all()) l.write(l.read_all())
assert gen.has_resource_changed(resource) assert gen.has_resource_changed(resource)


def test_has_resource_changed(self):
site = Site(TEST_SITE)
def test_context(self):
site = Site(TEST_SITE, Config(TEST_SITE, config_dict={
"context": {
"data": {
"abc": "def"
}
}
}))
text = """
{% extends "base.html" %}

{% block main %}
abc = {{ abc }}
Hi!

I am a test template to make sure jinja2 generation works well with hyde.
{{resource.name}}
{% endblock %}
"""
site.load() site.load()
site.config.context = {
"abc": "def"
}
resource = site.content.resource_from_path(TEST_SITE.child('content/about.html'))
gen = Generator(site)
resource.source_file.write(text)
gen.generate_all()
target = File(site.config.deploy_root_path.child(resource.name))
assert "abc = def" in target.read_all()

def test_context_providers(self):
site = Site(TEST_SITE, Config(TEST_SITE, config_dict={
"context": {
"data": {
"abc": "def"
},
"providers": {
"nav": "nav.yaml"
}
}
}))
nav = """
main:
- home
- articles
- projects
"""
text = """ text = """
{% extends "base.html" %} {% extends "base.html" %}


{% block main %} {% block main %}
{{nav}}
{% for item in nav.main %}
{{item}}
{% endfor %}
abc = {{ abc }} abc = {{ abc }}
Hi! Hi!


@@ -107,9 +149,16 @@ class TestGenerator(object):
{{resource.name}} {{resource.name}}
{% endblock %} {% endblock %}
""" """
File(TEST_SITE.child('nav.yaml')).write(nav)
site.load()
resource = site.content.resource_from_path(TEST_SITE.child('content/about.html')) resource = site.content.resource_from_path(TEST_SITE.child('content/about.html'))
gen = Generator(site) gen = Generator(site)
resource.source_file.write(text) resource.source_file.write(text)
gen.generate_all() gen.generate_all()
target = File(site.config.deploy_root_path.child(resource.name)) target = File(site.config.deploy_root_path.child(resource.name))
assert "abc = def" in target.read_all()
out = target.read_all()
print out
assert "abc = def" in out
assert "home" in out
assert "articles" in out
assert "projects" in out

Loading…
Cancel
Save