def generate_context(self): """change the context""" # return the list of files to use files = self.get_files(self.path, exclude=['pages', ]) all_articles = [] for f in files: try: content, metadata = read_file(f, settings=self.settings) except Exception, e: warning(u'Could not process %s\n%s' % (f, str(e))) continue # if no category is set, use the name of the path as a category if 'category' not in metadata.keys(): if os.path.dirname(f) == self.path: category = self.settings['DEFAULT_CATEGORY'] else: category = os.path.basename(os.path.dirname(f))\ .decode('utf-8') if category != '': metadata['category'] = Category(category, self.settings) if 'date' not in metadata.keys()\ and self.settings['FALLBACK_ON_FS_DATE']: metadata['date'] = datetime.datetime.fromtimestamp( os.stat(f).st_ctime) article = Article(content, metadata, settings=self.settings, filename=f) if not is_valid_content(article, f): continue if article.status == "published": if hasattr(article, 'tags'): for tag in article.tags: self.tags[tag].append(article) all_articles.append(article) elif article.status == "draft": self.drafts.append(article)
def process_translations(content_list): """ Finds all translation and returns tuple with two lists (index, translations). Index list includes items in default language or items which have no variant in default language. Also, for each content_list item, it sets attribute 'translations' """ content_list.sort(key=attrgetter('slug')) grouped_by_slugs = groupby(content_list, attrgetter('slug')) index = [] translations = [] for slug, items in grouped_by_slugs: items = list(items) # find items with default language default_lang_items = filter(attrgetter('in_default_lang'), items) len_ = len(default_lang_items) if len_ > 1: warning(u'there are %s variants of "%s"' % (len_, slug)) for x in default_lang_items: warning(' %s' % x.filename) elif len_ == 0: default_lang_items = items[:1] if not slug: warning('empty slug for %r' % (default_lang_items[0].filename, )) index.extend(default_lang_items) translations.extend( filter(lambda x: x not in default_lang_items, items)) for a in items: a.translations = filter(lambda x: x != a, items) return index, translations
def process_translations(content_list): """ Finds all translation and returns tuple with two lists (index, translations). Index list includes items in default language or items which have no variant in default language. Also, for each content_list item, it sets attribute 'translations' """ content_list.sort(key=attrgetter('slug')) grouped_by_slugs = groupby(content_list, attrgetter('slug')) index = [] translations = [] for slug, items in grouped_by_slugs: items = list(items) # find items with default language default_lang_items = filter(attrgetter('in_default_lang'), items) len_ = len(default_lang_items) if len_ > 1: warning(u'there are %s variants of "%s"' % (len_, slug)) for x in default_lang_items: warning(' %s' % x.filename) elif len_ == 0: default_lang_items = items[:1] if not slug: warning('empty slug for %r' % (default_lang_items[0].filename,)) index.extend(default_lang_items) translations.extend(filter( lambda x: x not in default_lang_items, items )) for a in items: a.translations = filter(lambda x: x != a, items) return index, translations
def _handle_deprecation(self): if self.settings.get('CLEAN_URLS', False): log.warning('Found deprecated `CLEAN_URLS` in settings. Modifing' ' the following settings for the same behaviour.') self.settings['ARTICLE_URL'] = '{slug}/' self.settings['ARTICLE_LANG_URL'] = '{slug}-{lang}/' self.settings['PAGE_URL'] = 'pages/{slug}/' self.settings['PAGE_LANG_URL'] = 'pages/{slug}-{lang}/' for setting in ('ARTICLE_URL', 'ARTICLE_LANG_URL', 'PAGE_URL', 'PAGE_LANG_URL'): log.warning("%s = '%s'" % (setting, self.settings[setting])) if self.settings.get('ARTICLE_PERMALINK_STRUCTURE', False): log.warning('Found deprecated `ARTICLE_PERMALINK_STRUCTURE` in' ' settings. Modifing the following settings for' ' the same behaviour.') structure = self.settings['ARTICLE_PERMALINK_STRUCTURE'] # Convert %(variable) into {variable}. structure = re.sub('%\((\w+)\)s', '{\g<1>}', structure) # Convert %x into {date:%x} for strftime structure = re.sub('(%[A-z])', '{date:\g<1>}', structure) # Strip a / prefix structure = re.sub('^/', '', structure) for setting in ('ARTICLE_URL', 'ARTICLE_LANG_URL', 'PAGE_URL', 'PAGE_LANG_URL', 'ARTICLE_SAVE_AS', 'ARTICLE_LANG_SAVE_AS', 'PAGE_SAVE_AS', 'PAGE_LANG_SAVE_AS'): self.settings[setting] = os.path.join(structure, self.settings[setting]) log.warning("%s = '%s'" % (setting, self.settings[setting]))
def __init__(self, content, metadata=None, settings=None, filename=None): # init parameters if not metadata: metadata = {} if not settings: settings = _DEFAULT_CONFIG self.settings = settings self._content = content self.translations = [] local_metadata = dict(settings.get('DEFAULT_METADATA', ())) local_metadata.update(metadata) # set metadata as attributes for key, value in local_metadata.items(): setattr(self, key.lower(), value) # default author to the one in settings if not defined if not hasattr(self, 'author'): if 'AUTHOR' in settings: self.author = Author(settings['AUTHOR'], settings) else: self.author = Author(getenv('USER', 'John Doe'), settings) warning(u"Author of `{0}' unknow, assuming that his name is " "`{1}'".format(filename or self.title, self.author)) # manage languages self.in_default_lang = True if 'DEFAULT_LANG' in settings: default_lang = settings['DEFAULT_LANG'].lower() if not hasattr(self, 'lang'): self.lang = default_lang self.in_default_lang = (self.lang == default_lang) # create the slug if not existing, fro mthe title if not hasattr(self, 'slug') and hasattr(self, 'title'): self.slug = slugify(self.title) if filename: self.filename = filename # manage the date format if not hasattr(self, 'date_format'): if hasattr(self, 'lang') and self.lang in settings['DATE_FORMATS']: self.date_format = settings['DATE_FORMATS'][self.lang] else: self.date_format = settings['DEFAULT_DATE_FORMAT'] if isinstance(self.date_format, tuple): locale.setlocale(locale.LC_ALL, self.date_format[0]) self.date_format = self.date_format[1] if hasattr(self, 'date'): encoded_date = self.date.strftime( self.date_format.encode('ascii', 'xmlcharrefreplace')) if platform == 'win32': self.locale_date = encoded_date.decode(stdin.encoding) else: self.locale_date = encoded_date.decode('utf') # manage status if not hasattr(self, 'status'): self.status = settings['DEFAULT_STATUS'] if not settings['WITH_FUTURE_DATES']: if hasattr(self, 'date') and self.date > datetime.now(): self.status = 'draft' # set summary if not hasattr(self, 'summary'): self.summary = truncate_html_words(self.content, 50)
def __init__(self, settings=None, path=None, theme=None, output_path=None, markup=None, delete_outputdir=False): """Read the settings, and performs some checks on the environment before doing anything else. """ self.path = path or settings['PATH'] if not self.path: raise Exception('you need to specify a path containing the content' ' (see pelican --help for more information)') if self.path.endswith('/'): self.path = self.path[:-1] if settings.get('CLEAN_URLS', False): log.warning('Found deprecated `CLEAN_URLS` in settings. Modifing' ' the following settings for the same behaviour.') settings['ARTICLE_URL'] = '{slug}/' settings['ARTICLE_LANG_URL'] = '{slug}-{lang}/' settings['PAGE_URL'] = 'pages/{slug}/' settings['PAGE_LANG_URL'] = 'pages/{slug}-{lang}/' for setting in ('ARTICLE_URL', 'ARTICLE_LANG_URL', 'PAGE_URL', 'PAGE_LANG_URL'): log.warning("%s = '%s'" % (setting, settings[setting])) if settings.get('ARTICLE_PERMALINK_STRUCTURE', False): log.warning('Found deprecated `ARTICLE_PERMALINK_STRUCTURE` in' ' settings. Modifing the following settings for' ' the same behaviour.') structure = settings['ARTICLE_PERMALINK_STRUCTURE'] # Convert %(variable) into {variable}. structure = re.sub('%\((\w+)\)s', '{\g<1>}', structure) # Convert %x into {date:%x} for strftime structure = re.sub('(%[A-z])', '{date:\g<1>}', structure) # Strip a / prefix structure = re.sub('^/', '', structure) for setting in ('ARTICLE_URL', 'ARTICLE_LANG_URL', 'PAGE_URL', 'PAGE_LANG_URL', 'ARTICLE_SAVE_AS', 'ARTICLE_LANG_SAVE_AS', 'PAGE_SAVE_AS', 'PAGE_LANG_SAVE_AS'): settings[setting] = os.path.join(structure, settings[setting]) log.warning("%s = '%s'" % (setting, settings[setting])) # define the default settings self.settings = settings self.theme = theme or settings['THEME'] output_path = output_path or settings['OUTPUT_PATH'] self.output_path = os.path.realpath(output_path) self.markup = markup or settings['MARKUP'] self.delete_outputdir = delete_outputdir \ or settings['DELETE_OUTPUT_DIRECTORY'] # find the theme in pelican.theme if the given one does not exists if not os.path.exists(self.theme): theme_path = os.sep.join([os.path.dirname( os.path.abspath(__file__)), "themes/%s" % self.theme]) if os.path.exists(theme_path): self.theme = theme_path else: raise Exception("Impossible to find the theme %s" % theme)