Example #1
0
def to_datetime(value):
    if isinstance(value, datetime.date) or isinstance(value, datetime.datetime):
        return value
    if isinstance(value, int) or isinstance(value, float):
        return datetime.datetime.utcfromtimestamp(value)
    if isinstance(value, basestring):
        try:
            import dateutil.parser
        except ImportError:
            from strange_case import require_package
            require_package('python-dateutil')
        return dateutil.parser.parse(value)
    raise TypeError('Invalid argument {!r} passed to `to_datetime`'.format(value))
Example #2
0
def to_datetime(value):
    if isinstance(value, datetime.date) or isinstance(value, datetime.datetime):
        return value
    if isinstance(value, int) or isinstance(value, float):
        return datetime.datetime.utcfromtimestamp(value)
    if isinstance(value, str):
        try:
            import dateutil.parser
        except ImportError:
            from strange_case import require_package
            require_package('python-dateutil')
        return dateutil.parser.parse(value)
    raise TypeError('Invalid argument {!r} passed to `to_datetime`'.format(value))
Example #3
0
from __future__ import absolute_import
import re
try:
    import misaka as m
    # from misaka import Markdown, HtmlRenderer, EXT_FENCED_CODE, EXT_NO_INTRA_EMPHASIS, HTML_SMARTYPANTS
except ImportError:
    from strange_case import require_package
    require_package('misaka')
import jinja2
import jinja2.ext
from plywood.env import PlywoodEnv

try:
    import pygments as p
    from pygments.formatters import HtmlFormatter
    from pygments.lexers import get_lexer_by_name
except ImportError:
    from strange_case import recommend_package
    recommend_package('pygments',
                      'Pygments is used for syntax highlighting code blocks')

slug_remove = re.compile('\W+')
unidecode = None
try:
    import unidecode
except ImportError:
    from strange_case import recommend_package
    recommend_package(
        'unidecode',
        'Unidecode is used to convert headers with non-ASCII characters into ids for <h1> tags'
    )
Example #4
0
import sys
import os
from shutil import copy2
try:
    from PIL import Image
except ImportError:
    from strange_case import require_package
    require_package('PIL')

from strange_case.nodes import AssetNode
from strange_case.registry import Registry
from strange_case.configurators import configurate


class ImageNode(AssetNode):
    """
    Copies the image, and optionally creates thumbnails for the image.
    The thumbnails are available as image_node.{thumbnail_name}
    """
    def generate_file(self, site, source_path, target_path):
        if 'size' in self.config:
            if not self['skip']:
                image = Image.open(source_path)
                size = self.config['size']

                if isinstance(size, basestring):
                    size = self.config['size'].split('x')
                    if len(size) == 1:
                        size = [size[0], size[0]]
                elif isinstance(size, int):
                    size = [size, size]
Example #5
0
"""
Provides a pluralization filter, using the inflect library.
"""
from __future__ import absolute_import
try:
    import inflect
except ImportError:
    from strange_case import require_package
    require_package('inflect')


__engine = inflect.engine()

pluralize = __engine.plural
Example #6
0
import jinja2
import jinja2.ext
try:
    import markdown2
except ImportError:
    from strange_case import require_package
    require_package('Markdown2')

try:
    import pygments
except ImportError:
    from strange_case import recommend_package
    recommend_package('pygments', 'Pygments is used for syntax highlighting code blocks')


markdowner = markdown2.Markdown(extras=["fenced-code-blocks", "header-ids",
    "code-friendly"])


# markdown filter
def markdown(markdown):
    return markdowner.convert(markdown).strip()


