def test__resolve_context__missing_tags_strict(self): """ Check resolve_context(): missing_tags 'strict'. """ renderer = Renderer() renderer.missing_tags = 'strict' engine = renderer._make_render_engine() stack = ContextStack({'foo': 'bar'}) self.assertEqual('bar', engine.resolve_context(stack, 'foo')) self.assertException(KeyNotFoundError, "Key 'missing' not found: first part", engine.resolve_context, stack, 'missing')
def _assert_render(self, expected, template, *context, **kwargs): """ Test rendering the given template using the given context. """ partials = kwargs.get('partials') engine = kwargs.get('engine', self._engine()) if partials is not None: engine.load_partial = lambda key: unicode(partials[key]) context = ContextStack(*context) actual = engine.render(template, context) self.assertString(actual=actual, expected=expected)
def _assert_render(self, expected, template, *context, **kwargs): """ Test rendering the given template using the given context. """ partials = kwargs.get('partials') engine = kwargs.get('engine', self._engine()) if partials is not None: engine.resolve_partial = lambda key: str(partials[key]) context = ContextStack(*context) # RenderEngine.render() only accepts unicode template strings. actual = engine.render(str(template), context) self.assertString(actual=actual, expected=expected)
def test_dot_notation__mixed_dict_and_obj(self): name = "foo.bar.baz.bak" stack = ContextStack( {"foo": Attachable(bar={"baz": Attachable(bak=42)})}) self.assertEqual(stack.get(name), 42)
def test_init__many_elements(self): """ Check that passing more than two items to __init__() raises no exception. """ context = ContextStack({}, {}, {})
def test_init__no_elements(self): """ Check that passing nothing to __init__() raises no exception. """ context = ContextStack()
def main(): args = docopt(__doc__) config = ConfigParser.SafeConfigParser() config.read(args['--config']) palette_urls = config.get('palettes', 'url') palette_ids = [ int(x) for x in re.findall('palette/([0-9]+)/', palette_urls) ] renderer = Renderer() if config.has_option('palettes', 'template'): template_file = config.get('palettes', 'template') f = open(template_file, 'r') template = f.read() f.close() else: template = """ {{#palettes}} /** Colourlovers Palette {{title}} {{url}} by: {{user_name}} {{description}} **/ {{#colors}} /* {{title}} */ @color-{{normalized_title}}: {{hex}}; {{/colors}} {{/palettes}} """ d = {'palettes': []} cl = ColourLovers() for palette_id in palette_ids: for palette in cl.palette(palette_id): colors = [] for hexcolor in palette.colours: c = cl.color(hexcolor)[0] a_colour = { 'badge_url': c.badge_url, 'date_created': c.date_created, 'description': c.description, 'hex': c.hex, 'hsv': c.hsv, 'id': c.id, 'image_url': c.image_url, 'rgb': c.rgb, 'title': c.title, 'normalized_title': re.sub('[^a-z_-]', '', c.title.lower()), 'url': c.url, 'user_name': c.user_name, } colors.append(a_colour) d['palettes'].append({ 'badge_url': palette.badge_url, 'date_created': palette.date_created, 'description': palette.description, 'id': palette.id, 'image_url': palette.image_url, 'title': palette.title, 'normalized_title': re.sub('[^a-z_-]', '', palette.title.lower()), 'url': palette.url, 'user_name': palette.user_name, 'colors': colors, }) ctx = ContextStack(d) css_file = config.get('palettes', 'css') c = open(css_file, 'w') c.write(renderer.render(template, ctx)) c.close()