summaryrefslogtreecommitdiff
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
parent26ff2bf625f426f90abb313e9e028fc16308d105 (diff)
downloadpyramid-4aa2eb5f970b812a96480e2cd7c18c1103b844c8.tar.gz
pyramid-4aa2eb5f970b812a96480e2cd7c18c1103b844c8.tar.bz2
pyramid-4aa2eb5f970b812a96480e2cd7c18c1103b844c8.zip
initial work removing pcreate
-rw-r--r--.coveragerc2
-rw-r--r--.flake83
-rw-r--r--HACKING.txt12
-rw-r--r--docs/glossary.rst11
-rw-r--r--docs/narr/commandline.rst2
-rw-r--r--docs/pscripts/pcreate.rst9
-rw-r--r--docs/tutorials/wiki/NOTE-relocatable.txt7
-rw-r--r--setup.py5
-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
-rw-r--r--tests/test_scaffolds/__init__.py1
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/.badfile0
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/__init__.py_tmpl12
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/resources.py3
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/favicon.icobin1406 -> 0 bytes
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/footerbg.pngbin333 -> 0 bytes
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/headerbg.pngbin203 -> 0 bytes
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/ie6.css8
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/middlebg.pngbin2797 -> 0 bytes
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/pylons.css65
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid-small.pngbin7044 -> 0 bytes
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid.pngbin33055 -> 0 bytes
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/static/transparent.gifbin49 -> 0 bytes
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/templates/mytemplate.pt_tmpl76
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/test_no_content.py_tmpl0
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/tests.py_tmpl16
-rw-r--r--tests/test_scaffolds/fixture_scaffold/+package+/views.py_tmpl2
-rw-r--r--tests/test_scaffolds/fixture_scaffold/CHANGES.txt_tmpl4
-rw-r--r--tests/test_scaffolds/fixture_scaffold/MANIFEST.in_tmpl2
-rw-r--r--tests/test_scaffolds/fixture_scaffold/README.txt_tmpl1
-rw-r--r--tests/test_scaffolds/fixture_scaffold/development.ini_tmpl45
-rw-r--r--tests/test_scaffolds/fixture_scaffold/production.ini_tmpl44
-rw-r--r--tests/test_scaffolds/fixture_scaffold/setup.py_tmpl38
-rw-r--r--tests/test_scaffolds/test_copydir.py574
-rw-r--r--tests/test_scaffolds/test_init.py22
-rw-r--r--tests/test_scaffolds/test_template.py174
-rw-r--r--tests/test_scripts/test_pcreate.py409
-rw-r--r--tox.ini36
98 files changed, 5 insertions, 4239 deletions
diff --git a/.coveragerc b/.coveragerc
index b02940260..d0a1fd54a 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -2,8 +2,6 @@
source =
pyramid
tests
-omit =
- src/pyramid/scaffolds/tests.py
[paths]
source =
diff --git a/.flake8 b/.flake8
index 958f8f9e0..998f6ffec 100644
--- a/.flake8
+++ b/.flake8
@@ -10,9 +10,6 @@ ignore =
W504
exclude =
src/pyramid/compat.py
- src/pyramid/scaffolds/alchemy
- src/pyramid/scaffolds/starter
- src/pyramid/scaffolds/zodb
tests/fixtures
tests/pkgs
tests/test_config/pkgs
diff --git a/HACKING.txt b/HACKING.txt
index db40c99a2..acd65e4fd 100644
--- a/HACKING.txt
+++ b/HACKING.txt
@@ -45,11 +45,6 @@ In order to add a feature to Pyramid:
- The feature must not add unnecessary dependencies (where "unnecessary" is of
course subjective, but new dependencies should be discussed).
-The above requirements are relaxed for scaffolding dependencies. If a scaffold
-has an install-time dependency on something that doesn't work on a particular
-platform, that caveat should be spelled out clearly in *its* documentation
-(within its `docs/` directory).
-
Coding Style
------------
@@ -105,13 +100,6 @@ Running Tests
Specifying tests / selecting tests":
https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests
-- Functional tests related to the "scaffolds" (starter, zodb, alchemy) which
- create a virtual environment, install the scaffold package and its
- dependencies, start a server, and hit a URL on the server, can be run like
- so:
-
- $ tox -e{py27,py34,py35,py36,py37,pypy}-scaffolds
-
Test Coverage
-------------
diff --git a/docs/glossary.rst b/docs/glossary.rst
index e5566a229..4668efe6d 100644
--- a/docs/glossary.rst
+++ b/docs/glossary.rst
@@ -1005,15 +1005,6 @@ Glossary
:term:`cookiecutter`. For more information, see
https://docs.pylonsproject.org/projects/pyramid_debugtoolbar/en/latest/.
- scaffold
- A project template that generates some of the major parts of a Pyramid
- application and helps users to quickly get started writing larger
- applications. Scaffolds are usually used via the ``pcreate`` command.
-
- .. deprecated:: 1.8
-
- .. seealso:: See also :term:`cookiecutter`.
-
pyramid_exclog
A package which logs Pyramid application exception (error) information
to a standard Python logger. This add-on is most useful when
@@ -1162,8 +1153,6 @@ Glossary
``pyramid-cookiecutter-alchemy`` and ``pyramid-cookiecutter-zodb`` are no longer supported.
Use ``pyramid-cookiecutter-starter`` going forward.
- .. seealso:: See also :term:`scaffold`.
-
coverage
A measurement of code coverage, usually expressed as a percentage of which lines of code have been executed over which lines are executable, typically run during test execution.
diff --git a/docs/narr/commandline.rst b/docs/narr/commandline.rst
index 7af6bba43..b571a7d7b 100644
--- a/docs/narr/commandline.rst
+++ b/docs/narr/commandline.rst
@@ -1131,6 +1131,6 @@ start with either ``foo`` or ``bar``:
reload_assets False
prevent_http_cache False
-Pyramid's ``pserve``, ``pcreate``, ``pshell``, ``prequest``, ``ptweens``, and
+Pyramid's ``pserve``, ``pshell``, ``prequest``, ``ptweens``, and
other ``p*`` scripts are implemented as console scripts. When you invoke one
of those, you are using a console script.
diff --git a/docs/pscripts/pcreate.rst b/docs/pscripts/pcreate.rst
deleted file mode 100644
index e2c45626a..000000000
--- a/docs/pscripts/pcreate.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. index::
- single: pcreate; --help
-
-.. _pcreate_script:
-
-.. autoprogram:: pyramid.scripts.pcreate:PCreateCommand.parser
- :prog: pcreate
-
-.. seealso:: :ref:`creating_a_project` and :ref:`running-pscripts`.
diff --git a/docs/tutorials/wiki/NOTE-relocatable.txt b/docs/tutorials/wiki/NOTE-relocatable.txt
index e942caba8..c3f30af51 100644
--- a/docs/tutorials/wiki/NOTE-relocatable.txt
+++ b/docs/tutorials/wiki/NOTE-relocatable.txt
@@ -1,6 +1,7 @@
We specifically use relative package references where possible so this demo
-works even if the user names their package (in the '$VENV/bin/pcreate -s
-zodb ...' step) something other than 'tutorial'.
+works even if the user names their package (in the
+'cookiecutter gh:Pylons/pyramid-cookiecutter-starter' step) something other
+than 'tutorial'.
Specifically:
@@ -9,5 +10,5 @@ Specifically:
page templates.
Direct uses of the package name, like in __init__.py 'config.scan()'
-statements, are already adjusted by the paster/pcreate, so we don't have to
+statements, are already adjusted by the cookiecutter, so we don't have to
worry about them.
diff --git a/setup.py b/setup.py
index e33dcdf2d..272357295 100644
--- a/setup.py
+++ b/setup.py
@@ -110,14 +110,9 @@ setup(
tests_require=tests_require,
test_suite="tests",
entry_points="""\
- [pyramid.scaffold]
- starter=pyramid.scaffolds:StarterProjectTemplate
- zodb=pyramid.scaffolds:ZODBProjectTemplate
- alchemy=pyramid.scaffolds:AlchemyProjectTemplate
[pyramid.pshell_runner]
python=pyramid.scripts.pshell:python_shell_runner
[console_scripts]
- pcreate = pyramid.scripts.pcreate:main
pserve = pyramid.scripts.pserve:main
pshell = pyramid.scripts.pshell:main
proutes = pyramid.scripts.proutes:main
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)
diff --git a/tests/test_scaffolds/__init__.py b/tests/test_scaffolds/__init__.py
deleted file mode 100644
index 5bb534f79..000000000
--- a/tests/test_scaffolds/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# package
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/.badfile b/tests/test_scaffolds/fixture_scaffold/+package+/.badfile
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/.badfile
+++ /dev/null
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/__init__.py_tmpl b/tests/test_scaffolds/fixture_scaffold/+package+/__init__.py_tmpl
deleted file mode 100644
index d763b2435..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/__init__.py_tmpl
+++ /dev/null
@@ -1,12 +0,0 @@
-from pyramid.config import Configurator
-from {{package}}.resources import Root
-
-def main(global_config, **settings):
- """ This function returns a Pyramid WSGI application.
- """
- config = Configurator(root_factory=Root, settings=settings)
- config.add_view('{{package}}.views.my_view',
- context='{{package}}:resources.Root',
- renderer='{{package}}:templates/mytemplate.pt')
- config.add_static_view('static', '{{package}}:static', cache_max_age=3600)
- return config.make_wsgi_app()
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/resources.py b/tests/test_scaffolds/fixture_scaffold/+package+/resources.py
deleted file mode 100644
index 3d811895c..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/resources.py
+++ /dev/null
@@ -1,3 +0,0 @@
-class Root(object):
- def __init__(self, request):
- self.request = request
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/favicon.ico b/tests/test_scaffolds/fixture_scaffold/+package+/static/favicon.ico
deleted file mode 100644
index 71f837c9e..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/footerbg.png b/tests/test_scaffolds/fixture_scaffold/+package+/static/footerbg.png
deleted file mode 100644
index 1fbc873da..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/footerbg.png
+++ /dev/null
Binary files differ
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/headerbg.png b/tests/test_scaffolds/fixture_scaffold/+package+/static/headerbg.png
deleted file mode 100644
index 0596f2020..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/headerbg.png
+++ /dev/null
Binary files differ
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/ie6.css b/tests/test_scaffolds/fixture_scaffold/+package+/static/ie6.css
deleted file mode 100644
index b7c8493d8..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/ie6.css
+++ /dev/null
@@ -1,8 +0,0 @@
-* html img,
-* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none",
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')",
-this.src = "static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')",
-this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)
-);}
-#wrap{display:table;height:100%}
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/middlebg.png b/tests/test_scaffolds/fixture_scaffold/+package+/static/middlebg.png
deleted file mode 100644
index 2369cfb7d..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/middlebg.png
+++ /dev/null
Binary files differ
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/pylons.css b/tests/test_scaffolds/fixture_scaffold/+package+/static/pylons.css
deleted file mode 100644
index c54499ddd..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/pylons.css
+++ /dev/null
@@ -1,65 +0,0 @@
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;/* 16px */
-vertical-align:baseline;background:transparent;}
-body{line-height:1;}
-ol,ul{list-style:none;}
-blockquote,q{quotes:none;}
-blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}
-:focus{outline:0;}
-ins{text-decoration:none;}
-del{text-decoration:line-through;}
-table{border-collapse:collapse;border-spacing:0;}
-sub{vertical-align:sub;font-size:smaller;line-height:normal;}
-sup{vertical-align:super;font-size:smaller;line-height:normal;}
-ul,menu,dir{display:block;list-style-type:disc;margin:1em 0;padding-left:40px;}
-ol{display:block;list-style-type:decimal-leading-zero;margin:1em 0;padding-left:40px;}
-li{display:list-item;}
-ul ul,ul ol,ul dir,ul menu,ul dl,ol ul,ol ol,ol dir,ol menu,ol dl,dir ul,dir ol,dir dir,dir menu,dir dl,menu ul,menu ol,menu dir,menu menu,menu dl,dl ul,dl ol,dl dir,dl menu,dl dl{margin-top:0;margin-bottom:0;}
-ol ul,ul ul,menu ul,dir ul,ol menu,ul menu,menu menu,dir menu,ol dir,ul dir,menu dir,dir dir{list-style-type:circle;}
-ol ol ul,ol ul ul,ol menu ul,ol dir ul,ol ol menu,ol ul menu,ol menu menu,ol dir menu,ol ol dir,ol ul dir,ol menu dir,ol dir dir,ul ol ul,ul ul ul,ul menu ul,ul dir ul,ul ol menu,ul ul menu,ul menu menu,ul dir menu,ul ol dir,ul ul dir,ul menu dir,ul dir dir,menu ol ul,menu ul ul,menu menu ul,menu dir ul,menu ol menu,menu ul menu,menu menu menu,menu dir menu,menu ol dir,menu ul dir,menu menu dir,menu dir dir,dir ol ul,dir ul ul,dir menu ul,dir dir ul,dir ol menu,dir ul menu,dir menu menu,dir dir menu,dir ol dir,dir ul dir,dir menu dir,dir dir dir{list-style-type:square;}
-.hidden{display:none;}
-p{line-height:1.5em;}
-h1{font-size:1.75em;line-height:1.7em;font-family:helvetica,verdana;}
-h2{font-size:1.5em;line-height:1.7em;font-family:helvetica,verdana;}
-h3{font-size:1.25em;line-height:1.7em;font-family:helvetica,verdana;}
-h4{font-size:1em;line-height:1.7em;font-family:helvetica,verdana;}
-html,body{width:100%;height:100%;}
-body{margin:0;padding:0;background-color:#ffffff;position:relative;font:16px/24px "NobileRegular","Lucida Grande",Lucida,Verdana,sans-serif;}
-a{color:#1b61d6;text-decoration:none;}
-a:hover{color:#e88f00;text-decoration:underline;}
-body h1,
-body h2,
-body h3,
-body h4,
-body h5,
-body h6{font-family:"NeutonRegular","Lucida Grande",Lucida,Verdana,sans-serif;font-weight:normal;color:#373839;font-style:normal;}
-#wrap{min-height:100%;}
-#header,#footer{width:100%;color:#ffffff;height:40px;position:absolute;text-align:center;line-height:40px;overflow:hidden;font-size:12px;vertical-align:middle;}
-#header{background:#000000;top:0;font-size:14px;}
-#footer{bottom:0;background:#000000 url(footerbg.png) repeat-x 0 top;position:relative;margin-top:-40px;clear:both;}
-.header,.footer{width:750px;margin-right:auto;margin-left:auto;}
-.wrapper{width:100%}
-#top,#top-small,#bottom{width:100%;}
-#top{color:#000000;height:230px;background:#ffffff url(headerbg.png) repeat-x 0 top;position:relative;}
-#top-small{color:#000000;height:60px;background:#ffffff url(headerbg.png) repeat-x 0 top;position:relative;}
-#bottom{color:#222;background-color:#ffffff;}
-.top,.top-small,.middle,.bottom{width:750px;margin-right:auto;margin-left:auto;}
-.top{padding-top:40px;}
-.top-small{padding-top:10px;}
-#middle{width:100%;height:100px;background:url(middlebg.png) repeat-x;border-top:2px solid #ffffff;border-bottom:2px solid #b2b2b2;}
-.app-welcome{margin-top:25px;}
-.app-name{color:#000000;font-weight:bold;}
-.bottom{padding-top:50px;}
-#left{width:350px;float:left;padding-right:25px;}
-#right{width:350px;float:right;padding-left:25px;}
-.align-left{text-align:left;}
-.align-right{text-align:right;}
-.align-center{text-align:center;}
-ul.links{margin:0;padding:0;}
-ul.links li{list-style-type:none;font-size:14px;}
-form{border-style:none;}
-fieldset{border-style:none;}
-input{color:#222;border:1px solid #ccc;font-family:sans-serif;font-size:12px;line-height:16px;}
-input[type=text],input[type=password]{width:205px;}
-input[type=submit]{background-color:#ddd;font-weight:bold;}
-/*Opera Fix*/
-body:before{content:"";height:100%;float:left;width:0;margin-top:-32767px;}
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid-small.png b/tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid-small.png
deleted file mode 100644
index a5bc0ade7..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid-small.png
+++ /dev/null
Binary files differ
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid.png b/tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid.png
deleted file mode 100644
index 347e05549..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/pyramid.png
+++ /dev/null
Binary files differ
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/static/transparent.gif b/tests/test_scaffolds/fixture_scaffold/+package+/static/transparent.gif
deleted file mode 100644
index 0341802e5..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/static/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/templates/mytemplate.pt_tmpl b/tests/test_scaffolds/fixture_scaffold/+package+/templates/mytemplate.pt_tmpl
deleted file mode 100644
index f4d98ec29..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/templates/mytemplate.pt_tmpl
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal">
-<head>
- <title>The Pyramid Web Framework</title>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
- <meta name="keywords" content="python web application" />
- <meta name="description" content="pyramid web application" />
- <link rel="shortcut icon" href="${request.static_url('{{package}}:static/favicon.ico')}" />
- <link rel="stylesheet" href="${request.static_url('{{package}}:static/pylons.css')}" type="text/css" media="screen" charset="utf-8" />
- <link rel="stylesheet" href="http://static.pylonsproject.org/fonts/nobile/stylesheet.css" media="screen" />
- <link rel="stylesheet" href="http://static.pylonsproject.org/fonts/neuton/stylesheet.css" media="screen" />
- <!--[if lte IE 6]>
- <link rel="stylesheet" href="${request.static_url('{{package}}:static/ie6.css')}" type="text/css" media="screen" charset="utf-8" />
- <![endif]-->
-</head>
-<body>
- <div id="wrap">
- <div id="top">
- <div class="top align-center">
- <div><img src="${request.static_url('{{package}}:static/pyramid.png')}" width="750" height="169" alt="pyramid"/></div>
- </div>
- </div>
- <div id="middle">
- <div class="middle align-center">
- <p class="app-welcome">
- Welcome to <span class="app-name">${project}</span>, an application generated by<br/>
- the Pyramid Web Framework.
- </p>
- </div>
- </div>
- <div id="bottom">
- <div class="bottom">
- <div id="left" class="align-right">
- <h2>Search documentation</h2>
- <form method="get" action="http://docs.pylonsproject.org/projects/pyramid/current/search.html">
- <input type="text" id="q" name="q" value="" />
- <input type="submit" id="x" value="Go" />
- </form>
- </div>
- <div id="right" class="align-left">
- <h2>Pyramid links</h2>
- <ul class="links">
- <li>
- <a href="https://pylonsproject.org">Pylons Website</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#narrative-documentation">Narrative Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#api-documentation">API Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#tutorials">Tutorials</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#change-history">Change History</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#sample-applications">Sample Applications</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#support-and-development">Support and Development</a>
- </li>
- <li>
- <a href="irc://irc.freenode.net#pyramid">IRC Channel</a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <div id="footer">
- <div class="footer">&copy; Copyright 2008-2011, Agendaless Consulting.</div>
- </div>
-</body>
-</html>
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/test_no_content.py_tmpl b/tests/test_scaffolds/fixture_scaffold/+package+/test_no_content.py_tmpl
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/test_no_content.py_tmpl
+++ /dev/null
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/tests.py_tmpl b/tests/test_scaffolds/fixture_scaffold/+package+/tests.py_tmpl
deleted file mode 100644
index 1627bf015..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/tests.py_tmpl
+++ /dev/null
@@ -1,16 +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 {{package}}.views import my_view
- request = testing.DummyRequest()
- info = my_view(request)
- self.assertEqual(info['project'], '{{project}}')
diff --git a/tests/test_scaffolds/fixture_scaffold/+package+/views.py_tmpl b/tests/test_scaffolds/fixture_scaffold/+package+/views.py_tmpl
deleted file mode 100644
index 12ed8832d..000000000
--- a/tests/test_scaffolds/fixture_scaffold/+package+/views.py_tmpl
+++ /dev/null
@@ -1,2 +0,0 @@
-def my_view(request):
- return {'project':'{{project}}'}
diff --git a/tests/test_scaffolds/fixture_scaffold/CHANGES.txt_tmpl b/tests/test_scaffolds/fixture_scaffold/CHANGES.txt_tmpl
deleted file mode 100644
index 35a34f332..000000000
--- a/tests/test_scaffolds/fixture_scaffold/CHANGES.txt_tmpl
+++ /dev/null
@@ -1,4 +0,0 @@
-0.0
----
-
-- Initial version
diff --git a/tests/test_scaffolds/fixture_scaffold/MANIFEST.in_tmpl b/tests/test_scaffolds/fixture_scaffold/MANIFEST.in_tmpl
deleted file mode 100644
index 0ff6eb7a0..000000000
--- a/tests/test_scaffolds/fixture_scaffold/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/tests/test_scaffolds/fixture_scaffold/README.txt_tmpl b/tests/test_scaffolds/fixture_scaffold/README.txt_tmpl
deleted file mode 100644
index 40f98d14a..000000000
--- a/tests/test_scaffolds/fixture_scaffold/README.txt_tmpl
+++ /dev/null
@@ -1 +0,0 @@
-{{project}} README
diff --git a/tests/test_scaffolds/fixture_scaffold/development.ini_tmpl b/tests/test_scaffolds/fixture_scaffold/development.ini_tmpl
deleted file mode 100644
index 01c504f99..000000000
--- a/tests/test_scaffolds/fixture_scaffold/development.ini_tmpl
+++ /dev/null
@@ -1,45 +0,0 @@
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = true
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.debug_templates = true
-pyramid.default_locale_name = en
-pyramid.includes = pyramid_debugtoolbar
-
-[server:main]
-use = egg:pyramid#wsgiref
-listen = *:6543
-
-# Begin logging configuration
-
-[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][%(threadName)s] %(message)s
-
-# End logging configuration
diff --git a/tests/test_scaffolds/fixture_scaffold/production.ini_tmpl b/tests/test_scaffolds/fixture_scaffold/production.ini_tmpl
deleted file mode 100644
index becd3aa76..000000000
--- a/tests/test_scaffolds/fixture_scaffold/production.ini_tmpl
+++ /dev/null
@@ -1,44 +0,0 @@
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = false
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.debug_templates = false
-pyramid.default_locale_name = en
-
-[server:main]
-use = egg:pyramid#wsgiref
-listen = *:6543
-
-# Begin logging configuration
-
-[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][%(threadName)s] %(message)s
-
-# End logging configuration
diff --git a/tests/test_scaffolds/fixture_scaffold/setup.py_tmpl b/tests/test_scaffolds/fixture_scaffold/setup.py_tmpl
deleted file mode 100644
index ee9fd5fda..000000000
--- a/tests/test_scaffolds/fixture_scaffold/setup.py_tmpl
+++ /dev/null
@@ -1,38 +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_debugtoolbar']
-
-setup(name='{{project}}',
- version='0.0',
- description='{{project}}',
- long_description=README + '\n\n' + CHANGES,
- classifiers=[
- "Programming Language :: Python",
- "Framework :: Pylons",
- "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,
- install_requires=requires,
- tests_require=requires,
- test_suite="{{package}}",
- entry_points = """\
- [paste.app_factory]
- main = {{package}}:main
- """,
- )
-
diff --git a/tests/test_scaffolds/test_copydir.py b/tests/test_scaffolds/test_copydir.py
deleted file mode 100644
index 1f046f9e8..000000000
--- a/tests/test_scaffolds/test_copydir.py
+++ /dev/null
@@ -1,574 +0,0 @@
-# -*- coding: utf-8 -*-
-import unittest
-import os
-import pkg_resources
-
-
-class Test_copy_dir(unittest.TestCase):
- def setUp(self):
- import tempfile
- from pyramid.compat import NativeIO
-
- self.dirname = tempfile.mkdtemp()
- self.out = NativeIO()
- self.fixturetuple = ('tests.test_scaffolds', 'fixture_scaffold')
-
- def tearDown(self):
- import shutil
-
- shutil.rmtree(self.dirname, ignore_errors=True)
- self.out.close()
-
- def _callFUT(self, *arg, **kw):
- kw['out_'] = self.out
- from pyramid.scaffolds.copydir import copy_dir
-
- return copy_dir(*arg, **kw)
-
- def test_copy_source_as_pkg_resource(self):
- vars = {'package': 'mypackage'}
- self._callFUT(
- self.fixturetuple,
- self.dirname,
- vars,
- 1,
- False,
- template_renderer=dummy_template_renderer,
- )
- result = self.out.getvalue()
- self.assertTrue('Creating' in result)
- self.assertTrue(
- 'Copying fixture_scaffold/+package+/__init__.py_tmpl to' in result
- )
- source = pkg_resources.resource_filename(
- 'tests.test_scaffolds',
- 'fixture_scaffold/+package+/__init__.py_tmpl',
- )
- target = os.path.join(self.dirname, 'mypackage', '__init__.py')
- with open(target, 'r') as f:
- tcontent = f.read()
- with open(source, 'r') as f:
- scontent = f.read()
- self.assertEqual(scontent, tcontent)
-
- def test_copy_source_as_dirname(self):
- vars = {'package': 'mypackage'}
- source = pkg_resources.resource_filename(*self.fixturetuple)
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- template_renderer=dummy_template_renderer,
- )
- result = self.out.getvalue()
- self.assertTrue('Creating' in result)
- self.assertTrue('Copying __init__.py_tmpl to' in result)
- source = pkg_resources.resource_filename(
- 'tests.test_scaffolds',
- 'fixture_scaffold/+package+/__init__.py_tmpl',
- )
- target = os.path.join(self.dirname, 'mypackage', '__init__.py')
- with open(target, 'r') as f:
- tcontent = f.read()
- with open(source, 'r') as f:
- scontent = f.read()
- self.assertEqual(scontent, tcontent)
-
- def test_content_is_same_message(self):
- vars = {'package': 'mypackage'}
- source = pkg_resources.resource_filename(*self.fixturetuple)
- self._callFUT(
- source,
- self.dirname,
- vars,
- 2,
- False,
- template_renderer=dummy_template_renderer,
- )
- self._callFUT(
- source,
- self.dirname,
- vars,
- 2,
- False,
- template_renderer=dummy_template_renderer,
- )
- result = self.out.getvalue()
- self.assertTrue(
- '%s already exists (same content)'
- % os.path.join(self.dirname, 'mypackage', '__init__.py')
- in result
- )
-
- def test_direxists_message(self):
- vars = {'package': 'mypackage'}
- source = pkg_resources.resource_filename(*self.fixturetuple)
- # if not os.path.exists(self.dirname):
- # os.mkdir(self.dirname)
- self._callFUT(
- source,
- self.dirname,
- vars,
- 2,
- False,
- template_renderer=dummy_template_renderer,
- )
- result = self.out.getvalue()
- self.assertTrue('Directory %s exists' % self.dirname in result, result)
-
- def test_overwrite_false(self):
- vars = {'package': 'mypackage'}
- source = pkg_resources.resource_filename(*self.fixturetuple)
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- overwrite=False,
- template_renderer=dummy_template_renderer,
- )
- # toplevel file
- toplevel = os.path.join(self.dirname, 'mypackage', '__init__.py')
- with open(toplevel, 'w') as f:
- f.write('These are the words you are looking for.')
- # sub directory file
- sub = os.path.join(
- self.dirname, 'mypackage', 'templates', 'mytemplate.pt'
- )
- with open(sub, 'w') as f:
- f.write('These are the words you are looking for.')
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- overwrite=False,
- template_renderer=dummy_template_renderer,
- )
- with open(toplevel, 'r') as f:
- tcontent = f.read()
- self.assertEqual('These are the words you are looking for.', tcontent)
- with open(sub, 'r') as f:
- tcontent = f.read()
- self.assertEqual('These are the words you are looking for.', tcontent)
-
- def test_overwrite_true(self):
- vars = {'package': 'mypackage'}
- source = pkg_resources.resource_filename(*self.fixturetuple)
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- overwrite=True,
- template_renderer=dummy_template_renderer,
- )
- # toplevel file
- toplevel = os.path.join(self.dirname, 'mypackage', '__init__.py')
- with open(toplevel, 'w') as f:
- f.write('These are not the words you are looking for.')
- # sub directory file
- sub = os.path.join(
- self.dirname, 'mypackage', 'templates', 'mytemplate.pt'
- )
- with open(sub, 'w') as f:
- f.write('These are not the words you are looking for.')
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- overwrite=True,
- template_renderer=dummy_template_renderer,
- )
- with open(toplevel, 'r') as f:
- tcontent = f.read()
- self.assertNotEqual(
- 'These are not the words you are looking for.', tcontent
- )
- with open(sub, 'r') as f:
- tcontent = f.read()
- self.assertNotEqual(
- 'These are not the words you are looking for.', tcontent
- )
-
- def test_detect_SkipTemplate(self):
- vars = {'package': 'mypackage'}
- source = pkg_resources.resource_filename(*self.fixturetuple)
-
- def dummy_template_renderer(*args, **kwargs):
- from pyramid.scaffolds.copydir import SkipTemplate
-
- raise SkipTemplate
-
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- template_renderer=dummy_template_renderer,
- )
-
- def test_query_interactive(self):
- from pyramid.scaffolds import copydir
-
- vars = {'package': 'mypackage'}
- source = pkg_resources.resource_filename(*self.fixturetuple)
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- overwrite=False,
- template_renderer=dummy_template_renderer,
- )
- target = os.path.join(self.dirname, 'mypackage', '__init__.py')
- with open(target, 'w') as f:
- f.write('These are not the words you are looking for.')
- # We need query_interactive to return False in order to force
- # execution of a branch
- original_code_object = copydir.query_interactive
- copydir.query_interactive = lambda *args, **kwargs: False
- self._callFUT(
- source,
- self.dirname,
- vars,
- 1,
- False,
- interactive=True,
- overwrite=False,
- template_renderer=dummy_template_renderer,
- )
- copydir.query_interactive = original_code_object
-
-
-class Test_raise_SkipTemplate(unittest.TestCase):
- def _callFUT(self, *arg, **kw):
- from pyramid.scaffolds.copydir import skip_template
-
- return skip_template(*arg, **kw)
-
- def test_raise_SkipTemplate(self):
- from pyramid.scaffolds.copydir import SkipTemplate
-
- self.assertRaises(SkipTemplate, self._callFUT, True, "exc-message")
-
-
-class Test_makedirs(unittest.TestCase):
- def _callFUT(self, *arg, **kw):
- from pyramid.scaffolds.copydir import makedirs
-
- return makedirs(*arg, **kw)
-
- def test_makedirs_parent_dir(self):
- import shutil
- import tempfile
-
- tmpdir = tempfile.mkdtemp()
- target = os.path.join(tmpdir, 'nonexistent_subdir')
- self._callFUT(target, 2, None)
- shutil.rmtree(tmpdir)
-
- def test_makedirs_no_parent_dir(self):
- import shutil
- import tempfile
-
- tmpdir = tempfile.mkdtemp()
- target = os.path.join(tmpdir, 'nonexistent_subdir', 'non2')
- self._callFUT(target, 2, None)
- shutil.rmtree(tmpdir)
-
-
-class Test_support_functions(unittest.TestCase):
- def _call_html_quote(self, *arg, **kw):
- from pyramid.scaffolds.copydir import html_quote
-
- return html_quote(*arg, **kw)
-
- def _call_url_quote(self, *arg, **kw):
- from pyramid.scaffolds.copydir import url_quote
-
- return url_quote(*arg, **kw)
-
- def _call_test(self, *arg, **kw):
- from pyramid.scaffolds.copydir import test
-
- return test(*arg, **kw)
-
- def test_html_quote(self):
- import string
-
- s = None
- self.assertEqual(self._call_html_quote(s), '')
- s = string.ascii_letters
- self.assertEqual(self._call_html_quote(s), s)
- s = "Λεμεσός"
- self.assertEqual(
- self._call_url_quote(s),
- "%CE%9B%CE%B5%CE%BC%CE%B5%CF%83%CF%8C%CF%82",
- )
-
- def test_url_quote(self):
- import string
-
- s = None
- self.assertEqual(self._call_url_quote(s), '')
- s = string.ascii_letters
- self.assertEqual(self._call_url_quote(s), s)
- s = "Λεμεσός"
- self.assertEqual(
- self._call_url_quote(s),
- "%CE%9B%CE%B5%CE%BC%CE%B5%CF%83%CF%8C%CF%82",
- )
-
- def test_test(self):
- conf = True
- true_cond = "faked"
- self.assertEqual(
- self._call_test(conf, true_cond, false_cond=None), "faked"
- )
- conf = False
- self.assertEqual(
- self._call_test(conf, true_cond, false_cond="alsofaked"),
- "alsofaked",
- )
-
-
-class Test_should_skip_file(unittest.TestCase):
- def _callFUT(self, *arg, **kw):
- from pyramid.scaffolds.copydir import should_skip_file
-
- return should_skip_file(*arg, **kw)
-
- def test_should_skip_dot_hidden_file(self):
- self.assertEqual(
- self._callFUT('.a_filename'), 'Skipping hidden file %(filename)s'
- )
-
- def test_should_skip_backup_file(self):
- for name in ('a_filename~', 'a_filename.bak'):
- self.assertEqual(
- self._callFUT(name), 'Skipping backup file %(filename)s'
- )
-
- def test_should_skip_bytecompiled_file(self):
- for name in ('afilename.pyc', 'afilename.pyo'):
- extension = os.path.splitext(name)[1]
- self.assertEqual(
- self._callFUT(name),
- 'Skipping %s file ' % extension + '%(filename)s',
- )
-
- def test_should_skip_jython_class_file(self):
- self.assertEqual(
- self._callFUT('afilename$py.class'),
- 'Skipping $py.class file %(filename)s',
- )
-
- def test_should_skip_version_control_directory(self):
- for name in ('CVS', '_darcs'):
- self.assertEqual(
- self._callFUT(name),
- 'Skipping version control directory %(filename)s',
- )
-
- def test_valid_file_is_not_skipped(self):
- self.assertEqual(self._callFUT('a_filename'), None)
-
-
-class RawInputMockObject(object):
- count = 0
-
- def __init__(self, fake_input):
- self.input = fake_input
- self.count = 0
-
- def __call__(self, prompt):
- # Don't cycle endlessly.
- self.count += 1
- if self.count > 1:
- return 'y'
- else:
- return self.input
-
-
-class Test_query_interactive(unittest.TestCase):
- def setUp(self):
- import tempfile
- from pyramid.compat import NativeIO
-
- self.dirname = tempfile.mkdtemp()
- self.out = NativeIO()
- self.fixturetuple = ('tests.test_scaffolds', 'fixture_scaffold')
- self.src_content = """\
-These are not the droids
-that you are looking for."""
- self.dest_content = """\
-These are the droids for
-whom you are looking;
-now you have found them."""
- self.src_fn = os.path.join(self.dirname, 'mypackage', '__init__.py')
- self.dest_fn = os.path.join(self.dirname, 'mypackage', '__init__.py')
- # query_interactive is only normally executed when the destination
- # is discovered to be already occupied by existing files, so ...
- # create the required occupancy.
- from pyramid.scaffolds.copydir import copy_dir
-
- copy_dir(
- self.fixturetuple,
- self.dirname,
- {'package': 'mypackage'},
- 0,
- False,
- template_renderer=dummy_template_renderer,
- )
-
- def tearDown(self):
- import shutil
-
- shutil.rmtree(self.dirname, ignore_errors=True)
- self.out.close()
-
- def _callFUT(self, *arg, **kw):
- from pyramid.scaffolds.copydir import query_interactive
-
- return query_interactive(*arg, **kw)
-
- def test_query_interactive_0y(self):
- from pyramid.scaffolds import copydir
-
- copydir.input_ = RawInputMockObject("y")
- self._callFUT(
- self.src_fn,
- self.dest_fn,
- self.src_content,
- self.dest_content,
- simulate=False,
- out_=self.out,
- )
- self.assertTrue("Replace" in self.out.getvalue())
-
- def test_query_interactive_1n(self):
- from pyramid.scaffolds import copydir
-
- copydir.input_ = RawInputMockObject("n")
- self._callFUT(
- self.src_fn,
- self.dest_fn,
- self.src_content,
- '\n'.join(self.dest_content.split('\n')[:-1]),
- simulate=False,
- out_=self.out,
- )
- self.assertTrue("Replace" in self.out.getvalue())
-
- def test_query_interactive_2b(self):
- from pyramid.scaffolds import copydir
-
- copydir.input_ = RawInputMockObject("b")
- with open(
- os.path.join(self.dirname, 'mypackage', '__init__.py.bak'), 'w'
- ) as fp:
- fp.write("")
- fp.close()
- self._callFUT(
- self.src_fn,
- self.dest_fn,
- self.dest_content,
- self.src_content,
- simulate=False,
- out_=self.out,
- )
- self.assertTrue("Backing up" in self.out.getvalue())
-
- def test_query_interactive_3d(self):
- from pyramid.scaffolds import copydir
-
- copydir.input_ = RawInputMockObject("d")
- self._callFUT(
- self.src_fn,
- self.dest_fn,
- self.dest_content,
- self.src_content,
- simulate=False,
- out_=self.out,
- )
- output = self.out.getvalue()
- # The useful text in self.out gets wiped out on the second
- # call to raw_input, otherwise the test could be made
- # more usefully precise...
- # print("3d", output)
- # self.assertTrue("@@" in output, output)
- self.assertTrue("Replace" in output)
-
- def test_query_interactive_4dc(self):
- from pyramid.scaffolds import copydir
-
- copydir.input_ = RawInputMockObject("dc")
- self._callFUT(
- self.src_fn,
- self.dest_fn,
- self.dest_content,
- self.src_content,
- simulate=False,
- out_=self.out,
- )
- output = self.out.getvalue()
- # The useful text in self.out gets wiped out on the second
- # call to raw_input, otherwise, the test could be made
- # more usefully precise...
- # print("4dc", output)
- # self.assertTrue("***" in output, output)
- self.assertTrue("Replace" in output)
-
- def test_query_interactive_5allbad(self):
- from pyramid.scaffolds import copydir
-
- copydir.input_ = RawInputMockObject("all z")
- self._callFUT(
- self.src_fn,
- self.dest_fn,
- self.src_content,
- self.dest_content,
- simulate=False,
- out_=self.out,
- )
- output = self.out.getvalue()
- # The useful text in self.out gets wiped out on the second
- # call to raw_input, otherwise the test could be made
- # more usefully precise...
- # print("5allbad", output)
- # self.assertTrue("Responses" in output, output)
- self.assertTrue("Replace" in output)
-
- def test_query_interactive_6all(self):
- from pyramid.scaffolds import copydir
-
- copydir.input_ = RawInputMockObject("all b")
- self._callFUT(
- self.src_fn,
- self.dest_fn,
- self.src_content,
- self.dest_content,
- simulate=False,
- out_=self.out,
- )
- output = self.out.getvalue()
- # The useful text in self.out gets wiped out on the second
- # call to raw_input, otherwise the test could be made
- # more usefully precise...
- # print("6all", output)
- # self.assertTrue("Responses" in output, output)
- self.assertTrue("Replace" in output)
-
-
-def dummy_template_renderer(content, v, filename=None):
- return content
diff --git a/tests/test_scaffolds/test_init.py b/tests/test_scaffolds/test_init.py
deleted file mode 100644
index 6238915f6..000000000
--- a/tests/test_scaffolds/test_init.py
+++ /dev/null
@@ -1,22 +0,0 @@
-import unittest
-
-
-class TestPyramidTemplate(unittest.TestCase):
- def _makeOne(self):
- from pyramid.scaffolds import PyramidTemplate
-
- return PyramidTemplate('name')
-
- def test_pre(self):
- inst = self._makeOne()
- vars = {'package': 'one'}
- inst.pre('command', 'output dir', vars)
- self.assertTrue(vars['random_string'])
- self.assertEqual(vars['package_logger'], 'one')
-
- def test_pre_root(self):
- inst = self._makeOne()
- vars = {'package': 'root'}
- inst.pre('command', 'output dir', vars)
- self.assertTrue(vars['random_string'])
- self.assertEqual(vars['package_logger'], 'app')
diff --git a/tests/test_scaffolds/test_template.py b/tests/test_scaffolds/test_template.py
deleted file mode 100644
index fc6b9f371..000000000
--- a/tests/test_scaffolds/test_template.py
+++ /dev/null
@@ -1,174 +0,0 @@
-import unittest
-
-from pyramid.compat import bytes_
-
-
-class TestTemplate(unittest.TestCase):
- def _makeOne(self, name='whatever'):
- from pyramid.scaffolds.template import Template
-
- return Template(name)
-
- def test_render_template_success(self):
- inst = self._makeOne()
- result = inst.render_template('{{a}} {{b}}', {'a': '1', 'b': '2'})
- self.assertEqual(result, bytes_('1 2'))
-
- def test_render_template_expr_failure(self):
- inst = self._makeOne()
- self.assertRaises(
- AttributeError,
- inst.render_template,
- '{{a.foo}}',
- {'a': '1', 'b': '2'},
- )
-
- def test_render_template_expr_success(self):
- inst = self._makeOne()
- result = inst.render_template('{{a.lower()}}', {'a': 'A'})
- self.assertEqual(result, b'a')
-
- def test_render_template_expr_success_via_pipe(self):
- inst = self._makeOne()
- result = inst.render_template('{{b|c|a.lower()}}', {'a': 'A'})
- self.assertEqual(result, b'a')
-
- def test_render_template_expr_success_via_pipe2(self):
- inst = self._makeOne()
- result = inst.render_template('{{b|a.lower()|c}}', {'a': 'A'})
- self.assertEqual(result, b'a')
-
- def test_render_template_expr_value_is_None(self):
- inst = self._makeOne()
- result = inst.render_template('{{a}}', {'a': None})
- self.assertEqual(result, b'')
-
- def test_render_template_with_escaped_double_braces(self):
- inst = self._makeOne()
- result = inst.render_template(
- '{{a}} {{b}} \\{\\{a\\}\\} \\{\\{c\\}\\}', {'a': '1', 'b': '2'}
- )
- self.assertEqual(result, bytes_('1 2 {{a}} {{c}}'))
-
- def test_render_template_with_breaking_escaped_braces(self):
- inst = self._makeOne()
- result = inst.render_template(
- '{{a}} {{b}} \\{\\{a\\} \\{b\\}\\}', {'a': '1', 'b': '2'}
- )
- self.assertEqual(result, bytes_('1 2 \\{\\{a\\} \\{b\\}\\}'))
-
- def test_render_template_with_escaped_single_braces(self):
- inst = self._makeOne()
- result = inst.render_template(
- '{{a}} {{b}} \\{a\\} \\{b', {'a': '1', 'b': '2'}
- )
- self.assertEqual(result, bytes_('1 2 \\{a\\} \\{b'))
-
- def test_module_dir(self):
- import sys
- import pkg_resources
-
- package = sys.modules['pyramid.scaffolds.template']
- path = pkg_resources.resource_filename(package.__name__, '')
- inst = self._makeOne()
- result = inst.module_dir()
- self.assertEqual(result, path)
-
- def test_template_dir__template_dir_is_None(self):
- inst = self._makeOne()
- self.assertRaises(AssertionError, inst.template_dir)
-
- def test_template_dir__template_dir_is_tuple(self):
- inst = self._makeOne()
- inst._template_dir = ('a', 'b')
- self.assertEqual(inst.template_dir(), ('a', 'b'))
-
- def test_template_dir__template_dir_is_not_None(self):
- import os
- import sys
- import pkg_resources
-
- package = sys.modules['pyramid.scaffolds.template']
- path = pkg_resources.resource_filename(package.__name__, '')
- inst = self._makeOne()
- inst._template_dir = 'foo'
- result = inst.template_dir()
- self.assertEqual(result, os.path.join(path, 'foo'))
-
- def test_write_files_path_exists(self):
- import os
- import sys
- import pkg_resources
-
- package = sys.modules['pyramid.scaffolds.template']
- path = pkg_resources.resource_filename(package.__name__, '')
- inst = self._makeOne()
- inst._template_dir = 'foo'
- inst.exists = lambda *arg: True
- copydir = DummyCopydir()
- inst.copydir = copydir
- command = DummyCommand()
- inst.write_files(command, 'output dir', {'a': 1})
- self.assertEqual(copydir.template_dir, os.path.join(path, 'foo'))
- self.assertEqual(copydir.output_dir, 'output dir')
- self.assertEqual(copydir.vars, {'a': 1})
- self.assertEqual(
- copydir.kw,
- {
- 'template_renderer': inst.render_template,
- 'indent': 1,
- 'verbosity': 1,
- 'simulate': False,
- 'overwrite': False,
- 'interactive': False,
- },
- )
-
- def test_write_files_path_missing(self):
- L = []
- inst = self._makeOne()
- inst._template_dir = 'foo'
- inst.exists = lambda *arg: False
- inst.out = lambda *arg: None
- inst.makedirs = lambda dir: L.append(dir)
- copydir = DummyCopydir()
- inst.copydir = copydir
- command = DummyCommand()
- inst.write_files(command, 'output dir', {'a': 1})
- self.assertEqual(L, ['output dir'])
-
- def test_run(self):
- L = []
- inst = self._makeOne()
- inst._template_dir = 'foo'
- inst.exists = lambda *arg: False
- inst.out = lambda *arg: None
- inst.makedirs = lambda dir: L.append(dir)
- copydir = DummyCopydir()
- inst.copydir = copydir
- command = DummyCommand()
- inst.run(command, 'output dir', {'a': 1})
- self.assertEqual(L, ['output dir'])
-
- def test_check_vars(self):
- inst = self._makeOne()
- self.assertRaises(RuntimeError, inst.check_vars, 'one', 'two')
-
-
-class DummyCopydir(object):
- def copy_dir(self, template_dir, output_dir, vars, **kw):
- self.template_dir = template_dir
- self.output_dir = output_dir
- self.vars = vars
- self.kw = kw
-
-
-class DummyArgs(object):
- simulate = False
- overwrite = False
- interactive = False
-
-
-class DummyCommand(object):
- args = DummyArgs()
- verbosity = 1
diff --git a/tests/test_scripts/test_pcreate.py b/tests/test_scripts/test_pcreate.py
deleted file mode 100644
index 6ac082b41..000000000
--- a/tests/test_scripts/test_pcreate.py
+++ /dev/null
@@ -1,409 +0,0 @@
-import unittest
-
-
-class TestPCreateCommand(unittest.TestCase):
- def setUp(self):
- from pyramid.compat import NativeIO
-
- self.out_ = NativeIO()
-
- def out(self, msg):
- self.out_.write(msg)
-
- def _getTargetClass(self):
- from pyramid.scripts.pcreate import PCreateCommand
-
- return PCreateCommand
-
- def _makeOne(self, *args, **kw):
- effargs = ['pcreate']
- effargs.extend(args)
- tgt_class = kw.pop('target_class', self._getTargetClass())
- cmd = tgt_class(effargs, **kw)
- cmd.out = self.out
- return cmd
-
- def test_run_show_scaffolds_exist(self):
- cmd = self._makeOne('-l')
- result = cmd.run()
- self.assertEqual(result, 0)
- out = self.out_.getvalue()
- self.assertTrue(out.count('Available scaffolds'))
-
- def test_run_show_scaffolds_none_exist(self):
- cmd = self._makeOne('-l')
- cmd.scaffolds = []
- result = cmd.run()
- self.assertEqual(result, 0)
- out = self.out_.getvalue()
- self.assertTrue(out.count('No scaffolds available'))
-
- def test_run_no_scaffold_no_args(self):
- cmd = self._makeOne(quiet=True)
- result = cmd.run()
- self.assertEqual(result, 2)
-
- def test_run_no_scaffold_name(self):
- cmd = self._makeOne('dummy')
- result = cmd.run()
- self.assertEqual(result, 2)
- out = self.out_.getvalue()
- self.assertTrue(
- out.count('You must provide at least one scaffold name')
- )
-
- def test_no_project_name(self):
- cmd = self._makeOne('-s', 'dummy')
- result = cmd.run()
- self.assertEqual(result, 2)
- out = self.out_.getvalue()
- self.assertTrue(out.count('You must provide a project name'))
-
- def test_unknown_scaffold_name(self):
- cmd = self._makeOne('-s', 'dummyXX', 'distro')
- result = cmd.run()
- self.assertEqual(result, 2)
- out = self.out_.getvalue()
- self.assertTrue(out.count('Unavailable scaffolds'))
-
- def test_known_scaffold_single_rendered(self):
- import os
-
- cmd = self._makeOne('-s', 'dummy', 'Distro')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.1")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.output_dir,
- os.path.normpath(os.path.join(os.getcwd(), 'Distro')),
- )
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.1',
- 'pyramid_docs_branch': '0.1-branch',
- },
- )
-
- def test_scaffold_with_package_name(self):
- import os
-
- cmd = self._makeOne(
- '-s', 'dummy', '--package-name', 'dummy_package', 'Distro'
- )
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.1")
- result = cmd.run()
-
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.output_dir,
- os.path.normpath(os.path.join(os.getcwd(), 'Distro')),
- )
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'dummy_package',
- 'package': 'dummy_package',
- 'pyramid_version': '0.1',
- 'pyramid_docs_branch': '0.1-branch',
- },
- )
-
- def test_scaffold_with_hyphen_in_project_name(self):
- import os
-
- cmd = self._makeOne('-s', 'dummy', 'Distro-')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.1")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.output_dir,
- os.path.normpath(os.path.join(os.getcwd(), 'Distro-')),
- )
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro-',
- 'egg': 'Distro_',
- 'package': 'distro_',
- 'pyramid_version': '0.1',
- 'pyramid_docs_branch': '0.1-branch',
- },
- )
-
- def test_known_scaffold_absolute_path(self):
- import os
-
- path = os.path.abspath('Distro')
- cmd = self._makeOne('-s', 'dummy', path)
- cmd.pyramid_dist = DummyDist("0.1")
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.1")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.output_dir,
- os.path.normpath(os.path.join(os.getcwd(), 'Distro')),
- )
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.1',
- 'pyramid_docs_branch': '0.1-branch',
- },
- )
-
- def test_known_scaffold_multiple_rendered(self):
- import os
-
- cmd = self._makeOne('-s', 'dummy1', '-s', 'dummy2', 'Distro')
- scaffold1 = DummyScaffold('dummy1')
- scaffold2 = DummyScaffold('dummy2')
- cmd.scaffolds = [scaffold1, scaffold2]
- cmd.pyramid_dist = DummyDist("0.1")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold1.output_dir,
- os.path.normpath(os.path.join(os.getcwd(), 'Distro')),
- )
- self.assertEqual(
- scaffold1.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.1',
- 'pyramid_docs_branch': '0.1-branch',
- },
- )
- self.assertEqual(
- scaffold2.output_dir,
- os.path.normpath(os.path.join(os.getcwd(), 'Distro')),
- )
- self.assertEqual(
- scaffold2.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.1',
- 'pyramid_docs_branch': '0.1-branch',
- },
- )
-
- def test_known_scaffold_with_path_as_project_target_rendered(self):
- import os
-
- cmd = self._makeOne('-s', 'dummy', '/tmp/foo/Distro/')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.1")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.output_dir,
- os.path.normpath(os.path.join(os.getcwd(), '/tmp/foo/Distro')),
- )
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.1',
- 'pyramid_docs_branch': '0.1-branch',
- },
- )
-
- def test_scaffold_with_prod_pyramid_version(self):
- cmd = self._makeOne('-s', 'dummy', 'Distro')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.2")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.2',
- 'pyramid_docs_branch': '0.2-branch',
- },
- )
-
- def test_scaffold_with_prod_pyramid_long_version(self):
- cmd = self._makeOne('-s', 'dummy', 'Distro')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.2.1")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.2.1',
- 'pyramid_docs_branch': '0.2-branch',
- },
- )
-
- def test_scaffold_with_prod_pyramid_unparsable_version(self):
- cmd = self._makeOne('-s', 'dummy', 'Distro')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("abc")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': 'abc',
- 'pyramid_docs_branch': 'latest',
- },
- )
-
- def test_scaffold_with_dev_pyramid_version(self):
- cmd = self._makeOne('-s', 'dummy', 'Distro')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.12dev")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.12dev',
- 'pyramid_docs_branch': 'master',
- },
- )
-
- def test_scaffold_with_dev_pyramid_long_version(self):
- cmd = self._makeOne('-s', 'dummy', 'Distro')
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.10.1dev")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Distro',
- 'egg': 'Distro',
- 'package': 'distro',
- 'pyramid_version': '0.10.1dev',
- 'pyramid_docs_branch': 'master',
- },
- )
-
- def test_confirm_override_conflicting_name(self):
- from pyramid.scripts.pcreate import PCreateCommand
-
- class YahInputPCreateCommand(PCreateCommand):
- def confirm_bad_name(self, pkg_name):
- return True
-
- cmd = self._makeOne(
- '-s', 'dummy', 'Unittest', target_class=YahInputPCreateCommand
- )
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.10.1dev")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Unittest',
- 'egg': 'Unittest',
- 'package': 'unittest',
- 'pyramid_version': '0.10.1dev',
- 'pyramid_docs_branch': 'master',
- },
- )
-
- def test_force_override_conflicting_name(self):
- cmd = self._makeOne(
- '-s', 'dummy', 'Unittest', '--ignore-conflicting-name'
- )
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.10.1dev")
- result = cmd.run()
- self.assertEqual(result, 0)
- self.assertEqual(
- scaffold.vars,
- {
- 'project': 'Unittest',
- 'egg': 'Unittest',
- 'package': 'unittest',
- 'pyramid_version': '0.10.1dev',
- 'pyramid_docs_branch': 'master',
- },
- )
-
- def test_force_override_site_name(self):
- from pyramid.scripts.pcreate import PCreateCommand
-
- class NayInputPCreateCommand(PCreateCommand):
- def confirm_bad_name(self, pkg_name):
- return False
-
- cmd = self._makeOne(
- '-s', 'dummy', 'Site', target_class=NayInputPCreateCommand
- )
- scaffold = DummyScaffold('dummy')
- cmd.scaffolds = [scaffold]
- cmd.pyramid_dist = DummyDist("0.10.1dev")
- result = cmd.run()
- self.assertEqual(result, 2)
-
-
-class Test_main(unittest.TestCase):
- def _callFUT(self, argv):
- from pyramid.scripts.pcreate import main
-
- return main(argv, quiet=True)
-
- def test_it(self):
- result = self._callFUT(['pcreate'])
- self.assertEqual(result, 2)
-
-
-class DummyScaffold(object):
- def __init__(self, name):
- self.name = name
-
- def run(self, command, output_dir, vars):
- self.command = command
- self.output_dir = output_dir
- self.vars = vars
-
-
-class DummyDist(object):
- def __init__(self, version):
- self.version = version
diff --git a/tox.ini b/tox.ini
index cda08f853..5bf19d2a7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -25,42 +25,6 @@ commands =
extras =
testing
-[testenv:py27-scaffolds]
-basepython = python2.7
-commands =
- python src/pyramid/scaffolds/tests.py
-deps = virtualenv
-
-[testenv:py34-scaffolds]
-basepython = python3.4
-commands =
- python src/pyramid/scaffolds/tests.py
-deps = virtualenv
-
-[testenv:py35-scaffolds]
-basepython = python3.5
-commands =
- python src/pyramid/scaffolds/tests.py
-deps = virtualenv
-
-[testenv:py36-scaffolds]
-basepython = python3.6
-commands =
- python src/pyramid/scaffolds/tests.py
-deps = virtualenv
-
-[testenv:py37-scaffolds]
-basepython = python3.7
-commands =
- python src/pyramid/scaffolds/tests.py
-deps = virtualenv
-
-[testenv:pypy-scaffolds]
-basepython = pypy
-commands =
- python src/pyramid/scaffolds/tests.py
-deps = virtualenv
-
[testenv:lint]
skip_install = true
basepython = python3.6