From dd8fae1cbc1de3f98193661055cd25f03d8a2b5b Mon Sep 17 00:00:00 2001 From: Lakshmi Vyasarajan <lakshmi.vyas@gmail.com> Date: Mon, 20 Jun 2011 01:24:02 +0530 Subject: [PATCH] Ensured providers work in the same way as context data and metadata (Issue #29) --- hyde/model.py | 4 +-- hyde/tests/test_generate.py | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/hyde/model.py b/hyde/model.py index ed73191..7a1e671 100644 --- a/hyde/model.py +++ b/hyde/model.py @@ -45,7 +45,7 @@ class Expando(object): Sets the expando attribute after transforming the value. """ - setattr(self, key.encode('utf-8'), self.transform(value)) + setattr(self, str(key).encode('utf-8'), self.transform(value)) def transform(self, primitive): """ @@ -91,7 +91,7 @@ class Context(object): 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()) + context[provider_name] = Expando(yaml.load(res.read_all())) except AttributeError: # No context data found pass diff --git a/hyde/tests/test_generate.py b/hyde/tests/test_generate.py index b4692fc..b190e6d 100644 --- a/hyde/tests/test_generate.py +++ b/hyde/tests/test_generate.py @@ -161,3 +161,60 @@ main: assert "home" in out assert "articles" in out assert "projects" in out + + def test_context_providers_equivalence(self): + import yaml + events = """ + 2011: + - + title: "one event" + location: "a city" + - + title: "one event" + location: "a city" + + 2010: + - + title: "one event" + location: "a city" + - + title: "one event" + location: "a city" +""" + events_dict = yaml.load(events) + config_dict = dict(context=dict( + data=dict(events1=events_dict), + providers=dict(events2="events.yaml") + )) + text = """ +{%% extends "base.html" %%} + +{%% block main %%} + <ul> + {%% for year, eventlist in %s %%} + <li> + <h1>{{ year }}</h1> + <ul> + {%% for event in eventlist %%} + <li>{{ event.title }}-{{ event.location }}</li> + {%% endfor %%} + </ul> + </li> + {%% endfor %%} + </ul> +{%% endblock %%} +""" + + File(TEST_SITE.child('events.yaml')).write(events) + f1 = File(TEST_SITE.child('content/text1.html')) + f2 = File(TEST_SITE.child('content/text2.html')) + f1.write(text % "events1") + f2.write(text % "events2") + site = Site(TEST_SITE, Config(TEST_SITE, config_dict=config_dict)) + site.load() + gen = Generator(site) + gen.generate_all() + left = File(site.config.deploy_root_path.child(f1.name)).read_all() + right = File(site.config.deploy_root_path.child(f2.name)).read_all() + assert left == right +