예제 #1
0
    def test_read(self):
        """
        Test read().

        """
        reader = Loader()
        path = self._get_path("ascii.mustache")
        actual = reader.read(path)
        self.assertString(actual, u"ascii: abc")
예제 #2
0
    def test_unicode__basic__input_str(self):
        """
        Test unicode(): default arguments with str input.

        """
        reader = Loader()
        actual = reader.unicode("foo")

        self.assertString(actual, u"foo")
예제 #3
0
    def test_read(self):
        """
        Test read().

        """
        loader = Loader()
        path = self._get_path('ascii.mustache')
        actual = loader.read(path)
        self.assertString(actual, 'ascii: abc')
예제 #4
0
    def test_unicode__basic__input_unicode(self):
        """
        Test unicode(): default arguments with unicode input.

        """
        loader = Loader()
        actual = loader.str("foo")

        self.assertString(actual, "foo")
예제 #5
0
 def get(self):
     pass_phrase = self.authenticate_request()
     if pass_phrase:
         if self.check_setup():
             loader = Loader(extension='html', search_dirs=['view', 'view/setup'])
             renderer = Renderer(file_extension='html',
                 search_dirs=['view/partials', 'view/setup'])
             template = loader.load_name('setup')
             html = renderer.render(template, {"pass": pass_phrase})
             self.write(html)
         else:
             self.write("setup already completed.")
예제 #6
0
    def test_read__encoding__argument(self):
        """
        Test read(): encoding argument respected.

        """
        reader = Loader()
        path = self._get_path("non_ascii.mustache")

        self.assertRaises(UnicodeDecodeError, reader.read, path)

        actual = reader.read(path, encoding="utf-8")
        self.assertString(actual, u"non-ascii: é")
예제 #7
0
    def test_read__encoding__argument(self):
        """
        Test read(): encoding argument respected.

        """
        loader = Loader()
        path = self._get_path('non_ascii.mustache')

        self.assertRaises(UnicodeDecodeError, loader.read, path)

        actual = loader.read(path, encoding='utf-8')
        self.assertString(actual, 'non-ascii: é')
예제 #8
0
    def test_unicode__encoding_argument(self):
        """
        Test unicode(): encoding argument.

        """
        loader = Loader()

        non_ascii = 'abcdé'.encode('utf-8')

        self.assertRaises(UnicodeDecodeError, loader.str, non_ascii)

        actual = loader.str(non_ascii, encoding='utf-8')
        self.assertString(actual, 'abcdé')
예제 #9
0
    def test_read__file_encoding__attribute(self):
        """
        Test read(): file_encoding attribute respected.

        """
        loader = Loader()
        path = self._get_path('non_ascii.mustache')

        self.assertRaises(UnicodeDecodeError, loader.read, path)

        loader.file_encoding = 'utf-8'
        actual = loader.read(path)
        self.assertString(actual, 'non-ascii: é')
예제 #10
0
    def test_unicode__encoding_argument(self):
        """
        Test unicode(): encoding argument.

        """
        reader = Loader()

        non_ascii = u"abcdé".encode("utf-8")

        self.assertRaises(UnicodeDecodeError, reader.unicode, non_ascii)

        actual = reader.unicode(non_ascii, encoding="utf-8")
        self.assertString(actual, u"abcdé")
예제 #11
0
    def get(self, article_name):

        article_name = article_name.lower()

        if article_name in BaseController.articles:

            article = BaseController.articles[article_name]

            # if content has not modified since last request
            # send a 304 not modified status
            modified_header_key = "If-Modified-Since"
            if modified_header_key in self.request.headers:
                if (self.request.headers["If-Modified-Since"] ==
                    article['modified_date']):
                    self.set_status(304)
                    return

            if (BaseController.settings['enable_caching'] and
                article_name in BaseController.cached_articles):
                html = BaseController.cached_articles[article_name]
            else:
                view_model = {
                "article": article,
                "site_name": BaseController.settings['site_name']
                }
                self.attach_meta_data(view_model)

                loader = Loader(file_encoding='utf8',
                                extension='html',
                                search_dirs=['view', ])
                renderer = Renderer(file_encoding='utf8',
                                    file_extension='html',
                                    search_dirs=['view/partials'])
                template = loader.load_name('article')
                html = renderer.render(template, view_model)

                # cache the html
                BaseController.cached_articles[article_name] = html

            # set http caching headers
            if "http_caching_max_age" in BaseController.settings:
                max_age = BaseController.settings["http_caching_max_age"]
            else:
                max_age = 60
            self.set_header("Cache-control", "max-age=%s" % max_age)
            self.set_header("Last-Modified", article['modified_date'])
            self.write(html)

        else:
            raise tornado.web.HTTPError(404)
