def _format_path(self, path_format): podspec = self.pod.get_podspec() locale = self.locale.alias if self.locale is not None else self.locale formatters = { 'base': self.base, 'category': self.category, 'collection': structures.AttributeDict( base_path=self.collection_base_path, basename=self.collection.basename, root=self.collection.root), 'env': structures.AttributeDict( fingerpint=self.pod.env.fingerprint), 'locale': locale, 'parent': self.parent if self.parent else utils.DummyDict(), 'root': podspec.root, 'slug': self.slug, } if '{date' in path_format: if isinstance(self.date, datetime.datetime): formatters['date'] = self.date.date() else: formatters['date'] = self.date if '|lower' in path_format: for key, value in formatters.items(): if isinstance(value, basestring): formatters['{}|lower'.format(key)] = value.lower() path = path_format.format(**formatters) while '//' in path: path = path.replace('//', '/') return path
def get_markdown_config(self, kind): """Get the markdown config for a specific extension.""" if 'markdown' in self._doc.pod.podspec: markdown_config = self._doc.pod.podspec.markdown if 'extensions' in markdown_config: for extension in markdown_config['extensions']: if extension.get('kind', '') != kind: continue return structures.AttributeDict(extension) return structures.AttributeDict({})
def test_attributes(self): """Keys are accessible as attributes.""" obj = structures.AttributeDict({ 'key': 'value', }) self.assertEqual('value', obj['key']) self.assertEqual('value', obj.key)
def params_doc(self, path, doc): """Selective access to the document properties depending on path.""" params = {} # Remove the base when the path ends with the base and is index. if doc.base == 'index' and path.endswith(INDEX_BASE_ENDINGS): params['base'] = '' else: params['base'] = doc.base params['collection'] = structures.AttributeDict( base_path=doc.collection_base_path, sub_path=doc.collection_base_path, basename=doc.collection.basename, root=doc.collection.root) if '{category}' in path: params['category'] = doc.category if '{parent}' in path: params['parent'] = doc.parent if doc.parent else utils.DummyDict() if '{slug}' in path: params['slug'] = doc.slug if '{date}' in path: if isinstance(doc.date, datetime.datetime): params['date'] = doc.date.date() else: params['date'] = doc.date return params
def format_view(self, doc, path, parameterize=False): """Format a URL path using the doc information for views.""" path = '' if path is None else path # Most params should always be replaced. params = self.params_pod() params['base'] = doc.base params['category'] = doc.category params['collection'] = structures.AttributeDict( base_path=doc.collection_base_path, basename=doc.collection.basename, root=doc.collection.root) params['parent'] = doc.parent if doc.parent else utils.DummyDict() params['slug'] = doc.slug if isinstance(doc.date, datetime.datetime): params['date'] = doc.date.date() else: params['date'] = doc.date if '|lower' in path: for key, value in params.items(): if isinstance(value, basestring): params['{}|lower'.format(key)] = value.lower() path = utils.safe_format(path, **params) if parameterize: path = self.parameterize(path) return self.strip_double_slash(path)
def params_doc(self, path, doc): """Selective access to the document properties depending on path.""" params = {} params['base'] = doc.base params['collection'] = structures.AttributeDict( base_path=doc.collection_base_path, basename=doc.collection.basename, root=doc.collection.root) if '{category}' in path: params['category'] = doc.category if '{parent}' in path: params['parent'] = doc.parent if doc.parent else utils.DummyDict() if '{slug}' in path: params['slug'] = doc.slug if '{date}' in path: if isinstance(doc.date, datetime.datetime): params['date'] = doc.date.date() else: params['date'] = doc.date return params
def extension_config(self, kind): """Get the markdown config for a specific extension.""" for extension in self.markdown_config: if extension.get('kind', '') == kind: return structures.AttributeDict(extension) return structures.AttributeDict({})
def dates(self): """Built in field for dates.""" return structures.AttributeDict(self.fields.get('$dates', {}))
from datetime import datetime from dateutil.parser import parse from protorpc import messages from xml.etree import ElementTree as ET from grow import extensions from grow.common import structures from grow.common import utils from grow.common import yaml_utils from grow.extensions import hooks CONTENT_KEYS = structures.AttributeDict({ 'title': 'title', 'description': 'description', 'link': 'link', 'published': 'pubDate', 'content_encoded': '{http://purl.org/rss/1.0/modules/content/}encoded', }) class Article(object): """Article details from the field.""" def __init__(self): self.title = None self.description = None self.image = None self.link = None self.content = None