Example #1
0
 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
Example #2
0
 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({})
Example #3
0
 def test_attributes(self):
     """Keys are accessible as attributes."""
     obj = structures.AttributeDict({
         'key': 'value',
     })
     self.assertEqual('value', obj['key'])
     self.assertEqual('value', obj.key)
Example #4
0
 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
Example #5
0
    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)
Example #6
0
 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
Example #7
0
 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({})
Example #8
0
 def dates(self):
     """Built in field for dates."""
     return structures.AttributeDict(self.fields.get('$dates', {}))
Example #9
0
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