summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2018-10-31 01:46:25 -0500
committerMichael Merickel <michael@merickel.org>2018-10-31 01:46:25 -0500
commit4aa2eb5f970b812a96480e2cd7c18c1103b844c8 (patch)
treeeb1406080661b3cf8b5b3ad2935992863b654f00 /src
parent26ff2bf625f426f90abb313e9e028fc16308d105 (diff)
downloadpyramid-4aa2eb5f970b812a96480e2cd7c18c1103b844c8.tar.gz
pyramid-4aa2eb5f970b812a96480e2cd7c18c1103b844c8.tar.bz2
pyramid-4aa2eb5f970b812a96480e2cd7c18c1103b844c8.zip
initial work removing pcreate
Diffstat (limited to 'src')
-rw-r--r--src/pyramid/scaffolds/__init__.py72
-rw-r--r--src/pyramid/scaffolds/alchemy/+dot+coveragerc_tmpl3
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/__init__.py12
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl74
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/models/meta.py16
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/models/mymodel.py18
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/routes.py3
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/scripts/__init__.py1
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py45
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/static/pyramid-16x16.pngbin1319 -> 0 bytes
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/static/pyramid.pngbin12901 -> 0 bytes
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/static/theme.css154
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/templates/404.jinja2_tmpl8
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl66
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl8
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl65
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/views/__init__.py0
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl33
-rw-r--r--src/pyramid/scaffolds/alchemy/+package+/views/notfound.py_tmpl7
-rw-r--r--src/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl4
-rw-r--r--src/pyramid/scaffolds/alchemy/MANIFEST.in_tmpl2
-rw-r--r--src/pyramid/scaffolds/alchemy/README.txt_tmpl14
-rw-r--r--src/pyramid/scaffolds/alchemy/development.ini_tmpl69
-rw-r--r--src/pyramid/scaffolds/alchemy/production.ini_tmpl59
-rw-r--r--src/pyramid/scaffolds/alchemy/pytest.ini_tmpl3
-rw-r--r--src/pyramid/scaffolds/alchemy/setup.py_tmpl55
-rw-r--r--src/pyramid/scaffolds/copydir.py372
-rw-r--r--src/pyramid/scaffolds/starter/+dot+coveragerc_tmpl3
-rw-r--r--src/pyramid/scaffolds/starter/+package+/__init__.py12
-rw-r--r--src/pyramid/scaffolds/starter/+package+/static/pyramid-16x16.pngbin1319 -> 0 bytes
-rw-r--r--src/pyramid/scaffolds/starter/+package+/static/pyramid.pngbin12901 -> 0 bytes
-rw-r--r--src/pyramid/scaffolds/starter/+package+/static/theme.css152
-rw-r--r--src/pyramid/scaffolds/starter/+package+/templates/layout.jinja2_tmpl66
-rw-r--r--src/pyramid/scaffolds/starter/+package+/templates/mytemplate.jinja2_tmpl8
-rw-r--r--src/pyramid/scaffolds/starter/+package+/tests.py_tmpl29
-rw-r--r--src/pyramid/scaffolds/starter/+package+/views.py_tmpl6
-rw-r--r--src/pyramid/scaffolds/starter/CHANGES.txt_tmpl4
-rw-r--r--src/pyramid/scaffolds/starter/MANIFEST.in_tmpl2
-rw-r--r--src/pyramid/scaffolds/starter/README.txt_tmpl12
-rw-r--r--src/pyramid/scaffolds/starter/development.ini_tmpl59
-rw-r--r--src/pyramid/scaffolds/starter/production.ini_tmpl53
-rw-r--r--src/pyramid/scaffolds/starter/pytest.ini_tmpl3
-rw-r--r--src/pyramid/scaffolds/starter/setup.py_tmpl49
-rw-r--r--src/pyramid/scaffolds/template.py185
-rw-r--r--src/pyramid/scaffolds/tests.py79
-rw-r--r--src/pyramid/scaffolds/zodb/+dot+coveragerc_tmpl3
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/__init__.py20
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/models.py14
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/static/pyramid-16x16.pngbin1319 -> 0 bytes
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/static/pyramid.pngbin12901 -> 0 bytes
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/static/theme.css154
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/templates/mytemplate.pt_tmpl67
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/tests.py_tmpl17
-rw-r--r--src/pyramid/scaffolds/zodb/+package+/views.py_tmpl7
-rw-r--r--src/pyramid/scaffolds/zodb/CHANGES.txt_tmpl4
-rw-r--r--src/pyramid/scaffolds/zodb/MANIFEST.in_tmpl2
-rw-r--r--src/pyramid/scaffolds/zodb/README.txt_tmpl12
-rw-r--r--src/pyramid/scaffolds/zodb/development.ini_tmpl64
-rw-r--r--src/pyramid/scaffolds/zodb/production.ini_tmpl59
-rw-r--r--src/pyramid/scaffolds/zodb/pytest.ini_tmpl3
-rw-r--r--src/pyramid/scaffolds/zodb/setup.py_tmpl53
-rw-r--r--src/pyramid/scripts/pcreate.py297
62 files changed, 0 insertions, 2661 deletions
diff --git a/src/pyramid/scaffolds/__init__.py b/src/pyramid/scaffolds/__init__.py
deleted file mode 100644
index eff71d204..000000000
--- a/src/pyramid/scaffolds/__init__.py
+++ /dev/null
@@ -1,72 +0,0 @@
-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
- """ # noqa: E501
- % {'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'
- )
diff --git a/src/pyramid/scaffolds/alchemy/+dot+coveragerc_tmpl b/src/pyramid/scaffolds/alchemy/+dot+coveragerc_tmpl
deleted file mode 100644
index 273a4a580..000000000
--- a/src/pyramid/scaffolds/alchemy/+dot+coveragerc_tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-[run]
-source = {{package}}
-omit = {{package}}/test*
diff --git a/src/pyramid/scaffolds/alchemy/+package+/__init__.py b/src/pyramid/scaffolds/alchemy/+package+/__init__.py
deleted file mode 100644
index 4dab44823..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from pyramid.config import Configurator
-
-
-def main(global_config, **settings):
- """ This function returns a Pyramid WSGI application.
- """
- config = Configurator(settings=settings)
- config.include('pyramid_jinja2')
- config.include('.models')
- config.include('.routes')
- config.scan()
- return config.make_wsgi_app()
diff --git a/src/pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl b/src/pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl
deleted file mode 100644
index 521816ce7..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl
+++ /dev/null
@@ -1,74 +0,0 @@
-from sqlalchemy import engine_from_config
-from sqlalchemy.orm import sessionmaker
-from sqlalchemy.orm import configure_mappers
-import zope.sqlalchemy
-
-# import or define all models here to ensure they are attached to the
-# Base.metadata prior to any initialization routines
-from .mymodel import MyModel # noqa
-
-# run configure_mappers after defining all of the models to ensure
-# all relationships can be setup
-configure_mappers()
-
-
-def get_engine(settings, prefix='sqlalchemy.'):
- return engine_from_config(settings, prefix)
-
-
-def get_session_factory(engine):
- factory = sessionmaker()
- factory.configure(bind=engine)
- return factory
-
-
-def get_tm_session(session_factory, transaction_manager):
- """
- Get a ``sqlalchemy.orm.Session`` instance backed by a transaction.
-
- This function will hook the session to the transaction manager which
- will take care of committing any changes.
-
- - When using pyramid_tm it will automatically be committed or aborted
- depending on whether an exception is raised.
-
- - When using scripts you should wrap the session in a manager yourself.
- For example::
-
- import transaction
-
- engine = get_engine(settings)
- session_factory = get_session_factory(engine)
- with transaction.manager:
- dbsession = get_tm_session(session_factory, transaction.manager)
-
- """
- dbsession = session_factory()
- zope.sqlalchemy.register(
- dbsession, transaction_manager=transaction_manager)
- return dbsession
-
-
-def includeme(config):
- """
- Initialize the model for a Pyramid app.
-
- Activate this setup using ``config.include('{{project}}.models')``.
-
- """
- settings = config.get_settings()
- settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
-
- # use pyramid_tm to hook the transaction lifecycle to the request
- config.include('pyramid_tm')
-
- session_factory = get_session_factory(get_engine(settings))
- config.registry['dbsession_factory'] = session_factory
-
- # make request.dbsession available for use in Pyramid
- config.add_request_method(
- # r.tm is the transaction manager used by pyramid_tm
- lambda r: get_tm_session(session_factory, r.tm),
- 'dbsession',
- reify=True
- )
diff --git a/src/pyramid/scaffolds/alchemy/+package+/models/meta.py b/src/pyramid/scaffolds/alchemy/+package+/models/meta.py
deleted file mode 100644
index 0682247b5..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/models/meta.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy.schema import MetaData
-
-# Recommended naming convention used by Alembic, as various different database
-# providers will autogenerate vastly different names making migrations more
-# difficult. See: http://alembic.zzzcomputing.com/en/latest/naming.html
-NAMING_CONVENTION = {
- "ix": 'ix_%(column_0_label)s',
- "uq": "uq_%(table_name)s_%(column_0_name)s",
- "ck": "ck_%(table_name)s_%(constraint_name)s",
- "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
- "pk": "pk_%(table_name)s"
-}
-
-metadata = MetaData(naming_convention=NAMING_CONVENTION)
-Base = declarative_base(metadata=metadata)
diff --git a/src/pyramid/scaffolds/alchemy/+package+/models/mymodel.py b/src/pyramid/scaffolds/alchemy/+package+/models/mymodel.py
deleted file mode 100644
index d65a01a42..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/models/mymodel.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from sqlalchemy import (
- Column,
- Index,
- Integer,
- Text,
-)
-
-from .meta import Base
-
-
-class MyModel(Base):
- __tablename__ = 'models'
- id = Column(Integer, primary_key=True)
- name = Column(Text)
- value = Column(Integer)
-
-
-Index('my_index', MyModel.name, unique=True, mysql_length=255)
diff --git a/src/pyramid/scaffolds/alchemy/+package+/routes.py b/src/pyramid/scaffolds/alchemy/+package+/routes.py
deleted file mode 100644
index 25504ad4d..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/routes.py
+++ /dev/null
@@ -1,3 +0,0 @@
-def includeme(config):
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.add_route('home', '/')
diff --git a/src/pyramid/scaffolds/alchemy/+package+/scripts/__init__.py b/src/pyramid/scaffolds/alchemy/+package+/scripts/__init__.py
deleted file mode 100644
index 5bb534f79..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/scripts/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# package
diff --git a/src/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py b/src/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py
deleted file mode 100644
index 7307ecc5c..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import os
-import sys
-import transaction
-
-from pyramid.paster import (
- get_appsettings,
- setup_logging,
- )
-
-from pyramid.scripts.common import parse_vars
-
-from ..models.meta import Base
-from ..models import (
- get_engine,
- get_session_factory,
- get_tm_session,
- )
-from ..models import MyModel
-
-
-def usage(argv):
- cmd = os.path.basename(argv[0])
- print('usage: %s <config_uri> [var=value]\n'
- '(example: "%s development.ini")' % (cmd, cmd))
- sys.exit(1)
-
-
-def main(argv=sys.argv):
- if len(argv) < 2:
- usage(argv)
- config_uri = argv[1]
- options = parse_vars(argv[2:])
- setup_logging(config_uri)
- settings = get_appsettings(config_uri, options=options)
-
- engine = get_engine(settings)
- Base.metadata.create_all(engine)
-
- session_factory = get_session_factory(engine)
-
- with transaction.manager:
- dbsession = get_tm_session(session_factory, transaction.manager)
-
- model = MyModel(name='one', value=1)
- dbsession.add(model)
diff --git a/src/pyramid/scaffolds/alchemy/+package+/static/pyramid-16x16.png b/src/pyramid/scaffolds/alchemy/+package+/static/pyramid-16x16.png
deleted file mode 100644
index 979203112..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/static/pyramid-16x16.png
+++ /dev/null
Binary files differ
diff --git a/src/pyramid/scaffolds/alchemy/+package+/static/pyramid.png b/src/pyramid/scaffolds/alchemy/+package+/static/pyramid.png
deleted file mode 100644
index 4ab837be9..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/static/pyramid.png
+++ /dev/null
Binary files differ
diff --git a/src/pyramid/scaffolds/alchemy/+package+/static/theme.css b/src/pyramid/scaffolds/alchemy/+package+/static/theme.css
deleted file mode 100644
index 0f4b1a4d4..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/static/theme.css
+++ /dev/null
@@ -1,154 +0,0 @@
-@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);
-body {
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-weight: 300;
- color: #ffffff;
- background: #bc2131;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-weight: 300;
-}
-p {
- font-weight: 300;
-}
-.font-normal {
- font-weight: 400;
-}
-.font-semi-bold {
- font-weight: 600;
-}
-.font-bold {
- font-weight: 700;
-}
-.starter-template {
- margin-top: 250px;
-}
-.starter-template .content {
- margin-left: 10px;
-}
-.starter-template .content h1 {
- margin-top: 10px;
- font-size: 60px;
-}
-.starter-template .content h1 .smaller {
- font-size: 40px;
- color: #f2b7bd;
-}
-.starter-template .content .lead {
- font-size: 25px;
- color: #f2b7bd;
-}
-.starter-template .content .lead .font-normal {
- color: #ffffff;
-}
-.starter-template .links {
- float: right;
- right: 0;
- margin-top: 125px;
-}
-.starter-template .links ul {
- display: block;
- padding: 0;
- margin: 0;
-}
-.starter-template .links ul li {
- list-style: none;
- display: inline;
- margin: 0 10px;
-}
-.starter-template .links ul li:first-child {
- margin-left: 0;
-}
-.starter-template .links ul li:last-child {
- margin-right: 0;
-}
-.starter-template .links ul li.current-version {
- color: #f2b7bd;
- font-weight: 400;
-}
-.starter-template .links ul li a, a {
- color: #f2b7bd;
- text-decoration: underline;
-}
-.starter-template .links ul li a:hover, a:hover {
- color: #ffffff;
- text-decoration: underline;
-}
-.starter-template .links ul li .icon-muted {
- color: #eb8b95;
- margin-right: 5px;
-}
-.starter-template .links ul li:hover .icon-muted {
- color: #ffffff;
-}
-.starter-template .copyright {
- margin-top: 10px;
- font-size: 0.9em;
- color: #f2b7bd;
- text-transform: lowercase;
- float: right;
- right: 0;
-}
-@media (max-width: 1199px) {
- .starter-template .content h1 {
- font-size: 45px;
- }
- .starter-template .content h1 .smaller {
- font-size: 30px;
- }
- .starter-template .content .lead {
- font-size: 20px;
- }
-}
-@media (max-width: 991px) {
- .starter-template {
- margin-top: 0;
- }
- .starter-template .logo {
- margin: 40px auto;
- }
- .starter-template .content {
- margin-left: 0;
- text-align: center;
- }
- .starter-template .content h1 {
- margin-bottom: 20px;
- }
- .starter-template .links {
- float: none;
- text-align: center;
- margin-top: 60px;
- }
- .starter-template .copyright {
- float: none;
- text-align: center;
- }
-}
-@media (max-width: 767px) {
- .starter-template .content h1 .smaller {
- font-size: 25px;
- display: block;
- }
- .starter-template .content .lead {
- font-size: 16px;
- }
- .starter-template .links {
- margin-top: 40px;
- }
- .starter-template .links ul li {
- display: block;
- margin: 0;
- }
- .starter-template .links ul li .icon-muted {
- display: none;
- }
- .starter-template .copyright {
- margin-top: 20px;
- }
-}
diff --git a/src/pyramid/scaffolds/alchemy/+package+/templates/404.jinja2_tmpl b/src/pyramid/scaffolds/alchemy/+package+/templates/404.jinja2_tmpl
deleted file mode 100644
index 1917f83c7..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/templates/404.jinja2_tmpl
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "layout.jinja2" %}
-
-{% block content %}
-<div class="content">
- <h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">Alchemy scaffold</span></h1>
- <p class="lead"><span class="font-semi-bold">404</span> Page Not Found</p>
-</div>
-{% endblock content %}
diff --git a/src/pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl b/src/pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl
deleted file mode 100644
index d6b3ca9c6..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html lang="\{\{request.locale_name\}\}">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="pyramid web application">
- <meta name="author" content="Pylons Project">
- <link rel="shortcut icon" href="\{\{request.static_url('{{package}}:static/pyramid-16x16.png')\}\}">
-
- <title>Alchemy Scaffold for The Pyramid Web Framework</title>
-
- <!-- Bootstrap core CSS -->
- <link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
-
- <!-- Custom styles for this scaffold -->
- <link href="\{\{request.static_url('{{package}}:static/theme.css')\}\}" rel="stylesheet">
-
- <!-- HTML5 shiv and Respond.js IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" integrity="sha384-0s5Pv64cNZJieYFkXYOTId2HMA2Lfb6q2nAcx2n0RTLUnCAoTTsS0nKEO27XyKcY" crossorigin="anonymous"></script>
- <script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js" integrity="sha384-f1r2UzjsxZ9T4V1f2zBO/evUqSEOpeaUUZcMTz1Up63bl4ruYnFYeM+BxI4NhyI0" crossorigin="anonymous"></script>
- <![endif]-->
- </head>
-
- <body>
-
- <div class="starter-template">
- <div class="container">
- <div class="row">
- <div class="col-md-2">
- <img class="logo img-responsive" src="\{\{request.static_url('{{package}}:static/pyramid.png')\}\}" alt="pyramid web framework">
- </div>
- <div class="col-md-10">
- {% block content %}
- <p>No content</p>
- {% endblock content %}
- </div>
- </div>
- <div class="row">
- <div class="links">
- <ul>
- <li class="current-version">Generated by v{{pyramid_version}}</li>
- <li><i class="glyphicon glyphicon-bookmark icon-muted"></i><a href="https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/">Docs</a></li>
- <li><i class="glyphicon glyphicon-cog icon-muted"></i><a href="https://github.com/Pylons/pyramid">Github Project</a></li>
- <li><i class="glyphicon glyphicon-globe icon-muted"></i><a href="https://webchat.freenode.net/?channels=pyramid">IRC Channel</a></li>
- <li><i class="glyphicon glyphicon-home icon-muted"></i><a href="https://pylonsproject.org">Pylons Project</a></li>
- </ul>
- </div>
- </div>
- <div class="row">
- <div class="copyright">
- Copyright &copy; Pylons Project
- </div>
- </div>
- </div>
- </div>
-
-
- <!-- Bootstrap core JavaScript
- ================================================== -->
- <!-- Placed at the end of the document so the pages load faster -->
- <script src="//oss.maxcdn.com/libs/jquery/1.10.2/jquery.min.js" integrity="sha384-aBL3Lzi6c9LNDGvpHkZrrm3ZVsIwohDD7CDozL0pk8FwCrfmV7H9w8j3L7ikEv6h" crossorigin="anonymous"></script>
- <script src="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js" integrity="sha384-s1ITto93iSMDxlp/79qhWHi+LsIi9Gx6yL+cOKDuymvihkfol83TYbLbOw+W/wv4" crossorigin="anonymous"></script>
- </body>
-</html>
diff --git a/src/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl b/src/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl
deleted file mode 100644
index 01fe5b8e3..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "layout.jinja2" %}
-
-{% block content %}
-<div class="content">
- <h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">Alchemy scaffold</span></h1>
- <p class="lead">Welcome to <span class="font-normal">\{\{project\}\}</span>, an&nbsp;application generated&nbsp;by<br>the <span class="font-normal">Pyramid Web Framework {{pyramid_version}}</span>.</p>
-</div>
-{% endblock content %}
diff --git a/src/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl b/src/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl
deleted file mode 100644
index 072eab5b2..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl
+++ /dev/null
@@ -1,65 +0,0 @@
-import unittest
-import transaction
-
-from pyramid import testing
-
-
-def dummy_request(dbsession):
- return testing.DummyRequest(dbsession=dbsession)
-
-
-class BaseTest(unittest.TestCase):
- def setUp(self):
- self.config = testing.setUp(settings={
- 'sqlalchemy.url': 'sqlite:///:memory:'
- })
- self.config.include('.models')
- settings = self.config.get_settings()
-
- from .models import (
- get_engine,
- get_session_factory,
- get_tm_session,
- )
-
- self.engine = get_engine(settings)
- session_factory = get_session_factory(self.engine)
-
- self.session = get_tm_session(session_factory, transaction.manager)
-
- def init_database(self):
- from .models.meta import Base
- Base.metadata.create_all(self.engine)
-
- def tearDown(self):
- from .models.meta import Base
-
- testing.tearDown()
- transaction.abort()
- Base.metadata.drop_all(self.engine)
-
-
-class TestMyViewSuccessCondition(BaseTest):
-
- def setUp(self):
- super(TestMyViewSuccessCondition, self).setUp()
- self.init_database()
-
- from .models import MyModel
-
- model = MyModel(name='one', value=55)
- self.session.add(model)
-
- def test_passing_view(self):
- from .views.default import my_view
- info = my_view(dummy_request(self.session))
- self.assertEqual(info['one'].name, 'one')
- self.assertEqual(info['project'], '{{project}}')
-
-
-class TestMyViewFailureCondition(BaseTest):
-
- def test_failing_view(self):
- from .views.default import my_view
- info = my_view(dummy_request(self.session))
- self.assertEqual(info.status_int, 500)
diff --git a/src/pyramid/scaffolds/alchemy/+package+/views/__init__.py b/src/pyramid/scaffolds/alchemy/+package+/views/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/views/__init__.py
+++ /dev/null
diff --git a/src/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl b/src/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl
deleted file mode 100644
index 7bf0026e5..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl
+++ /dev/null
@@ -1,33 +0,0 @@
-from pyramid.response import Response
-from pyramid.view import view_config
-
-from sqlalchemy.exc import DBAPIError
-
-from ..models import MyModel
-
-
-@view_config(route_name='home', renderer='../templates/mytemplate.jinja2')
-def my_view(request):
- try:
- query = request.dbsession.query(MyModel)
- one = query.filter(MyModel.name == 'one').first()
- except DBAPIError:
- return Response(db_err_msg, content_type='text/plain', status=500)
- return {'one': one, 'project': '{{project}}'}
-
-
-db_err_msg = """\
-Pyramid is having a problem using your SQL database. The problem
-might be caused by one of the following things:
-
-1. You may need to run the "initialize_{{project}}_db" script
- to initialize your database tables. Check your virtual
- environment's "bin" directory for this script and try to run it.
-
-2. Your database server may not be running. Check that the
- database server referred to by the "sqlalchemy.url" setting in
- your "development.ini" file is running.
-
-After you fix the problem, please restart the Pyramid application to
-try it again.
-"""
diff --git a/src/pyramid/scaffolds/alchemy/+package+/views/notfound.py_tmpl b/src/pyramid/scaffolds/alchemy/+package+/views/notfound.py_tmpl
deleted file mode 100644
index 69d6e2804..000000000
--- a/src/pyramid/scaffolds/alchemy/+package+/views/notfound.py_tmpl
+++ /dev/null
@@ -1,7 +0,0 @@
-from pyramid.view import notfound_view_config
-
-
-@notfound_view_config(renderer='../templates/404.jinja2')
-def notfound_view(request):
- request.response.status = 404
- return {}
diff --git a/src/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl b/src/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl
deleted file mode 100644
index 35a34f332..000000000
--- a/src/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl
+++ /dev/null
@@ -1,4 +0,0 @@
-0.0
----
-
-- Initial version
diff --git a/src/pyramid/scaffolds/alchemy/MANIFEST.in_tmpl b/src/pyramid/scaffolds/alchemy/MANIFEST.in_tmpl
deleted file mode 100644
index f93f45544..000000000
--- a/src/pyramid/scaffolds/alchemy/MANIFEST.in_tmpl
+++ /dev/null
@@ -1,2 +0,0 @@
-include *.txt *.ini *.cfg *.rst
-recursive-include {{package}} *.ico *.png *.css *.gif *.jpg *.jinja2 *.pt *.txt *.mak *.mako *.js *.html *.xml
diff --git a/src/pyramid/scaffolds/alchemy/README.txt_tmpl b/src/pyramid/scaffolds/alchemy/README.txt_tmpl
deleted file mode 100644
index 83c37edea..000000000
--- a/src/pyramid/scaffolds/alchemy/README.txt_tmpl
+++ /dev/null
@@ -1,14 +0,0 @@
-{{project}} README
-==================
-
-Getting Started
----------------
-
-- cd <directory containing this file>
-
-- $VENV/bin/pip install -e .
-
-- $VENV/bin/initialize_{{project}}_db development.ini
-
-- $VENV/bin/pserve development.ini
-
diff --git a/src/pyramid/scaffolds/alchemy/development.ini_tmpl b/src/pyramid/scaffolds/alchemy/development.ini_tmpl
deleted file mode 100644
index 3cfb3996d..000000000
--- a/src/pyramid/scaffolds/alchemy/development.ini_tmpl
+++ /dev/null
@@ -1,69 +0,0 @@
-###
-# app configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/environment.html
-###
-
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = true
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.default_locale_name = en
-pyramid.includes =
- pyramid_debugtoolbar
-
-sqlalchemy.url = sqlite:///%(here)s/{{project}}.sqlite
-
-# By default, the toolbar only appears for clients from IP addresses
-# '127.0.0.1' and '::1'.
-# debugtoolbar.hosts = 127.0.0.1 ::1
-
-###
-# wsgi server configuration
-###
-
-[server:main]
-use = egg:waitress#main
-listen = localhost:6543
-
-###
-# logging configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/logging.html
-###
-
-[loggers]
-keys = root, {{package_logger}}, sqlalchemy
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = INFO
-handlers = console
-
-[logger_{{package_logger}}]
-level = DEBUG
-handlers =
-qualname = {{package}}
-
-[logger_sqlalchemy]
-level = INFO
-handlers =
-qualname = sqlalchemy.engine
-# "level = INFO" logs SQL queries.
-# "level = DEBUG" logs SQL queries and results.
-# "level = WARN" logs neither. (Recommended for production systems.)
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
diff --git a/src/pyramid/scaffolds/alchemy/production.ini_tmpl b/src/pyramid/scaffolds/alchemy/production.ini_tmpl
deleted file mode 100644
index 043229a71..000000000
--- a/src/pyramid/scaffolds/alchemy/production.ini_tmpl
+++ /dev/null
@@ -1,59 +0,0 @@
-###
-# app configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/environment.html
-###
-
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = false
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.default_locale_name = en
-
-sqlalchemy.url = sqlite:///%(here)s/{{project}}.sqlite
-
-[server:main]
-use = egg:waitress#main
-listen = *:6543
-
-###
-# logging configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/logging.html
-###
-
-[loggers]
-keys = root, {{package_logger}}, sqlalchemy
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = WARN
-handlers = console
-
-[logger_{{package_logger}}]
-level = WARN
-handlers =
-qualname = {{package}}
-
-[logger_sqlalchemy]
-level = WARN
-handlers =
-qualname = sqlalchemy.engine
-# "level = INFO" logs SQL queries.
-# "level = DEBUG" logs SQL queries and results.
-# "level = WARN" logs neither. (Recommended for production systems.)
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
diff --git a/src/pyramid/scaffolds/alchemy/pytest.ini_tmpl b/src/pyramid/scaffolds/alchemy/pytest.ini_tmpl
deleted file mode 100644
index a30c8bcad..000000000
--- a/src/pyramid/scaffolds/alchemy/pytest.ini_tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-[pytest]
-testpaths = {{package}}
-python_files = *.py
diff --git a/src/pyramid/scaffolds/alchemy/setup.py_tmpl b/src/pyramid/scaffolds/alchemy/setup.py_tmpl
deleted file mode 100644
index 9318817dc..000000000
--- a/src/pyramid/scaffolds/alchemy/setup.py_tmpl
+++ /dev/null
@@ -1,55 +0,0 @@
-import os
-
-from setuptools import setup, find_packages
-
-here = os.path.abspath(os.path.dirname(__file__))
-with open(os.path.join(here, 'README.txt')) as f:
- README = f.read()
-with open(os.path.join(here, 'CHANGES.txt')) as f:
- CHANGES = f.read()
-
-requires = [
- 'pyramid',
- 'pyramid_jinja2',
- 'pyramid_debugtoolbar',
- 'pyramid_tm',
- 'SQLAlchemy',
- 'transaction',
- 'zope.sqlalchemy',
- 'waitress',
- ]
-
-tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest', # includes virtualenv
- 'pytest-cov',
- ]
-
-setup(name='{{project}}',
- version='0.0',
- description='{{project}}',
- long_description=README + '\n\n' + CHANGES,
- classifiers=[
- "Programming Language :: Python",
- "Framework :: Pyramid",
- "Topic :: Internet :: WWW/HTTP",
- "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
- ],
- author='',
- author_email='',
- url='',
- keywords='web wsgi bfg pylons pyramid',
- packages=find_packages(),
- include_package_data=True,
- zip_safe=False,
- extras_require={
- 'testing': tests_require,
- },
- install_requires=requires,
- entry_points="""\
- [paste.app_factory]
- main = {{package}}:main
- [console_scripts]
- initialize_{{project}}_db = {{package}}.scripts.initializedb:main
- """,
- )
diff --git a/src/pyramid/scaffolds/copydir.py b/src/pyramid/scaffolds/copydir.py
deleted file mode 100644
index 31e8dfb9e..000000000
--- a/src/pyramid/scaffolds/copydir.py
+++ /dev/null
@@ -1,372 +0,0 @@
-# (c) 2005 Ian Bicking and contributors; written for Paste
-# (http://pythonpaste.org) Licensed under the MIT license:
-# http://www.opensource.org/licenses/mit-license.php
-
-import os
-import sys
-import pkg_resources
-
-from pyramid.compat import (
- input_,
- native_,
- url_quote as compat_url_quote,
- escape,
-)
-
-fsenc = sys.getfilesystemencoding()
-
-
-class SkipTemplate(Exception):
- """
- Raised to indicate that the template should not be copied over.
- Raise this exception during the substitution of your template
- """
-
-
-def copy_dir(
- source,
- dest,
- vars,
- verbosity,
- simulate,
- indent=0,
- sub_vars=True,
- interactive=False,
- overwrite=True,
- template_renderer=None,
- out_=sys.stdout,
-):
- """
- Copies the ``source`` directory to the ``dest`` directory.
-
- ``vars``: A dictionary of variables to use in any substitutions.
-
- ``verbosity``: Higher numbers will show more about what is happening.
-
- ``simulate``: If true, then don't actually *do* anything.
-
- ``indent``: Indent any messages by this amount.
-
- ``sub_vars``: If true, variables in ``_tmpl`` files and ``+var+``
- in filenames will be substituted.
-
- ``overwrite``: If false, then don't every overwrite anything.
-
- ``interactive``: If you are overwriting a file and interactive is
- true, then ask before overwriting.
-
- ``template_renderer``: This is a function for rendering templates (if you
- don't want to use string.Template). It should have the signature
- ``template_renderer(content_as_string, vars_as_dict,
- filename=filename)``.
- """
-
- def out(msg):
- out_.write(msg)
- out_.write('\n')
- out_.flush()
-
- # This allows you to use a leading +dot+ in filenames which would
- # otherwise be skipped because leading dots make the file hidden:
- vars.setdefault('dot', '.')
- vars.setdefault('plus', '+')
- use_pkg_resources = isinstance(source, tuple)
- if use_pkg_resources:
- names = sorted(pkg_resources.resource_listdir(source[0], source[1]))
- else:
- names = sorted(os.listdir(source))
- pad = ' ' * (indent * 2)
- if not os.path.exists(dest):
- if verbosity >= 1:
- out('%sCreating %s/' % (pad, dest))
- if not simulate:
- makedirs(dest, verbosity=verbosity, pad=pad)
- elif verbosity >= 2:
- out('%sDirectory %s exists' % (pad, dest))
- for name in names:
- if use_pkg_resources:
- full = '/'.join([source[1], name])
- else:
- full = os.path.join(source, name)
- reason = should_skip_file(name)
- if reason:
- if verbosity >= 2:
- reason = pad + reason % {'filename': full}
- out(reason)
- continue # pragma: no cover
- if sub_vars:
- dest_full = os.path.join(dest, substitute_filename(name, vars))
- sub_file = False
- if dest_full.endswith('_tmpl'):
- dest_full = dest_full[:-5]
- sub_file = sub_vars
- if use_pkg_resources and pkg_resources.resource_isdir(source[0], full):
- if verbosity:
- out('%sRecursing into %s' % (pad, os.path.basename(full)))
- copy_dir(
- (source[0], full),
- dest_full,
- vars,
- verbosity,
- simulate,
- indent=indent + 1,
- sub_vars=sub_vars,
- interactive=interactive,
- overwrite=overwrite,
- template_renderer=template_renderer,
- out_=out_,
- )
- continue
- elif not use_pkg_resources and os.path.isdir(full):
- if verbosity:
- out('%sRecursing into %s' % (pad, os.path.basename(full)))
- copy_dir(
- full,
- dest_full,
- vars,
- verbosity,
- simulate,
- indent=indent + 1,
- sub_vars=sub_vars,
- interactive=interactive,
- overwrite=overwrite,
- template_renderer=template_renderer,
- out_=out_,
- )
- continue
- elif use_pkg_resources:
- content = pkg_resources.resource_string(source[0], full)
- else:
- with open(full, 'rb') as f:
- content = f.read()
- if sub_file:
- try:
- content = substitute_content(
- content,
- vars,
- filename=full,
- template_renderer=template_renderer,
- )
- except SkipTemplate:
- continue # pragma: no cover
- if content is None:
- continue # pragma: no cover
- already_exists = os.path.exists(dest_full)
- if already_exists:
- with open(dest_full, 'rb') as f:
- old_content = f.read()
- if old_content == content:
- if verbosity:
- out(
- '%s%s already exists (same content)' % (pad, dest_full)
- )
- continue # pragma: no cover
- if interactive:
- if not query_interactive(
- native_(full, fsenc),
- native_(dest_full, fsenc),
- native_(content, fsenc),
- native_(old_content, fsenc),
- simulate=simulate,
- out_=out_,
- ):
- continue
- elif not overwrite:
- continue # pragma: no cover
- if verbosity and use_pkg_resources:
- out('%sCopying %s to %s' % (pad, full, dest_full))
- elif verbosity:
- out(
- '%sCopying %s to %s' % (pad, os.path.basename(full), dest_full)
- )
- if not simulate:
- with open(dest_full, 'wb') as f:
- f.write(content)
-
-
-def should_skip_file(name):
- """
- Checks if a file should be skipped based on its name.
-
- If it should be skipped, returns the reason, otherwise returns
- None.
- """
- if name.startswith('.'):
- return 'Skipping hidden file %(filename)s'
- if name.endswith(('~', '.bak')):
- return 'Skipping backup file %(filename)s'
- if name.endswith(('.pyc', '.pyo')):
- return 'Skipping %s file ' % os.path.splitext(name)[1] + '%(filename)s'
- if name.endswith('$py.class'):
- return 'Skipping $py.class file %(filename)s'
- if name in ('CVS', '_darcs'):
- return 'Skipping version control directory %(filename)s'
- return None
-
-
-# Overridden on user's request:
-all_answer = None
-
-
-def query_interactive(
- src_fn, dest_fn, src_content, dest_content, simulate, out_=sys.stdout
-):
- def out(msg):
- out_.write(msg)
- out_.write('\n')
- out_.flush()
-
- global all_answer
- from difflib import unified_diff, context_diff
-
- u_diff = list(
- unified_diff(
- dest_content.splitlines(),
- src_content.splitlines(),
- dest_fn,
- src_fn,
- )
- )
- c_diff = list(
- context_diff(
- dest_content.splitlines(),
- src_content.splitlines(),
- dest_fn,
- src_fn,
- )
- )
- added = len(
- [l for l in u_diff if l.startswith('+') and not l.startswith('+++')]
- )
- removed = len(
- [l for l in u_diff if l.startswith('-') and not l.startswith('---')]
- )
- if added > removed:
- msg = '; %i lines added' % (added - removed)
- elif removed > added:
- msg = '; %i lines removed' % (removed - added)
- else:
- msg = ''
- out(
- 'Replace %i bytes with %i bytes (%i/%i lines changed%s)'
- % (
- len(dest_content),
- len(src_content),
- removed,
- len(dest_content.splitlines()),
- msg,
- )
- )
- prompt = 'Overwrite %s [y/n/d/B/?] ' % dest_fn
- while 1:
- if all_answer is None:
- response = input_(prompt).strip().lower()
- else:
- response = all_answer
- if not response or response[0] == 'b':
- import shutil
-
- new_dest_fn = dest_fn + '.bak'
- n = 0
- while os.path.exists(new_dest_fn):
- n += 1
- new_dest_fn = dest_fn + '.bak' + str(n)
- out('Backing up %s to %s' % (dest_fn, new_dest_fn))
- if not simulate:
- shutil.copyfile(dest_fn, new_dest_fn)
- return True
- elif response.startswith('all '):
- rest = response[4:].strip()
- if not rest or rest[0] not in ('y', 'n', 'b'):
- out(query_usage)
- continue
- response = all_answer = rest[0]
- if response[0] == 'y':
- return True
- elif response[0] == 'n':
- return False
- elif response == 'dc':
- out('\n'.join(c_diff))
- elif response[0] == 'd':
- out('\n'.join(u_diff))
- else:
- out(query_usage)
-
-
-query_usage = """\
-Responses:
- Y(es): Overwrite the file with the new content.
- N(o): Do not overwrite the file.
- D(iff): Show a unified diff of the proposed changes (dc=context diff)
- B(ackup): Save the current file contents to a .bak file
- (and overwrite)
- Type "all Y/N/B" to use Y/N/B for answer to all future questions
-"""
-
-
-def makedirs(dir, verbosity, pad):
- parent = os.path.dirname(os.path.abspath(dir))
- if not os.path.exists(parent):
- makedirs(parent, verbosity, pad) # pragma: no cover
- os.mkdir(dir)
-
-
-def substitute_filename(fn, vars):
- for var, value in vars.items():
- fn = fn.replace('+%s+' % var, str(value))
- return fn
-
-
-def substitute_content(
- content, vars, filename='<string>', template_renderer=None
-):
- v = standard_vars.copy()
- v.update(vars)
- return template_renderer(content, v, filename=filename)
-
-
-def html_quote(s):
- if s is None:
- return ''
- return escape(str(s), 1)
-
-
-def url_quote(s):
- if s is None:
- return ''
- return compat_url_quote(str(s))
-
-
-def test(conf, true_cond, false_cond=None):
- if conf:
- return true_cond
- else:
- return false_cond
-
-
-def skip_template(condition=True, *args):
- """
- Raise SkipTemplate, which causes copydir to skip the template
- being processed. If you pass in a condition, only raise if that
- condition is true (allows you to use this with string.Template)
-
- If you pass any additional arguments, they will be used to
- instantiate SkipTemplate (generally use like
- ``skip_template(license=='GPL', 'Skipping file; not using GPL')``)
- """
- if condition:
- raise SkipTemplate(*args)
-
-
-standard_vars = {
- 'nothing': None,
- 'html_quote': html_quote,
- 'url_quote': url_quote,
- 'empty': '""',
- 'test': test,
- 'repr': repr,
- 'str': str,
- 'bool': bool,
- 'SkipTemplate': SkipTemplate,
- 'skip_template': skip_template,
-}
diff --git a/src/pyramid/scaffolds/starter/+dot+coveragerc_tmpl b/src/pyramid/scaffolds/starter/+dot+coveragerc_tmpl
deleted file mode 100644
index 273a4a580..000000000
--- a/src/pyramid/scaffolds/starter/+dot+coveragerc_tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-[run]
-source = {{package}}
-omit = {{package}}/test*
diff --git a/src/pyramid/scaffolds/starter/+package+/__init__.py b/src/pyramid/scaffolds/starter/+package+/__init__.py
deleted file mode 100644
index 49dde36d4..000000000
--- a/src/pyramid/scaffolds/starter/+package+/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from pyramid.config import Configurator
-
-
-def main(global_config, **settings):
- """ This function returns a Pyramid WSGI application.
- """
- config = Configurator(settings=settings)
- config.include('pyramid_jinja2')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.add_route('home', '/')
- config.scan()
- return config.make_wsgi_app()
diff --git a/src/pyramid/scaffolds/starter/+package+/static/pyramid-16x16.png b/src/pyramid/scaffolds/starter/+package+/static/pyramid-16x16.png
deleted file mode 100644
index 979203112..000000000
--- a/src/pyramid/scaffolds/starter/+package+/static/pyramid-16x16.png
+++ /dev/null
Binary files differ
diff --git a/src/pyramid/scaffolds/starter/+package+/static/pyramid.png b/src/pyramid/scaffolds/starter/+package+/static/pyramid.png
deleted file mode 100644
index 4ab837be9..000000000
--- a/src/pyramid/scaffolds/starter/+package+/static/pyramid.png
+++ /dev/null
Binary files differ
diff --git a/src/pyramid/scaffolds/starter/+package+/static/theme.css b/src/pyramid/scaffolds/starter/+package+/static/theme.css
deleted file mode 100644
index be50ad420..000000000
--- a/src/pyramid/scaffolds/starter/+package+/static/theme.css
+++ /dev/null
@@ -1,152 +0,0 @@
-@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);
-body {
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-weight: 300;
- color: #ffffff;
- background: #bc2131;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-weight: 300;
-}
-p {
- font-weight: 300;
-}
-.font-normal {
- font-weight: 400;
-}
-.font-semi-bold {
- font-weight: 600;
-}
-.font-bold {
- font-weight: 700;
-}
-.starter-template {
- margin-top: 250px;
-}
-.starter-template .content {
- margin-left: 10px;
-}
-.starter-template .content h1 {
- margin-top: 10px;
- font-size: 60px;
-}
-.starter-template .content h1 .smaller {
- font-size: 40px;
- color: #f2b7bd;
-}
-.starter-template .content .lead {
- font-size: 25px;
- color: #f2b7bd;
-}
-.starter-template .content .lead .font-normal {
- color: #ffffff;
-}
-.starter-template .links {
- float: right;
- right: 0;
- margin-top: 125px;
-}
-.starter-template .links ul {
- display: block;
- padding: 0;
- margin: 0;
-}
-.starter-template .links ul li {
- list-style: none;
- display: inline;
- margin: 0 10px;
-}
-.starter-template .links ul li:first-child {
- margin-left: 0;
-}
-.starter-template .links ul li:last-child {
- margin-right: 0;
-}
-.starter-template .links ul li.current-version {
- color: #f2b7bd;
- font-weight: 400;
-}
-.starter-template .links ul li a {
- color: #ffffff;
-}
-.starter-template .links ul li a:hover {
- text-decoration: underline;
-}
-.starter-template .links ul li .icon-muted {
- color: #eb8b95;
- margin-right: 5px;
-}
-.starter-template .links ul li:hover .icon-muted {
- color: #ffffff;
-}
-.starter-template .copyright {
- margin-top: 10px;
- font-size: 0.9em;
- color: #f2b7bd;
- text-transform: lowercase;
- float: right;
- right: 0;
-}
-@media (max-width: 1199px) {
- .starter-template .content h1 {
- font-size: 45px;
- }
- .starter-template .content h1 .smaller {
- font-size: 30px;
- }
- .starter-template .content .lead {
- font-size: 20px;
- }
-}
-@media (max-width: 991px) {
- .starter-template {
- margin-top: 0;
- }
- .starter-template .logo {
- margin: 40px auto;
- }
- .starter-template .content {
- margin-left: 0;
- text-align: center;
- }
- .starter-template .content h1 {
- margin-bottom: 20px;
- }
- .starter-template .links {
- float: none;
- text-align: center;
- margin-top: 60px;
- }
- .starter-template .copyright {
- float: none;
- text-align: center;
- }
-}
-@media (max-width: 767px) {
- .starter-template .content h1 .smaller {
- font-size: 25px;
- display: block;
- }
- .starter-template .content .lead {
- font-size: 16px;
- }
- .starter-template .links {
- margin-top: 40px;
- }
- .starter-template .links ul li {
- display: block;
- margin: 0;
- }
- .starter-template .links ul li .icon-muted {
- display: none;
- }
- .starter-template .copyright {
- margin-top: 20px;
- }
-}
diff --git a/src/pyramid/scaffolds/starter/+package+/templates/layout.jinja2_tmpl b/src/pyramid/scaffolds/starter/+package+/templates/layout.jinja2_tmpl
deleted file mode 100644
index 54baf7a2a..000000000
--- a/src/pyramid/scaffolds/starter/+package+/templates/layout.jinja2_tmpl
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html lang="\{\{request.locale_name\}\}">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="pyramid web application">
- <meta name="author" content="Pylons Project">
- <link rel="shortcut icon" href="\{\{request.static_url('{{package}}:static/pyramid-16x16.png')\}\}">
-
- <title>Starter Scaffold for The Pyramid Web Framework</title>
-
- <!-- Bootstrap core CSS -->
- <link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
-
- <!-- Custom styles for this scaffold -->
- <link href="\{\{request.static_url('{{package}}:static/theme.css')\}\}" rel="stylesheet">
-
- <!-- HTML5 shiv and Respond.js IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" integrity="sha384-0s5Pv64cNZJieYFkXYOTId2HMA2Lfb6q2nAcx2n0RTLUnCAoTTsS0nKEO27XyKcY" crossorigin="anonymous"></script>
- <script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js" integrity="sha384-f1r2UzjsxZ9T4V1f2zBO/evUqSEOpeaUUZcMTz1Up63bl4ruYnFYeM+BxI4NhyI0" crossorigin="anonymous"></script>
- <![endif]-->
- </head>
-
- <body>
-
- <div class="starter-template">
- <div class="container">
- <div class="row">
- <div class="col-md-2">
- <img class="logo img-responsive" src="\{\{request.static_url('{{package}}:static/pyramid.png')\}\}" alt="pyramid web framework">
- </div>
- <div class="col-md-10">
- {% block content %}
- <p>No content</p>
- {% endblock content %}
- </div>
- </div>
- <div class="row">
- <div class="links">
- <ul>
- <li class="current-version">Generated by v{{pyramid_version}}</li>
- <li><i class="glyphicon glyphicon-bookmark icon-muted"></i><a href="https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/">Docs</a></li>
- <li><i class="glyphicon glyphicon-cog icon-muted"></i><a href="https://github.com/Pylons/pyramid">Github Project</a></li>
- <li><i class="glyphicon glyphicon-globe icon-muted"></i><a href="https://webchat.freenode.net/?channels=pyramid">IRC Channel</a></li>
- <li><i class="glyphicon glyphicon-home icon-muted"></i><a href="https://pylonsproject.org">Pylons Project</a></li>
- </ul>
- </div>
- </div>
- <div class="row">
- <div class="copyright">
- Copyright &copy; Pylons Project
- </div>
- </div>
- </div>
- </div>
-
-
- <!-- Bootstrap core JavaScript
- ================================================== -->
- <!-- Placed at the end of the document so the pages load faster -->
- <script src="//oss.maxcdn.com/libs/jquery/1.10.2/jquery.min.js" integrity="sha384-aBL3Lzi6c9LNDGvpHkZrrm3ZVsIwohDD7CDozL0pk8FwCrfmV7H9w8j3L7ikEv6h" crossorigin="anonymous"></script>
- <script src="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js" integrity="sha384-s1ITto93iSMDxlp/79qhWHi+LsIi9Gx6yL+cOKDuymvihkfol83TYbLbOw+W/wv4" crossorigin="anonymous"></script>
- </body>
-</html>
diff --git a/src/pyramid/scaffolds/starter/+package+/templates/mytemplate.jinja2_tmpl b/src/pyramid/scaffolds/starter/+package+/templates/mytemplate.jinja2_tmpl
deleted file mode 100644
index f826ff9e7..000000000
--- a/src/pyramid/scaffolds/starter/+package+/templates/mytemplate.jinja2_tmpl
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "layout.jinja2" %}
-
-{% block content%}
-<div class="content">
- <h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">Starter scaffold</span></h1>
- <p class="lead">Welcome to <span class="font-normal">\{\{project\}\}</span>, an&nbsp;application generated&nbsp;by<br>the <span class="font-normal">Pyramid Web Framework {{pyramid_version}}</span>.</p>
-</div>
-{% endblock content %}
diff --git a/src/pyramid/scaffolds/starter/+package+/tests.py_tmpl b/src/pyramid/scaffolds/starter/+package+/tests.py_tmpl
deleted file mode 100644
index 30f3f0430..000000000
--- a/src/pyramid/scaffolds/starter/+package+/tests.py_tmpl
+++ /dev/null
@@ -1,29 +0,0 @@
-import unittest
-
-from pyramid import testing
-
-
-class ViewTests(unittest.TestCase):
- def setUp(self):
- self.config = testing.setUp()
-
- def tearDown(self):
- testing.tearDown()
-
- def test_my_view(self):
- from .views import my_view
- request = testing.DummyRequest()
- info = my_view(request)
- self.assertEqual(info['project'], '{{project}}')
-
-
-class FunctionalTests(unittest.TestCase):
- def setUp(self):
- from {{package}} import main
- app = main({})
- from webtest import TestApp
- self.testapp = TestApp(app)
-
- def test_root(self):
- res = self.testapp.get('/', status=200)
- self.assertTrue(b'Pyramid' in res.body)
diff --git a/src/pyramid/scaffolds/starter/+package+/views.py_tmpl b/src/pyramid/scaffolds/starter/+package+/views.py_tmpl
deleted file mode 100644
index 01b9d0130..000000000
--- a/src/pyramid/scaffolds/starter/+package+/views.py_tmpl
+++ /dev/null
@@ -1,6 +0,0 @@
-from pyramid.view import view_config
-
-
-@view_config(route_name='home', renderer='templates/mytemplate.jinja2')
-def my_view(request):
- return {'project': '{{project}}'}
diff --git a/src/pyramid/scaffolds/starter/CHANGES.txt_tmpl b/src/pyramid/scaffolds/starter/CHANGES.txt_tmpl
deleted file mode 100644
index 35a34f332..000000000
--- a/src/pyramid/scaffolds/starter/CHANGES.txt_tmpl
+++ /dev/null
@@ -1,4 +0,0 @@
-0.0
----
-
-- Initial version
diff --git a/src/pyramid/scaffolds/starter/MANIFEST.in_tmpl b/src/pyramid/scaffolds/starter/MANIFEST.in_tmpl
deleted file mode 100644
index 4d1c86b44..000000000
--- a/src/pyramid/scaffolds/starter/MANIFEST.in_tmpl
+++ /dev/null
@@ -1,2 +0,0 @@
-include *.txt *.ini *.cfg *.rst
-recursive-include {{package}} *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml *.jinja2
diff --git a/src/pyramid/scaffolds/starter/README.txt_tmpl b/src/pyramid/scaffolds/starter/README.txt_tmpl
deleted file mode 100644
index 127ad7595..000000000
--- a/src/pyramid/scaffolds/starter/README.txt_tmpl
+++ /dev/null
@@ -1,12 +0,0 @@
-{{project}} README
-==================
-
-Getting Started
----------------
-
-- cd <directory containing this file>
-
-- $VENV/bin/pip install -e .
-
-- $VENV/bin/pserve development.ini
-
diff --git a/src/pyramid/scaffolds/starter/development.ini_tmpl b/src/pyramid/scaffolds/starter/development.ini_tmpl
deleted file mode 100644
index c6e42d97c..000000000
--- a/src/pyramid/scaffolds/starter/development.ini_tmpl
+++ /dev/null
@@ -1,59 +0,0 @@
-###
-# app configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/environment.html
-###
-
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = true
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.default_locale_name = en
-pyramid.includes =
- pyramid_debugtoolbar
-
-# By default, the toolbar only appears for clients from IP addresses
-# '127.0.0.1' and '::1'.
-# debugtoolbar.hosts = 127.0.0.1 ::1
-
-###
-# wsgi server configuration
-###
-
-[server:main]
-use = egg:waitress#main
-listen = localhost:6543
-
-###
-# logging configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/logging.html
-###
-
-[loggers]
-keys = root, {{package_logger}}
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = INFO
-handlers = console
-
-[logger_{{package_logger}}]
-level = DEBUG
-handlers =
-qualname = {{package}}
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
diff --git a/src/pyramid/scaffolds/starter/production.ini_tmpl b/src/pyramid/scaffolds/starter/production.ini_tmpl
deleted file mode 100644
index 1107a6b2f..000000000
--- a/src/pyramid/scaffolds/starter/production.ini_tmpl
+++ /dev/null
@@ -1,53 +0,0 @@
-###
-# app configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/environment.html
-###
-
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = false
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.default_locale_name = en
-
-###
-# wsgi server configuration
-###
-
-[server:main]
-use = egg:waitress#main
-listen = *:6543
-
-###
-# logging configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/logging.html
-###
-
-[loggers]
-keys = root, {{package_logger}}
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = WARN
-handlers = console
-
-[logger_{{package_logger}}]
-level = WARN
-handlers =
-qualname = {{package}}
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
diff --git a/src/pyramid/scaffolds/starter/pytest.ini_tmpl b/src/pyramid/scaffolds/starter/pytest.ini_tmpl
deleted file mode 100644
index a30c8bcad..000000000
--- a/src/pyramid/scaffolds/starter/pytest.ini_tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-[pytest]
-testpaths = {{package}}
-python_files = *.py
diff --git a/src/pyramid/scaffolds/starter/setup.py_tmpl b/src/pyramid/scaffolds/starter/setup.py_tmpl
deleted file mode 100644
index 7f50bbbc2..000000000
--- a/src/pyramid/scaffolds/starter/setup.py_tmpl
+++ /dev/null
@@ -1,49 +0,0 @@
-import os
-
-from setuptools import setup, find_packages
-
-here = os.path.abspath(os.path.dirname(__file__))
-with open(os.path.join(here, 'README.txt')) as f:
- README = f.read()
-with open(os.path.join(here, 'CHANGES.txt')) as f:
- CHANGES = f.read()
-
-requires = [
- 'pyramid',
- 'pyramid_jinja2',
- 'pyramid_debugtoolbar',
- 'waitress',
- ]
-
-tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest', # includes virtualenv
- 'pytest-cov',
- ]
-
-setup(name='{{project}}',
- version='0.0',
- description='{{project}}',
- long_description=README + '\n\n' + CHANGES,
- classifiers=[
- "Programming Language :: Python",
- "Framework :: Pyramid",
- "Topic :: Internet :: WWW/HTTP",
- "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
- ],
- author='',
- author_email='',
- url='',
- keywords='web pyramid pylons',
- packages=find_packages(),
- include_package_data=True,
- zip_safe=False,
- extras_require={
- 'testing': tests_require,
- },
- install_requires=requires,
- entry_points="""\
- [paste.app_factory]
- main = {{package}}:main
- """,
- )
diff --git a/src/pyramid/scaffolds/template.py b/src/pyramid/scaffolds/template.py
deleted file mode 100644
index 60b543842..000000000
--- a/src/pyramid/scaffolds/template.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# (c) 2005 Ian Bicking and contributors; written for Paste
-# (http://pythonpaste.org) Licensed under the MIT license:
-# http://www.opensource.org/licenses/mit-license.php
-
-import re
-import sys
-import os
-
-from pyramid.compat import native_, bytes_
-
-from pyramid.scaffolds import copydir
-
-fsenc = sys.getfilesystemencoding()
-
-
-class Template(object):
- """ Inherit from this base class and override methods to use the Pyramid
- scaffolding system."""
-
- copydir = copydir # for testing
- _template_dir = None
-
- def __init__(self, name):
- self.name = name
-
- def render_template(self, content, vars, filename=None):
- """ Return a bytestring representing a templated file based on the
- input (content) and the variable names defined (vars). ``filename``
- is used for exception reporting."""
- # this method must not be named "template_renderer" fbo of extension
- # scaffolds that need to work under pyramid 1.2 and 1.3, and which
- # need to do "template_renderer =
- # staticmethod(paste_script_template_renderer)"
- content = native_(content, fsenc)
- try:
- return bytes_(
- substitute_escaped_double_braces(
- substitute_double_braces(content, TypeMapper(vars))
- ),
- fsenc,
- )
- except Exception as e:
- _add_except(e, ' in file %s' % filename)
- raise
-
- def module_dir(self):
- mod = sys.modules[self.__class__.__module__]
- return os.path.dirname(mod.__file__)
-
- def template_dir(self):
- """ Return the template directory of the scaffold. By default, it
- returns the value of ``os.path.join(self.module_dir(),
- self._template_dir)`` (``self.module_dir()`` returns the module in
- which your subclass has been defined). If ``self._template_dir`` is
- a tuple this method just returns the value instead of trying to
- construct a path. If _template_dir is a tuple, it should be a
- 2-element tuple: ``(package_name, package_relative_path)``."""
- assert self._template_dir is not None, (
- "Template %r didn't set _template_dir" % self
- )
- if isinstance(self._template_dir, tuple):
- return self._template_dir
- else:
- return os.path.join(self.module_dir(), self._template_dir)
-
- def run(self, command, output_dir, vars):
- self.pre(command, output_dir, vars)
- self.write_files(command, output_dir, vars)
- self.post(command, output_dir, vars)
-
- def pre(self, command, output_dir, vars): # pragma: no cover
- """
- Called before template is applied.
- """
- pass
-
- def post(self, command, output_dir, vars): # pragma: no cover
- """
- Called after template is applied.
- """
- pass
-
- def write_files(self, command, output_dir, vars):
- template_dir = self.template_dir()
- if not self.exists(output_dir):
- self.out("Creating directory %s" % output_dir)
- if not command.args.simulate:
- # Don't let copydir create this top-level directory,
- # since copydir will svn add it sometimes:
- self.makedirs(output_dir)
- self.copydir.copy_dir(
- template_dir,
- output_dir,
- vars,
- verbosity=command.verbosity,
- simulate=command.args.simulate,
- interactive=command.args.interactive,
- overwrite=command.args.overwrite,
- indent=1,
- template_renderer=self.render_template,
- )
-
- def makedirs(self, dir): # pragma: no cover
- return os.makedirs(dir)
-
- def exists(self, path): # pragma: no cover
- return os.path.exists(path)
-
- def out(self, msg): # pragma: no cover
- print(msg)
-
- # hair for exit with usage when paster create is used under 1.3 instead
- # of pcreate for extension scaffolds which need to support multiple
- # versions of pyramid; the check_vars method is called by pastescript
- # only as the result of "paster create"; pyramid doesn't use it. the
- # required_templates tuple is required to allow it to get as far as
- # calling check_vars.
- required_templates = ()
-
- def check_vars(self, vars, other):
- raise RuntimeError(
- 'Under Pyramid 1.3, you should use the "pcreate" command rather '
- 'than "paster create"'
- )
-
-
-class TypeMapper(dict):
- def __getitem__(self, item):
- options = item.split('|')
- for op in options[:-1]:
- try:
- value = eval_with_catch(op, dict(self.items()))
- break
- except (NameError, KeyError):
- pass
- else:
- value = eval(options[-1], dict(self.items()))
- if value is None:
- return ''
- else:
- return str(value)
-
-
-def eval_with_catch(expr, vars):
- try:
- return eval(expr, vars)
- except Exception as e:
- _add_except(e, 'in expression %r' % expr)
- raise
-
-
-double_brace_pattern = re.compile(r'{{(?P<braced>.*?)}}')
-
-
-def substitute_double_braces(content, values):
- def double_bracerepl(match):
- value = match.group('braced').strip()
- return values[value]
-
- return double_brace_pattern.sub(double_bracerepl, content)
-
-
-escaped_double_brace_pattern = re.compile(
- r'\\{\\{(?P<escape_braced>[^\\]*?)\\}\\}'
-)
-
-
-def substitute_escaped_double_braces(content):
- def escaped_double_bracerepl(match):
- value = match.group('escape_braced').strip()
- return "{{%(value)s}}" % locals()
-
- return escaped_double_brace_pattern.sub(escaped_double_bracerepl, content)
-
-
-def _add_except(exc, info): # pragma: no cover
- if not hasattr(exc, 'args') or exc.args is None:
- return
- args = list(exc.args)
- if args:
- args[0] += ' ' + info
- else:
- args = [info]
- exc.args = tuple(args)
- return
diff --git a/src/pyramid/scaffolds/tests.py b/src/pyramid/scaffolds/tests.py
deleted file mode 100644
index 8ed2f2348..000000000
--- a/src/pyramid/scaffolds/tests.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import sys
-import os
-import shutil
-import subprocess
-import tempfile
-import time
-
-try:
- import http.client as httplib
-except ImportError:
- import httplib
-
-
-class TemplateTest(object):
- def make_venv(self, directory): # pragma: no cover
- import virtualenv
- from virtualenv import Logger
-
- logger = Logger([(Logger.level_for_integer(2), sys.stdout)])
- virtualenv.logger = logger
- virtualenv.create_environment(
- directory, site_packages=False, clear=False
- )
-
- def install(self, tmpl_name): # pragma: no cover
- try:
- self.old_cwd = os.getcwd()
- self.directory = tempfile.mkdtemp()
- self.make_venv(self.directory)
- here = os.path.abspath(os.path.dirname(__file__))
- os.chdir(os.path.dirname(os.path.dirname(os.path.dirname(here))))
- pip = os.path.join(self.directory, 'bin', 'pip')
- subprocess.check_call([pip, 'install', '-e', '.'])
- os.chdir(self.directory)
- subprocess.check_call(['bin/pcreate', '-s', tmpl_name, 'Dingle'])
- os.chdir('Dingle')
- subprocess.check_call([pip, 'install', '.[testing]'])
- if tmpl_name == 'alchemy':
- populate = os.path.join(
- self.directory, 'bin', 'initialize_Dingle_db'
- )
- subprocess.check_call([populate, 'development.ini'])
- subprocess.check_call(
- [os.path.join(self.directory, 'bin', 'py.test')]
- )
- pserve = os.path.join(self.directory, 'bin', 'pserve')
- for ininame, hastoolbar in (
- ('development.ini', True),
- ('production.ini', False),
- ):
- proc = subprocess.Popen([pserve, ininame])
- try:
- time.sleep(5)
- proc.poll()
- if proc.returncode is not None:
- raise RuntimeError('%s didnt start' % ininame)
- conn = httplib.HTTPConnection('localhost:6543')
- conn.request('GET', '/')
- resp = conn.getresponse()
- assert resp.status == 200, ininame
- data = resp.read()
- toolbarchunk = b'<div id="pDebug"'
- if hastoolbar:
- assert toolbarchunk in data, ininame
- else:
- assert toolbarchunk not in data, ininame
- finally:
- proc.terminate()
- finally:
- shutil.rmtree(self.directory)
- os.chdir(self.old_cwd)
-
-
-if __name__ == '__main__': # pragma: no cover
- templates = ['starter', 'alchemy', 'zodb']
-
- for name in templates:
- test = TemplateTest()
- test.install(name)
diff --git a/src/pyramid/scaffolds/zodb/+dot+coveragerc_tmpl b/src/pyramid/scaffolds/zodb/+dot+coveragerc_tmpl
deleted file mode 100644
index 273a4a580..000000000
--- a/src/pyramid/scaffolds/zodb/+dot+coveragerc_tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-[run]
-source = {{package}}
-omit = {{package}}/test*
diff --git a/src/pyramid/scaffolds/zodb/+package+/__init__.py b/src/pyramid/scaffolds/zodb/+package+/__init__.py
deleted file mode 100644
index a956d0faf..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from pyramid.config import Configurator
-from pyramid_zodbconn import get_connection
-from .models import appmaker
-
-
-def root_factory(request):
- conn = get_connection(request)
- return appmaker(conn.root())
-
-
-def main(global_config, **settings):
- """ This function returns a Pyramid WSGI application.
- """
- config = Configurator(root_factory=root_factory, settings=settings)
- settings = config.get_settings()
- settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
- config.include('pyramid_chameleon')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.scan()
- return config.make_wsgi_app()
diff --git a/src/pyramid/scaffolds/zodb/+package+/models.py b/src/pyramid/scaffolds/zodb/+package+/models.py
deleted file mode 100644
index e5aa3e9f7..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/models.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from persistent.mapping import PersistentMapping
-
-
-class MyModel(PersistentMapping):
- __parent__ = __name__ = None
-
-
-def appmaker(zodb_root):
- if 'app_root' not in zodb_root:
- app_root = MyModel()
- zodb_root['app_root'] = app_root
- import transaction
- transaction.commit()
- return zodb_root['app_root']
diff --git a/src/pyramid/scaffolds/zodb/+package+/static/pyramid-16x16.png b/src/pyramid/scaffolds/zodb/+package+/static/pyramid-16x16.png
deleted file mode 100644
index 979203112..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/static/pyramid-16x16.png
+++ /dev/null
Binary files differ
diff --git a/src/pyramid/scaffolds/zodb/+package+/static/pyramid.png b/src/pyramid/scaffolds/zodb/+package+/static/pyramid.png
deleted file mode 100644
index 4ab837be9..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/static/pyramid.png
+++ /dev/null
Binary files differ
diff --git a/src/pyramid/scaffolds/zodb/+package+/static/theme.css b/src/pyramid/scaffolds/zodb/+package+/static/theme.css
deleted file mode 100644
index 0f4b1a4d4..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/static/theme.css
+++ /dev/null
@@ -1,154 +0,0 @@
-@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);
-body {
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-weight: 300;
- color: #ffffff;
- background: #bc2131;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-weight: 300;
-}
-p {
- font-weight: 300;
-}
-.font-normal {
- font-weight: 400;
-}
-.font-semi-bold {
- font-weight: 600;
-}
-.font-bold {
- font-weight: 700;
-}
-.starter-template {
- margin-top: 250px;
-}
-.starter-template .content {
- margin-left: 10px;
-}
-.starter-template .content h1 {
- margin-top: 10px;
- font-size: 60px;
-}
-.starter-template .content h1 .smaller {
- font-size: 40px;
- color: #f2b7bd;
-}
-.starter-template .content .lead {
- font-size: 25px;
- color: #f2b7bd;
-}
-.starter-template .content .lead .font-normal {
- color: #ffffff;
-}
-.starter-template .links {
- float: right;
- right: 0;
- margin-top: 125px;
-}
-.starter-template .links ul {
- display: block;
- padding: 0;
- margin: 0;
-}
-.starter-template .links ul li {
- list-style: none;
- display: inline;
- margin: 0 10px;
-}
-.starter-template .links ul li:first-child {
- margin-left: 0;
-}
-.starter-template .links ul li:last-child {
- margin-right: 0;
-}
-.starter-template .links ul li.current-version {
- color: #f2b7bd;
- font-weight: 400;
-}
-.starter-template .links ul li a, a {
- color: #f2b7bd;
- text-decoration: underline;
-}
-.starter-template .links ul li a:hover, a:hover {
- color: #ffffff;
- text-decoration: underline;
-}
-.starter-template .links ul li .icon-muted {
- color: #eb8b95;
- margin-right: 5px;
-}
-.starter-template .links ul li:hover .icon-muted {
- color: #ffffff;
-}
-.starter-template .copyright {
- margin-top: 10px;
- font-size: 0.9em;
- color: #f2b7bd;
- text-transform: lowercase;
- float: right;
- right: 0;
-}
-@media (max-width: 1199px) {
- .starter-template .content h1 {
- font-size: 45px;
- }
- .starter-template .content h1 .smaller {
- font-size: 30px;
- }
- .starter-template .content .lead {
- font-size: 20px;
- }
-}
-@media (max-width: 991px) {
- .starter-template {
- margin-top: 0;
- }
- .starter-template .logo {
- margin: 40px auto;
- }
- .starter-template .content {
- margin-left: 0;
- text-align: center;
- }
- .starter-template .content h1 {
- margin-bottom: 20px;
- }
- .starter-template .links {
- float: none;
- text-align: center;
- margin-top: 60px;
- }
- .starter-template .copyright {
- float: none;
- text-align: center;
- }
-}
-@media (max-width: 767px) {
- .starter-template .content h1 .smaller {
- font-size: 25px;
- display: block;
- }
- .starter-template .content .lead {
- font-size: 16px;
- }
- .starter-template .links {
- margin-top: 40px;
- }
- .starter-template .links ul li {
- display: block;
- margin: 0;
- }
- .starter-template .links ul li .icon-muted {
- display: none;
- }
- .starter-template .copyright {
- margin-top: 20px;
- }
-}
diff --git a/src/pyramid/scaffolds/zodb/+package+/templates/mytemplate.pt_tmpl b/src/pyramid/scaffolds/zodb/+package+/templates/mytemplate.pt_tmpl
deleted file mode 100644
index f66effa41..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/templates/mytemplate.pt_tmpl
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE html>
-<html lang="${request.locale_name}">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="pyramid web application">
- <meta name="author" content="Pylons Project">
- <link rel="shortcut icon" href="${request.static_url('{{package}}:static/pyramid-16x16.png')}">
-
- <title>ZODB Scaffold for The Pyramid Web Framework</title>
-
- <!-- Bootstrap core CSS -->
- <link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
-
- <!-- Custom styles for this scaffold -->
- <link href="${request.static_url('{{package}}:static/theme.css')}" rel="stylesheet">
-
- <!-- HTML5 shiv and Respond.js IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" integrity="sha384-0s5Pv64cNZJieYFkXYOTId2HMA2Lfb6q2nAcx2n0RTLUnCAoTTsS0nKEO27XyKcY" crossorigin="anonymous"></script>
- <script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js" integrity="sha384-f1r2UzjsxZ9T4V1f2zBO/evUqSEOpeaUUZcMTz1Up63bl4ruYnFYeM+BxI4NhyI0" crossorigin="anonymous"></script>
- <![endif]-->
- </head>
-
- <body>
-
- <div class="starter-template">
- <div class="container">
- <div class="row">
- <div class="col-md-2">
- <img class="logo img-responsive" src="${request.static_url('{{package}}:static/pyramid.png')}" alt="pyramid web framework">
- </div>
- <div class="col-md-10">
- <div class="content">
- <h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">ZODB scaffold</span></h1>
- <p class="lead">Welcome to <span class="font-normal">${project}</span>, an&nbsp;application generated&nbsp;by<br>the <span class="font-normal">Pyramid Web Framework {{pyramid_version}}</span>.</p>
- </div>
- </div>
- </div>
- <div class="row">
- <div class="links">
- <ul>
- <li class="current-version">Generated by v{{pyramid_version}}</li>
- <li><i class="glyphicon glyphicon-bookmark icon-muted"></i><a href="https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/">Docs</a></li>
- <li><i class="glyphicon glyphicon-cog icon-muted"></i><a href="https://github.com/Pylons/pyramid">Github Project</a></li>
- <li><i class="glyphicon glyphicon-globe icon-muted"></i><a href="https://webchat.freenode.net/?channels=pyramid">IRC Channel</a></li>
- <li><i class="glyphicon glyphicon-home icon-muted"></i><a href="https://pylonsproject.org">Pylons Project</a></li>
- </ul>
- </div>
- </div>
- <div class="row">
- <div class="copyright">
- Copyright &copy; Pylons Project
- </div>
- </div>
- </div>
- </div>
-
-
- <!-- Bootstrap core JavaScript
- ================================================== -->
- <!-- Placed at the end of the document so the pages load faster -->
- <script src="//oss.maxcdn.com/libs/jquery/1.10.2/jquery.min.js" integrity="sha384-aBL3Lzi6c9LNDGvpHkZrrm3ZVsIwohDD7CDozL0pk8FwCrfmV7H9w8j3L7ikEv6h" crossorigin="anonymous"></script>
- <script src="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js" integrity="sha384-s1ITto93iSMDxlp/79qhWHi+LsIi9Gx6yL+cOKDuymvihkfol83TYbLbOw+W/wv4" crossorigin="anonymous"></script>
- </body>
-</html>
diff --git a/src/pyramid/scaffolds/zodb/+package+/tests.py_tmpl b/src/pyramid/scaffolds/zodb/+package+/tests.py_tmpl
deleted file mode 100644
index 94912a850..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/tests.py_tmpl
+++ /dev/null
@@ -1,17 +0,0 @@
-import unittest
-
-from pyramid import testing
-
-
-class ViewTests(unittest.TestCase):
- def setUp(self):
- self.config = testing.setUp()
-
- def tearDown(self):
- testing.tearDown()
-
- def test_my_view(self):
- from .views import my_view
- request = testing.DummyRequest()
- info = my_view(request)
- self.assertEqual(info['project'], '{{project}}')
diff --git a/src/pyramid/scaffolds/zodb/+package+/views.py_tmpl b/src/pyramid/scaffolds/zodb/+package+/views.py_tmpl
deleted file mode 100644
index 1e8a9b65a..000000000
--- a/src/pyramid/scaffolds/zodb/+package+/views.py_tmpl
+++ /dev/null
@@ -1,7 +0,0 @@
-from pyramid.view import view_config
-from .models import MyModel
-
-
-@view_config(context=MyModel, renderer='templates/mytemplate.pt')
-def my_view(request):
- return {'project': '{{project}}'}
diff --git a/src/pyramid/scaffolds/zodb/CHANGES.txt_tmpl b/src/pyramid/scaffolds/zodb/CHANGES.txt_tmpl
deleted file mode 100644
index 35a34f332..000000000
--- a/src/pyramid/scaffolds/zodb/CHANGES.txt_tmpl
+++ /dev/null
@@ -1,4 +0,0 @@
-0.0
----
-
-- Initial version
diff --git a/src/pyramid/scaffolds/zodb/MANIFEST.in_tmpl b/src/pyramid/scaffolds/zodb/MANIFEST.in_tmpl
deleted file mode 100644
index 0ff6eb7a0..000000000
--- a/src/pyramid/scaffolds/zodb/MANIFEST.in_tmpl
+++ /dev/null
@@ -1,2 +0,0 @@
-include *.txt *.ini *.cfg *.rst
-recursive-include {{package}} *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml
diff --git a/src/pyramid/scaffolds/zodb/README.txt_tmpl b/src/pyramid/scaffolds/zodb/README.txt_tmpl
deleted file mode 100644
index 127ad7595..000000000
--- a/src/pyramid/scaffolds/zodb/README.txt_tmpl
+++ /dev/null
@@ -1,12 +0,0 @@
-{{project}} README
-==================
-
-Getting Started
----------------
-
-- cd <directory containing this file>
-
-- $VENV/bin/pip install -e .
-
-- $VENV/bin/pserve development.ini
-
diff --git a/src/pyramid/scaffolds/zodb/development.ini_tmpl b/src/pyramid/scaffolds/zodb/development.ini_tmpl
deleted file mode 100644
index 7d898bcd4..000000000
--- a/src/pyramid/scaffolds/zodb/development.ini_tmpl
+++ /dev/null
@@ -1,64 +0,0 @@
-###
-# app configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/environment.html
-###
-
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = true
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.default_locale_name = en
-pyramid.includes =
- pyramid_debugtoolbar
- pyramid_zodbconn
- pyramid_tm
-
-tm.attempts = 3
-zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000
-
-# By default, the toolbar only appears for clients from IP addresses
-# '127.0.0.1' and '::1'.
-# debugtoolbar.hosts = 127.0.0.1 ::1
-
-###
-# wsgi server configuration
-###
-
-[server:main]
-use = egg:waitress#main
-listen = localhost:6543
-
-###
-# logging configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/logging.html
-###
-
-[loggers]
-keys = root, {{package_logger}}
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = INFO
-handlers = console
-
-[logger_{{package_logger}}]
-level = DEBUG
-handlers =
-qualname = {{package}}
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
diff --git a/src/pyramid/scaffolds/zodb/production.ini_tmpl b/src/pyramid/scaffolds/zodb/production.ini_tmpl
deleted file mode 100644
index 7c2e90c2e..000000000
--- a/src/pyramid/scaffolds/zodb/production.ini_tmpl
+++ /dev/null
@@ -1,59 +0,0 @@
-###
-# app configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/environment.html
-###
-
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = false
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.default_locale_name = en
-pyramid.includes =
- pyramid_tm
- pyramid_zodbconn
-
-tm.attempts = 3
-zodbconn.uri = file://%(here)s/Data.fs?connection_cache_size=20000
-
-###
-# wsgi server configuration
-###
-
-[server:main]
-use = egg:waitress#main
-listen = *:6543
-
-###
-# logging configuration
-# https://docs.pylonsproject.org/projects/pyramid/en/{{pyramid_docs_branch}}/narr/logging.html
-###
-
-[loggers]
-keys = root, {{package_logger}}
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = WARN
-handlers = console
-
-[logger_{{package_logger}}]
-level = WARN
-handlers =
-qualname = {{package}}
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s
diff --git a/src/pyramid/scaffolds/zodb/pytest.ini_tmpl b/src/pyramid/scaffolds/zodb/pytest.ini_tmpl
deleted file mode 100644
index a30c8bcad..000000000
--- a/src/pyramid/scaffolds/zodb/pytest.ini_tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-[pytest]
-testpaths = {{package}}
-python_files = *.py
diff --git a/src/pyramid/scaffolds/zodb/setup.py_tmpl b/src/pyramid/scaffolds/zodb/setup.py_tmpl
deleted file mode 100644
index 19771d756..000000000
--- a/src/pyramid/scaffolds/zodb/setup.py_tmpl
+++ /dev/null
@@ -1,53 +0,0 @@
-import os
-
-from setuptools import setup, find_packages
-
-here = os.path.abspath(os.path.dirname(__file__))
-with open(os.path.join(here, 'README.txt')) as f:
- README = f.read()
-with open(os.path.join(here, 'CHANGES.txt')) as f:
- CHANGES = f.read()
-
-requires = [
- 'pyramid',
- 'pyramid_chameleon',
- 'pyramid_debugtoolbar',
- 'pyramid_tm',
- 'pyramid_zodbconn',
- 'transaction',
- 'ZODB3',
- 'waitress',
- ]
-
-tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest', # includes virtualenv
- 'pytest-cov',
- ]
-
-setup(name='{{project}}',
- version='0.0',
- description='{{project}}',
- long_description=README + '\n\n' + CHANGES,
- classifiers=[
- "Programming Language :: Python",
- "Framework :: Pyramid",
- "Topic :: Internet :: WWW/HTTP",
- "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
- ],
- author='',
- author_email='',
- url='',
- keywords='web pylons pyramid',
- packages=find_packages(),
- include_package_data=True,
- zip_safe=False,
- extras_require={
- 'testing': tests_require,
- },
- install_requires=requires,
- entry_points="""\
- [paste.app_factory]
- main = {{package}}:main
- """,
- )
diff --git a/src/pyramid/scripts/pcreate.py b/src/pyramid/scripts/pcreate.py
deleted file mode 100644
index ee3c60ee2..000000000
--- a/src/pyramid/scripts/pcreate.py
+++ /dev/null
@@ -1,297 +0,0 @@
-# (c) 2005 Ian Bicking and contributors; written for Paste
-# (http://pythonpaste.org) Licensed under the MIT license:
-# http://www.opensource.org/licenses/mit-license.php
-
-import argparse
-import os
-import os.path
-import pkg_resources
-import re
-import sys
-from pyramid.compat import input_
-
-_bad_chars_re = re.compile('[^a-zA-Z0-9_]')
-
-
-def main(argv=sys.argv, quiet=False):
- command = PCreateCommand(argv, quiet)
- try:
- return command.run()
- except KeyboardInterrupt: # pragma: no cover
- return 1
-
-
-class PCreateCommand(object):
- verbosity = 1 # required
- parser = argparse.ArgumentParser(
- description="""\
-Render Pyramid scaffolding to an output directory.
-
-Note: As of Pyramid 1.8, this command is deprecated. Use
-pyramid-cookiecutter-starter instead:
-https://github.com/Pylons/pyramid-cookiecutter-starter
-""",
- formatter_class=argparse.RawDescriptionHelpFormatter,
- )
- parser.add_argument(
- '-s',
- '--scaffold',
- dest='scaffold_name',
- action='append',
- help=(
- "Add a scaffold to the create process "
- "(multiple -s args accepted)"
- ),
- )
- parser.add_argument(
- '-t',
- '--template',
- dest='scaffold_name',
- action='append',
- help=(
- 'A backwards compatibility alias for '
- '-s/--scaffold. Add a scaffold to the '
- 'create process (multiple -t args accepted)'
- ),
- )
- parser.add_argument(
- '-l',
- '--list',
- dest='list',
- action='store_true',
- help="List all available scaffold names",
- )
- parser.add_argument(
- '--list-templates',
- dest='list',
- action='store_true',
- help=(
- "A backwards compatibility alias for -l/--list. "
- "List all available scaffold names."
- ),
- )
- parser.add_argument(
- '--package-name',
- dest='package_name',
- action='store',
- help='Package name to use. The name provided is '
- 'assumed to be a valid Python package name, and '
- 'will not be validated. By default the package '
- 'name is derived from the value of '
- 'output_directory.',
- )
- parser.add_argument(
- '--simulate',
- dest='simulate',
- action='store_true',
- help='Simulate but do no work',
- )
- parser.add_argument(
- '--overwrite',
- dest='overwrite',
- action='store_true',
- help='Always overwrite',
- )
- parser.add_argument(
- '--interactive',
- dest='interactive',
- action='store_true',
- help='When a file would be overwritten, interrogate '
- '(this is the default, but you may specify it to '
- 'override --overwrite)',
- )
- parser.add_argument(
- '--ignore-conflicting-name',
- dest='force_bad_name',
- action='store_true',
- default=False,
- help='Do create a project even if the chosen name '
- 'is the name of an already existing / importable '
- 'package.',
- )
- parser.add_argument(
- 'output_directory',
- nargs='?',
- default=None,
- help='The directory where the project will be ' 'created.',
- )
-
- pyramid_dist = pkg_resources.get_distribution("pyramid")
-
- def __init__(self, argv, quiet=False):
- self.quiet = quiet
- self.args = self.parser.parse_args(argv[1:])
- if not self.args.interactive and not self.args.overwrite:
- self.args.interactive = True
- self.scaffolds = self.all_scaffolds()
-
- def run(self):
- if self.args.list:
- return self.show_scaffolds()
- if not self.args.scaffold_name and not self.args.output_directory:
- if not self.quiet: # pragma: no cover
- self.parser.print_help()
- self.out('')
- self.show_scaffolds()
- return 2
-
- if not self.validate_input():
- return 2
- self._warn_pcreate_deprecated()
-
- return self.render_scaffolds()
-
- @property
- def output_path(self):
- return os.path.abspath(os.path.normpath(self.args.output_directory))
-
- @property
- def project_vars(self):
- output_dir = self.output_path
- project_name = os.path.basename(os.path.split(output_dir)[1])
- if self.args.package_name is None:
- pkg_name = _bad_chars_re.sub(
- '', project_name.lower().replace('-', '_')
- )
- safe_name = pkg_resources.safe_name(project_name)
- else:
- pkg_name = self.args.package_name
- safe_name = pkg_name
- egg_name = pkg_resources.to_filename(safe_name)
-
- # get pyramid package version
- pyramid_version = self.pyramid_dist.version
-
- # map pyramid package version of the documentation branch ##
- # if version ends with 'dev' then docs version is 'master'
- if self.pyramid_dist.version[-3:] == 'dev':
- pyramid_docs_branch = 'master'
- else:
- # if not version is not 'dev' find the version.major_version string
- # and combine it with '-branch'
- version_match = re.match(r'(\d+\.\d+)', self.pyramid_dist.version)
- if version_match is not None:
- pyramid_docs_branch = "%s-branch" % version_match.group()
- # if can not parse the version then default to 'latest'
- else:
- pyramid_docs_branch = 'latest'
-
- return {
- 'project': project_name,
- 'package': pkg_name,
- 'egg': egg_name,
- 'pyramid_version': pyramid_version,
- 'pyramid_docs_branch': pyramid_docs_branch,
- }
-
- def render_scaffolds(self):
- props = self.project_vars
- output_dir = self.output_path
- for scaffold_name in self.args.scaffold_name:
- for scaffold in self.scaffolds:
- if scaffold.name == scaffold_name:
- scaffold.run(self, output_dir, props)
- return 0
-
- def show_scaffolds(self):
- scaffolds = sorted(self.scaffolds, key=lambda x: x.name)
- if scaffolds:
- max_name = max([len(t.name) for t in scaffolds])
- self.out('Available scaffolds:')
- for scaffold in scaffolds:
- self.out(
- ' %s:%s %s'
- % (
- scaffold.name,
- ' ' * (max_name - len(scaffold.name)),
- scaffold.summary,
- )
- )
- else:
- self.out('No scaffolds available')
- return 0
-
- def all_scaffolds(self):
- scaffolds = []
- eps = list(pkg_resources.iter_entry_points('pyramid.scaffold'))
- for entry in eps:
- try:
- scaffold_class = entry.load()
- scaffold = scaffold_class(entry.name)
- scaffolds.append(scaffold)
- except Exception as e: # pragma: no cover
- self.out(
- 'Warning: could not load entry point %s (%s: %s)'
- % (entry.name, e.__class__.__name__, e)
- )
- return scaffolds
-
- def out(self, msg): # pragma: no cover
- if not self.quiet:
- print(msg)
-
- def validate_input(self):
- if not self.args.scaffold_name:
- self.out(
- 'You must provide at least one scaffold name: '
- '-s <scaffold name>'
- )
- self.out('')
- self.show_scaffolds()
- return False
- if not self.args.output_directory:
- self.out('You must provide a project name')
- return False
- available = [x.name for x in self.scaffolds]
- diff = set(self.args.scaffold_name).difference(available)
- if diff:
- self.out('Unavailable scaffolds: %s' % ", ".join(sorted(diff)))
- return False
-
- pkg_name = self.project_vars['package']
-
- if pkg_name == 'site' and not self.args.force_bad_name:
- self.out(
- 'The package name "site" has a special meaning in '
- 'Python. Are you sure you want to use it as your '
- 'project\'s name?'
- )
- return self.confirm_bad_name(
- 'Really use "{0}"?: '.format(pkg_name)
- )
-
- # check if pkg_name can be imported (i.e. already exists in current
- # $PYTHON_PATH, if so - let the user confirm
- pkg_exists = True
- try:
- # use absolute imports
- __import__(pkg_name, globals(), locals(), [], 0)
- except ImportError:
- pkg_exists = False
- if not pkg_exists:
- return True
-
- if self.args.force_bad_name:
- return True
- self.out(
- 'A package named "{0}" already exists, are you sure you want '
- 'to use it as your project\'s name?'.format(pkg_name)
- )
- return self.confirm_bad_name('Really use "{0}"?: '.format(pkg_name))
-
- def confirm_bad_name(self, prompt): # pragma: no cover
- answer = input_('{0} [y|N]: '.format(prompt))
- return answer.strip().lower() == 'y'
-
- def _warn_pcreate_deprecated(self):
- self.out(
- '''\
-Note: As of Pyramid 1.8, this command is deprecated. Use a specific
-cookiecutter instead:
-https://github.com/pylons/?query=cookiecutter
-'''
- )
-
-
-if __name__ == '__main__': # pragma: no cover
- sys.exit(main() or 0)