예제 #12
0
    def generate_page(self, articles):
        view_model = {
                    "articles": articles,
                    "site_name": BaseController.settings["site_name"]
                    }
        self.attach_meta_data(view_model)

        loader = Loader(file_encoding='utf8', extension='html',
                        search_dirs=['view', ])
        renderer = Renderer(file_encoding='utf8', file_extension='html',
                            search_dirs=['view/partials'])
        template = loader.load_name('list')
        html = renderer.render(template, view_model)
        return html
예제 #13
0
    def test_unicode__basic__input_unicode_subclass(self):
        """
        Test unicode(): default arguments with unicode-subclass input.

        """
        class UnicodeSubclass(str):
            pass

        s = UnicodeSubclass("foo")

        loader = Loader()
        actual = loader.str(s)

        self.assertString(actual, "foo")
예제 #14
0
    def test_unicode__to_unicode__attribute(self):
        """
        Test unicode(): encoding attribute.

        """
        loader = Loader()

        non_ascii = 'abcdé'.encode('utf-8')
        self.assertRaises(UnicodeDecodeError, loader.str, non_ascii)

        def to_unicode(s, encoding=None):
            if encoding is None:
                encoding = 'utf-8'
            return str(s, encoding)

        loader.to_unicode = to_unicode
        self.assertString(loader.str(non_ascii), "abcdé")
예제 #15
0
    def test_unicode__to_unicode__attribute(self):
        """
        Test unicode(): encoding attribute.

        """
        reader = Loader()

        non_ascii = u'abcdé'.encode('utf-8')

        self.assertRaises(UnicodeDecodeError, reader.unicode, non_ascii)

        def to_unicode(s, encoding=None):
            if encoding is None:
                encoding = 'utf-8'
            return unicode(s, encoding)

        reader.to_unicode = to_unicode
        self.assertString(reader.unicode(non_ascii), u"abcdé")
예제 #16
0
def index():
    loader = Loader()
    template = loader.load_name('index')

    response = requests.get('http://www.unboxedconsulting.com/people/carl-whittaker')
    status = response.status_code
    if status == 200:
        content = response.content

        soup = BeautifulSoup(content)
        image = 'http://www.unboxedconsulting.com' + soup.select('a.front img')[0]['src']
    else:
        image = ''

    return pystache.render(
        template,
        {
            'has_caricature': status == 200,
            'image': image
        }
    )
예제 #17
0
    def test_init__to_unicode__default(self):
        loader = Loader()
        self.assertRaises(TypeError, loader.to_unicode, u"abc")

        decode_errors = defaults.DECODE_ERRORS
        string_encoding = defaults.STRING_ENCODING

        nonascii = "abcdé"

        try:
            defaults.DECODE_ERRORS = "strict"
            defaults.STRING_ENCODING = "ascii"
            loader = Loader()
            self.assertRaises(UnicodeDecodeError, loader.to_unicode, nonascii)

            defaults.DECODE_ERRORS = "ignore"
            loader = Loader()
            self.assertString(loader.to_unicode(nonascii), u"abcd")

            defaults.STRING_ENCODING = "utf-8"
            loader = Loader()
            self.assertString(loader.to_unicode(nonascii), u"abcdé")

        finally:
            defaults.DECODE_ERRORS = decode_errors
            defaults.STRING_ENCODING = string_encoding
예제 #18
0
    def test_init__to_unicode__default(self):
        loader = Loader()
        self.assertRaises(TypeError, loader.to_unicode, u"abc")

        decode_errors = defaults.DECODE_ERRORS
        string_encoding = defaults.STRING_ENCODING

        nonascii = 'abcdé'

        try:
            defaults.DECODE_ERRORS = 'strict'
            defaults.STRING_ENCODING = 'ascii'
            loader = Loader()
            self.assertRaises(UnicodeDecodeError, loader.to_unicode, nonascii)

            defaults.DECODE_ERRORS = 'ignore'
            loader = Loader()
            self.assertString(loader.to_unicode(nonascii), u'abcd')

            defaults.STRING_ENCODING = 'utf-8'
            loader = Loader()
            self.assertString(loader.to_unicode(nonascii), u'abcdé')

        finally:
            defaults.DECODE_ERRORS = decode_errors
            defaults.STRING_ENCODING = string_encoding
