From 3bdc769134a57d6ce62f2d80b095061d91bacb2f Mon Sep 17 00:00:00 2001 From: Alexis Metaireau Date: Sun, 11 Mar 2012 01:14:22 +0100 Subject: [PATCH] Factorize some code about URL wrapping. --- pelican/contents.py | 69 +++++++++++++++------------------------------ 1 file changed, 22 insertions(+), 47 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index 99740168..900061ad 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -2,6 +2,7 @@ from datetime import datetime from os import getenv from sys import platform, stdin +import functools import locale from pelican.log import warning, error @@ -108,17 +109,13 @@ class Page(object): 'category': getattr(self, 'category', 'misc'), } - @property - def url(self): - if self.in_default_lang: - return self.settings['PAGE_URL'].format(**self.url_format) - return self.settings['PAGE_LANG_URL'].format(**self.url_format) + def _expand_settings(self, key): + fq_key = ('%s_%s' % (self.__class__.__name__, key)).upper() + return self.settings[fq_key].format(**self.url_format) - @property - def save_as(self): - if self.in_default_lang: - return self.settings['PAGE_SAVE_AS'].format(**self.url_format) - return self.settings['PAGE_LANG_SAVE_AS'].format(**self.url_format) + def get_url_setting(self, key): + key = key if self.in_default_lang else 'lang_%s' % key + return self._expand_settings(key) @property def content(self): @@ -139,22 +136,13 @@ class Page(object): summary = property(_get_summary, _set_summary, "Summary of the article." "Based on the content. Can't be set") + url = property(functools.partial(get_url_setting, key='url')) + save_as = property(functools.partial(get_url_setting, key='save_as')) + class Article(Page): mandatory_properties = ('title', 'date', 'category') - @property - def url(self): - if self.in_default_lang: - return self.settings['ARTICLE_URL'].format(**self.url_format) - return self.settings['ARTICLE_LANG_URL'].format(**self.url_format) - - @property - def save_as(self): - if self.in_default_lang: - return self.settings['ARTICLE_SAVE_AS'].format(**self.url_format) - return self.settings['ARTICLE_LANG_SAVE_AS'].format(**self.url_format) - class Quote(Page): base_properties = ('author', 'date') @@ -163,8 +151,12 @@ class Quote(Page): class URLWrapper(object): def __init__(self, name, settings): self.name = unicode(name) + self.slug = slugify(self.name) self.settings = settings + def as_dict(self): + return self.__dict__ + def __hash__(self): return hash(self.name) @@ -177,42 +169,25 @@ class URLWrapper(object): def __unicode__(self): return self.name - @property - def url(self): - return '%s.html' % self.name + def _from_settings(self, key): + setting = "%s_%s" % (self.__class__.__name__.upper(), key) + return self.settings[setting].format(**self.as_dict()) + + url = property(functools.partial(_from_settings, key='URL')) + save_as = property(functools.partial(_from_settings, key='SAVE_AS')) class Category(URLWrapper): - @property - def url(self): - return self.settings['CATEGORY_URL'].format(name=self.name) - - @property - def save_as(self): - return self.settings['CATEGORY_SAVE_AS'].format(name=self.name) + pass class Tag(URLWrapper): def __init__(self, name, *args, **kwargs): super(Tag, self).__init__(unicode.strip(name), *args, **kwargs) - @property - def url(self): - return self.settings['TAG_URL'].format(name=self.name) - - @property - def save_as(self): - return self.settings['TAG_SAVE_AS'].format(name=self.name) - class Author(URLWrapper): - @property - def url(self): - return self.settings['AUTHOR_URL'].format(name=self.name) - - @property - def save_as(self): - return self.settings['AUTHOR_SAVE_AS'].format(name=self.name) + pass def is_valid_content(content, f):