# markdown block
class MarkdownExtension(jinja2.ext.Extension):
    tags = ('markdown',)

    def parse(self, parser):
        lineno = parser.stream.next().lineno
        body = parser.parse_statements(
Example #7
0
from __future__ import absolute_import
import jinja2
import jinja2.ext
try:
    from scss import Scss
except ImportError:
    from strange_case import require_package
    require_package('PySCSS')

from strange_case.registry import Registry
from strange_case.nodes import AssetNode

scss_compiler = Scss().compile


class ScssExtension(jinja2.ext.Extension):
    tags = set(['scss'])

    def __init__(self, environment):
        super(ScssExtension, self).__init__(environment)

    def parse(self, parser):
        lineno = parser.stream.next().lineno
        body = parser.parse_statements(['name:endscss'], drop_needle=True)
        return jinja2.nodes.CallBlock(self.call_method('_scss_support'), [],
                                      [], body).set_lineno(lineno)

    def _scss_support(self, caller):
        return scss_compiler(caller()).strip()

Example #8
0
from __future__ import absolute_import
import jinja2
import jinja2.ext
try:
    import sass
except ImportError:
    from strange_case import require_package
    require_package('libsass')

from strange_case.registry import Registry
from strange_case.nodes import AssetNode


def compile_file(file):
    return sass.compile(filename=file, output_style='compressed')

def compile_string(string):
    return sass.compile(string=string, output_style='compressed')


class ScssExtension(jinja2.ext.Extension):
    tags = set(['scss'])

    def __init__(self, environment):
        super(ScssExtension, self).__init__(environment)

    def parse(self, parser):
        lineno = next(parser.stream).lineno
        body = parser.parse_statements(
            ['name:endscss'],
            drop_needle=True
Example #9
0
from __future__ import absolute_import
import re
import jinja2
import jinja2.ext
try:
    import misaka as m
    # from misaka import Markdown, HtmlRenderer, EXT_FENCED_CODE, EXT_NO_INTRA_EMPHASIS, HTML_SMARTYPANTS
except ImportError:
    from strange_case import require_package
    require_package('misaka')

try:
    import pygments as p
    from pygments.formatters import HtmlFormatter
    from pygments.lexers import get_lexer_by_name
except ImportError:
    from strange_case import recommend_package
    recommend_package('pygments', 'Pygments is used for syntax highlighting code blocks')

slug_remove = re.compile('\W+')
unidecode = None
try:
    import unidecode
except ImportError:
    from strange_case import recommend_package
    recommend_package('unidecode', 'Unidecode is used to convert headers with non-ASCII characters into ids for <h1> tags')


def sluggify(s):
    if unidecode:
        s = unidecode.unidecode(s)
Example #10
0
from __future__ import absolute_import
import jinja2
import jinja2.ext
try:
    from scss import Scss
except ImportError:
    from strange_case import require_package
    require_package('PySCSS')

from strange_case.registry import Registry
from strange_case.nodes import AssetNode


scss_compiler = Scss().compile


class ScssExtension(jinja2.ext.Extension):
    tags = set(['scss'])

    def __init__(self, environment):
        super(ScssExtension, self).__init__(environment)

    def parse(self, parser):
        lineno = parser.stream.next().lineno
        body = parser.parse_statements(
            ['name:endscss'],
            drop_needle=True
        )
        return jinja2.nodes.CallBlock(
            self.call_method('_scss_support'),
            [],
Example #11
0
from __future__ import absolute_import
import sys
import jinja2
import jinja2.ext
try:
    import clevercss
except ImportError:
    from strange_case import require_package
    require_package('CleverCSS')

from strange_case.registry import Registry
from strange_case.nodes import AssetNode

clevercss_compiler = clevercss.convert


class CleverCssExtension(jinja2.ext.Extension):
    tags = set(['clevercss'])

    def __init__(self, environment):
        super(CleverCssExtension, self).__init__(environment)

    def parse(self, parser):
        lineno = next(parser.stream).lineno
        body = parser.parse_statements(
            ['name:endclevercss'],
            drop_needle=True
        )
        return jinja2.nodes.CallBlock(
            self.call_method('_clevercss_support'),
            [],
Example #12
0
import sys
import os
from shutil import copy2
try:
    from PIL import Image
except ImportError:
    from strange_case import require_package
    require_package('Pillow')

from strange_case.nodes import AssetNode
from strange_case.registry import Registry
from strange_case.configurators import configurate


class ImageNode(AssetNode):
    """
    Copies the image, and optionally creates thumbnails for the image.
    The thumbnails are available as image_node.{thumbnail_name}
    """
    def generate_file(self, site, source_path, target_path):
        if 'size' in self.config:
            if not self['skip']:
                image = Image.open(source_path)
                size = self.config['size']

                if isinstance(size, str):
                    size = self.config['size'].split('x')
                    if len(size) == 1:
                        size = [size[0], size[0]]
                elif isinstance(size, int):
                    size = [size, size]
Example #13
0
"""
Provides a pluralization filter, using the inflect library.
"""
from __future__ import absolute_import
try:
    import inflect
except ImportError:
    from strange_case import require_package
    require_package('inflect')

__engine = inflect.engine()

pluralize = __engine.plural
Example #14
0
import sys
import os
from shutil import copy2
try:
    from PIL import Image
except ImportError:
    from strange_case import require_package
    require_package('PIL')

from strange_case.nodes import AssetNode
from strange_case.registry import Registry
from strange_case.configurators import configurate


class ImageNode(AssetNode):
    """
    Copies the image, and optionally creates thumbnails for the image.
    The thumbnails are available as image_node.{thumbnail_name}
    """
    def generate_file(self, site, source_path, target_path):
        if 'size' in self.config:
            if not self['skip']:
                image = Image.open(source_path)
                size = self.config['size']

                if isinstance(size, basestring):
                    size = self.config['size'].split('x')
                    if len(size) == 1:
                        size = [size[0], size[0]]
                elif isinstance(size, int):
                    size = [size, size]
Example #15
0
import jinja2
import jinja2.ext
try:
    import clevercss
except ImportError:
    from strange_case import require_package
    require_package('CleverCSS')

from strange_case.registry import Registry
from strange_case.nodes import AssetNode

clevercss_compiler = clevercss.convert


class CleverCssExtension(jinja2.ext.Extension):
    tags = set(['clevercss'])

    def __init__(self, environment):
        super(CleverCssExtension, self).__init__(environment)

    def parse(self, parser):
        lineno = parser.stream.next().lineno
        body = parser.parse_statements(
            ['name:endclevercss'],
            drop_needle=True
        )
        return jinja2.nodes.CallBlock(
            self.call_method('_clevercss_support'),
            [],
            [],
            body
Example #16
0
import jinja2
import jinja2.ext
try:
    import markdown2
except ImportError:
    from strange_case import require_package
    require_package('Markdown2')

try:
    import pygments
except ImportError:
    from strange_case import recommend_package
    recommend_package('pygments')


markdowner = markdown2.Markdown(extras=["fenced-code-blocks", "header-ids",
    "code-friendly"])


# markdown filter
def markdown(markdown):
    return markdowner.convert(markdown).strip()


# markdown block
class MarkdownExtension(jinja2.ext.Extension):
    tags = ('markdown',)

    def parse(self, parser):
        lineno = parser.stream.next().lineno
        body = parser.parse_statements(