예제 #19
0
    def get(self):

        if (BaseController.settings['enable_caching'] and
            BaseController.cached_home):
            html = BaseController.cached_home
            self.write(html)
        else:
            published_articles = []
            for article in BaseController.articles.values():
                if article['date'] is not None:
                    published_articles.append(article)

            articles = sorted(published_articles,
                              key=operator.itemgetter("date"),
                              reverse=True)

            max_articles_count = BaseController.settings["homepage_max_articles"]
            show_archive = False
            if len(articles) > max_articles_count:
                show_archive = True
                articles = articles[0:max_articles_count]

            view_model = {
                        "articles": articles,
                        "showArchive": show_archive,
                        "site_name": BaseController.settings["site_name"]
                        }
            self.attach_meta_data(view_model)
            loader = Loader(file_encoding='utf8', extension='html',
                        search_dirs=['view', ])
            renderer = Renderer(file_encoding='utf8', file_extension='html',
                            search_dirs=['view/partials'])
            template = loader.load_name('home')
            html = renderer.render(template, view_model)

            # cache the home page
            BaseController.cached_home = html

            self.write(html)
    #
    # title_partial = {'page-title': 'Some cinder crap | {{title}}'}
    # renderer = Renderer(partials=title_partial)
    # renderer.search_dirs.append(TEMPLATE_DIR)
    # path = os.path.join(TEMPLATE_DIR, "master-template.mustache")
    # actual = renderer.render_path(path, test_obj)
    # print actual

    # step 1: render content in template
    content_renderer = Renderer()
    path = os.path.join(CLASS_TEMPLATE_DIR, "main-content-template.mustache")
    content_renderer.search_dirs.append(TEMPLATE_DIR)
    rendered_content = content_renderer.render_path(path, class_obj)

    # step 2: place rendered content into main template
    # - should have the following custom partials:
    #   - page title (define in object for page templates)
    #   - page content (rendered page content)
    #   - any other common partials that may lie outside the basic content area

    test_obj = {'title': class_obj["name"]}

    loader = Loader()
    # template = loader.read("title")
    title_partial = loader.load_name(os.path.join(CLASS_TEMPLATE_DIR, "title"))
    partials = {'page-title': title_partial, 'main-content': rendered_content}
    renderer = Renderer(partials=partials)

    path = os.path.join(TEMPLATE_DIR, "master-template.mustache")
    actual = renderer.render_path(path, test_obj)
    print actual
예제 #21
0
else:
    print "Droplet named `biuVPN` exists"
print droplet.name, droplet.id, droplet.ip_address, droplet.status, \
    droplet.created_at

droplet_id = droplet.id
ip_address = droplet.ip_address

while not ip_address:
    print "Waiting Digital Ocean creating droplet ..."
    droplet.load()
    ip_address = droplet.ip_address
    sleep(5)

# Generate Ansible configuration files

print "Generating Ansible configuration files"

loader = Loader(extension="mustache", search_dirs=os.getcwd())
renderer = Renderer()

template = loader.load_name(os.getcwd() + "/" + "ansible_hosts")
result = renderer.render(template, {"ip_address": ip_address})
with open("ansible_hosts", 'w') as file_handler:
    file_handler.write(result)

template = loader.load_name(os.getcwd() + "/" + "biuVPN.yml")
result = renderer.render(template, {"ip_address": ip_address})
with open("biuVPN.yml", 'w') as file_handler:
    file_handler.write(result)
예제 #22
0
import redis
import time
import os
import pystache
import gevent
import gevent.monkey
from gevent.pywsgi import WSGIServer
gevent.monkey.patch_all()

from pystache.loader import Loader

from flask import Flask, Response, request
app = Flask(__name__)


loader = Loader()
templates = {
    'index': loader.load_name('index')
}


@app.route('/')
def index():
    r = redis.Redis()
    ctx = {
        'temperature': r.get('temperature'),
    }

    return pystache.render(templates['index'], ctx)

예제 #23
0
 def test_load_file(self):
     loader = Loader(search_dirs=[DATA_DIR, LOADER_DATA_DIR])
     template = loader.load_file('template.txt')
     self.assertEqual(template, 'Test template file\n')
예제 #24
0
    # title_partial = {'page-title': 'Some cinder crap | {{title}}'}
    # renderer = Renderer(partials=title_partial)
    # renderer.search_dirs.append(TEMPLATE_DIR)
    # path = os.path.join(TEMPLATE_DIR, "master-template.mustache")
    # actual = renderer.render_path(path, test_obj)
    # print actual

    # step 1: render content in template
    content_renderer = Renderer()
    path = os.path.join(CLASS_TEMPLATE_DIR, "main-content-template.mustache")
    content_renderer.search_dirs.append(TEMPLATE_DIR)
    rendered_content = content_renderer.render_path(path, class_obj)

    # step 2: place rendered content into main template
    # - should have the following custom partials:
    #   - page title (define in object for page templates)
    #   - page content (rendered page content)
    #   - any other common partials that may lie outside the basic content area

    test_obj = {"title": class_obj["name"]}

    loader = Loader()
    # template = loader.read("title")
    title_partial = loader.load_name(os.path.join(CLASS_TEMPLATE_DIR, "title"))
    partials = {"page-title": title_partial, "main-content": rendered_content}
    renderer = Renderer(partials=partials)

    path = os.path.join(TEMPLATE_DIR, "master-template.mustache")
    actual = renderer.render_path(path, test_obj)
    print actual
