Michael Merickel
2018-10-15 2b024920847481592b1a13d4006d2a9fa8881d72
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import binascii
import os
from textwrap import dedent
 
from pyramid.compat import native_
 
from pyramid.scaffolds.template import Template  # API
 
class PyramidTemplate(Template):
    """
     A class that can be used as a base class for Pyramid scaffolding
     templates.
    """
    def pre(self, command, output_dir, vars):
        """ Overrides :meth:`pyramid.scaffolds.template.Template.pre`, adding
        several variables to the default variables list (including
        ``random_string``, and ``package_logger``).  It also prevents common
        misnamings (such as naming a package "site" or naming a package
        logger "root".
        """
        vars['random_string'] = native_(binascii.hexlify(os.urandom(20)))
        package_logger = vars['package']
        if package_logger == 'root':
            # Rename the app logger in the rare case a project is named 'root'
            package_logger = 'app'
        vars['package_logger'] = package_logger
        return Template.pre(self, command, output_dir, vars)
 
    def post(self, command, output_dir, vars): # pragma: no cover
        """ Overrides :meth:`pyramid.scaffolds.template.Template.post`, to
        print "Welcome to Pyramid.  Sorry for the convenience." after a
        successful scaffolding rendering."""
 
        separator = "=" * 79
        msg = dedent(
            """
            %(separator)s
            Tutorials:     https://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/
            Documentation: https://docs.pylonsproject.org/projects/pyramid/en/latest/
            Twitter:       https://twitter.com/PylonsProject
            Mailing List:  https://groups.google.com/forum/#!forum/pylons-discuss
 
            Welcome to Pyramid.  Sorry for the convenience.
            %(separator)s
        """ % {'separator': separator})
 
        self.out(msg)
        return Template.post(self, command, output_dir, vars)
 
    def out(self, msg): # pragma: no cover (replaceable testing hook)
        print(msg)
 
class StarterProjectTemplate(PyramidTemplate):
    _template_dir = 'starter'
    summary = 'Pyramid starter project using URL dispatch and Jinja2'
 
class ZODBProjectTemplate(PyramidTemplate):
    _template_dir = 'zodb'
    summary = 'Pyramid project using ZODB, traversal, and Chameleon'
 
class AlchemyProjectTemplate(PyramidTemplate):
    _template_dir = 'alchemy'
    summary = (
        'Pyramid project using SQLAlchemy, SQLite, URL dispatch, and '
        'Jinja2')