예제 #25
0
    def test_init__loader(self):
        loader = Loader()
        custom = SpecLoader(loader=loader)

        self.assertIs(custom.loader, loader)
예제 #26
0
 def test_init__file_encoding(self):
     loader = Loader(file_encoding='bar')
     self.assertEqual(loader.file_encoding, 'bar')
예제 #27
0
from pystache.loader import Loader

from flask import Flask
from flask_compress import Compress
from flask_talisman import Talisman, GOOGLE_CSP_POLICY
app = Flask(__name__)
Compress(app)
GOOGLE_CSP_POLICY['style-src'] += ' cdnjs.cloudflare.com'
Talisman(app, content_security_policy=GOOGLE_CSP_POLICY)

from letterboxd import get_letterboxd_most_recently_watched_details

cache = SimpleCache()

loader = Loader()

template = loader.load_name('index')


def get_cached_result(func, key):
    cached_result = None

    try:
        cached_result = cache.get(key)
        if not cached_result:
            cached_result = func()
            cache.set(key, cached_result)
    except:
        pass
예제 #28
0
import os
import pystache
import gevent
import gevent.monkey
import redis
from gevent.pywsgi import WSGIServer
gevent.monkey.patch_all()

from pystache.loader import Loader

from flask import Flask, Response, request
app = Flask(__name__)


loader = Loader()
templates = {
    'comic': loader.load_name('comic')
}


@app.route('/')
def index():
    if request.headers.get('accept') == 'text/event-stream':
        r = redis.Redis()
        pubsub = r.pubsub()
        pubsub.subscribe(['comic'])

        def images():
            for msg in pubsub.listen():
                if msg['type'] == 'message':
                    yield 'event: comic\n'
예제 #29
0
 def test_load_name(self):
     loader = Loader(search_dirs=[DATA_DIR, LOADER_DATA_DIR],
                     extension='txt')
     template = loader.load_name('template')
     self.assertEqual(template, 'Test template file\n')
예제 #30
0
 def test_load_file(self):
     loader = Loader(search_dirs=[DATA_DIR, LOADER_DATA_DIR])
     template = loader.load_file('template.txt')
     self.assertEqual(template, 'Test template file\n')
예제 #31
0
gevent.monkey.patch_all()

from pystache.loader import Loader
from pystache import render

from flask import Flask, abort, url_for

from flask_compress import Compress

from arguments import arguments


app = Flask(__name__)
Compress(app)

loader = Loader()

home_template = loader.load_name('templates/home')


def slugify(string):
    return string.lower().replace(' ', '-')


routes = {}

for challengers in arguments:
    for perm in itertools.permutations(challengers):
        slugs = tuple(slugify(c) for c in perm)

        routes[slugs] = perm
예제 #32
0
 def _fetch_template(self, template_name):
     loader = Loader(search_dirs=[ROOT_PATH+"/static/template/"])
     
     return loader.load_name(template_name)
예제 #33
0
 def test_init__to_unicode(self):
     to_unicode = lambda x: x
     loader = Loader(to_unicode=to_unicode)
     self.assertEqual(loader.to_unicode, to_unicode)
예제 #34
0
 def test_init__extension(self):
     loader = Loader(extension='foo')
     self.assertEqual(loader.extension, 'foo')
예제 #35
0
 def test_init__extension__default(self):
     # Test the default value.
     loader = Loader()
     self.assertEqual(loader.extension, 'mustache')
예제 #36
0
 def test_load_name(self):
     loader = Loader(search_dirs=[DATA_DIR, LOADER_DATA_DIR],
                     extension='txt')
     template = loader.load_name('template')
     self.assertEqual(template, 'Test template file\n')
예제 #37
0
 def test_load_name(self):
     loader = Loader(search_dirs=[DATA_DIR, LOADER_DATA_DIR], extension="txt")
     template = loader.load_name("template")
     self.assertEqual(template, "Test template file\n")
예제 #38
0
 def get(self):
     loader = Loader(extension='html', search_dirs=['view', 'view/setup'])
     template = loader.load_name('success')
     renderer = Renderer(file_extension='html',
                         search_dirs=['view/partials', 'view/setup'])
     self.write(renderer.render(template, ""))