Hello community,
here is the log from the commit of package python-plaster-pastedeploy for
openSUSE:Factory checked in at 2019-06-06 18:15:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-plaster-pastedeploy (Old)
and /work/SRC/openSUSE:Factory/.python-plaster-pastedeploy.new.4811 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-plaster-pastedeploy"
Thu Jun 6 18:15:54 2019 rev:2 rq:707131 version:0.7
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-plaster-pastedeploy/python-plaster-pastedeploy.changes
2017-09-25 13:57:58.211043591 +0200
+++
/work/SRC/openSUSE:Factory/.python-plaster-pastedeploy.new.4811/python-plaster-pastedeploy.changes
2019-06-06 18:15:55.628710542 +0200
@@ -1,0 +2,7 @@
+Mon Jun 3 10:49:58 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 0.7:
+ * distribute tests/license/documentation
+ * Many bugfixes around
+
+-------------------------------------------------------------------
Old:
----
plaster_pastedeploy-0.4.1.tar.gz
New:
----
plaster_pastedeploy-0.7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-plaster-pastedeploy.spec ++++++
--- /var/tmp/diff_new_pack.E2rnu1/_old 2019-06-06 18:15:57.068710119 +0200
+++ /var/tmp/diff_new_pack.E2rnu1/_new 2019-06-06 18:15:57.096710111 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-plaster-pastedeploy
#
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,27 +12,29 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-plaster-pastedeploy
-Version: 0.4.1
+Version: 0.7
Release: 0
Summary: A loader implementing the PasteDeploy syntax to be used by
plaster
License: MIT
Group: Development/Languages/Python
-Url: https://github.com/Pylons/plaster_pastedeploy
+URL: https://github.com/Pylons/plaster_pastedeploy
Source0:
https://files.pythonhosted.org/packages/source/p/plaster_pastedeploy/plaster_pastedeploy-%{version}.tar.gz
+BuildRequires: %{python_module PasteDeploy >= 2.0}
+BuildRequires: %{python_module plaster >= 0.5}
+BuildRequires: %{python_module pytest}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-Requires: python-PasteDeploy >= 1.5.0
+Requires: python-PasteDeploy >= 2.0
Requires: python-plaster >= 0.5
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-BuildArch: noarch
Provides: python-plaster_pastedeploy = %{version}
+BuildArch: noarch
%python_subpackages
%description
@@ -50,11 +52,14 @@
%install
%python_install
-%python_expand %fdupes -s %{buildroot}%{$python_sitelib}
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
+
+%check
+%pytest
%files %{python_files}
-%defattr(-,root,root,-)
-%doc
+%doc CHANGES.rst
+%license LICENSE.txt
%{python_sitelib}/*
%changelog
++++++ plaster_pastedeploy-0.4.1.tar.gz -> plaster_pastedeploy-0.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/.flake8
new/plaster_pastedeploy-0.7/.flake8
--- old/plaster_pastedeploy-0.4.1/.flake8 1970-01-01 01:00:00.000000000
+0100
+++ new/plaster_pastedeploy-0.7/.flake8 2019-04-12 07:44:18.000000000 +0200
@@ -0,0 +1,12 @@
+[flake8]
+max-line-length = 79
+ignore =
+ # E203: whitespace before ':' (black fails to be PEP8 compliant)
+ E203
+ # E731: do not assign a lambda expression, use a def
+ E731
+ # W503: line break before binary operator (flake8 is not PEP8 compliant)
+ W503
+ # W504: line break after binary operator (flake8 is not PEP8 compliant)
+ W504
+show-source = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/.travis.yml
new/plaster_pastedeploy-0.7/.travis.yml
--- old/plaster_pastedeploy-0.4.1/.travis.yml 2017-06-29 07:28:23.000000000
+0200
+++ new/plaster_pastedeploy-0.7/.travis.yml 2019-04-12 07:58:21.000000000
+0200
@@ -8,6 +8,10 @@
matrix:
include:
+ - python: '3.7'
+ env: TOXENV=py37
+ dist: xenial
+ sudo: true
- python: '3.6'
env: TOXENV=py36
- python: '3.5'
@@ -18,9 +22,11 @@
env: TOXENV=py27
- python: 'pypy'
env: TOXENV=pypy
+ - python: 'pypy3'
+ env: TOXENV=pypy3
- python: '3.5'
env: TOXENV=py27,py35,coverage
- - python: '3.5'
+ - python: '3.6'
env: TOXENV=lint
install: pip install tox
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/CHANGES.rst
new/plaster_pastedeploy-0.7/CHANGES.rst
--- old/plaster_pastedeploy-0.4.1/CHANGES.rst 2017-07-11 06:37:44.000000000
+0200
+++ new/plaster_pastedeploy-0.7/CHANGES.rst 2019-04-12 07:58:54.000000000
+0200
@@ -1,3 +1,35 @@
+0.7 (2019-04-12)
+================
+
+- Support Python 3.7.
+
+- Depend on ``pastedeploy >= 2.0`` to enforce new behavior when overriding
+ defaults. Default values passed into the loader will now override values in
+ the ``[DEFAULT]`` section.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/17
+
+0.6 (2018-07-11)
+================
+
+- Change ``setup_logging`` to invoke ``logging.config.fileConfig`` with
+ ``disable_existing_loggers=False`` to avoid disabling any loggers that were
+ imported prior to configuration of the logging system.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/16
+
+0.5 (2018-03-29)
+================
+
+- Removed environment variable support entirely for now. The feature requires
+ bugfixes upstream in PasteDeploy which have not been done yet and this was
+ breaking people's environments so it is gone for now.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/15
+
+0.4.2 (2017-11-20)
+==================
+
+- Fix ``ConfigDict.copy`` so that it works.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/14
+
0.4.1 (2017-07-10)
==================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/CONTRIBUTORS.txt
new/plaster_pastedeploy-0.7/CONTRIBUTORS.txt
--- old/plaster_pastedeploy-0.4.1/CONTRIBUTORS.txt 2017-05-22
22:46:14.000000000 +0200
+++ new/plaster_pastedeploy-0.7/CONTRIBUTORS.txt 2017-11-21
05:31:46.000000000 +0100
@@ -107,3 +107,5 @@
------------
- Michael Merickel (2016-06-12)
+- Steve Piercy (2017-08-31)
+- Geoffrey T. Dairiki (2017-11-16)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/MANIFEST.in
new/plaster_pastedeploy-0.7/MANIFEST.in
--- old/plaster_pastedeploy-0.4.1/MANIFEST.in 2017-06-29 07:28:59.000000000
+0200
+++ new/plaster_pastedeploy-0.7/MANIFEST.in 2019-04-12 08:05:20.000000000
+0200
@@ -7,7 +7,8 @@
include CONTRIBUTING.rst
include CONTRIBUTORS.txt
-include .coveragerc
-include tox.ini appveyor.yml .travis.yml rtd.txt
+include pyproject.toml
+include .coveragerc .flake8 pytest.ini
+include tox.ini appveyor.yml .travis.yml
recursive-exclude * __pycache__ *.py[cod]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/PKG-INFO
new/plaster_pastedeploy-0.7/PKG-INFO
--- old/plaster_pastedeploy-0.4.1/PKG-INFO 2017-07-11 06:43:30.000000000
+0200
+++ new/plaster_pastedeploy-0.7/PKG-INFO 2019-04-12 08:21:03.000000000
+0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
Name: plaster_pastedeploy
-Version: 0.4.1
+Version: 0.7
Summary: A loader implementing the PasteDeploy syntax to be used by plaster.
Home-page: https://github.com/Pylons/plaster_pastedeploy
Author: Hunter Senft-Grupp
@@ -75,33 +75,41 @@
- ``egg:MyApp?debug=false#foo``
- Environment Variables
- ---------------------
+ .. _PasteDeploy: https://pastedeploy.readthedocs.io/en/latest/
+ .. _plaster: https://docs.pylonsproject.org/projects/plaster/en/latest/
- **This feature is not supported on Python 2.**
- This binding extends ``pastedeploy`` to inject environ variables as
defaults
- which are available to use in the INI file. Each ``os.environ`` key is
prefixed
- with ``ENV_`` and added as a default.
+ 0.7 (2019-04-12)
+ ================
- For example:
+ - Support Python 3.7.
- .. code-block:: ini
+ - Depend on ``pastedeploy >= 2.0`` to enforce new behavior when
overriding
+ defaults. Default values passed into the loader will now override
values in
+ the ``[DEFAULT]`` section.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/17
- [app:main]
- debug = %(ENV_APP_DEBUG)s
+ 0.6 (2018-07-11)
+ ================
- The only thing to be aware of here is that there is no fallback. The
INI file
- will fail to parse if the environment variable is not set. The app may
be run
- like so:
+ - Change ``setup_logging`` to invoke ``logging.config.fileConfig`` with
+ ``disable_existing_loggers=False`` to avoid disabling any loggers
that were
+ imported prior to configuration of the logging system.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/16
- .. code-block:: bash
+ 0.5 (2018-03-29)
+ ================
- $ APP_DEBUG=true env/bin/pserve development.ini
+ - Removed environment variable support entirely for now. The feature
requires
+ bugfixes upstream in PasteDeploy which have not been done yet and
this was
+ breaking people's environments so it is gone for now.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/15
- .. _PasteDeploy: http://pastedeploy.readthedocs.io/en/latest/
- .. _plaster: http://docs.pylonsproject.org/projects/plaster/en/latest/
+ 0.4.2 (2017-11-20)
+ ==================
+ - Fix ``ConfigDict.copy`` so that it works.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/14
0.4.1 (2017-07-10)
==================
@@ -197,6 +205,8 @@
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*
+Provides-Extra: testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/README.rst
new/plaster_pastedeploy-0.7/README.rst
--- old/plaster_pastedeploy-0.4.1/README.rst 2017-07-11 06:19:00.000000000
+0200
+++ new/plaster_pastedeploy-0.7/README.rst 2019-04-12 07:34:27.000000000
+0200
@@ -67,29 +67,5 @@
- ``egg:MyApp?debug=false#foo``
-Environment Variables
----------------------
-
-**This feature is not supported on Python 2.**
-
-This binding extends ``pastedeploy`` to inject environ variables as defaults
-which are available to use in the INI file. Each ``os.environ`` key is prefixed
-with ``ENV_`` and added as a default.
-
-For example:
-
-.. code-block:: ini
-
- [app:main]
- debug = %(ENV_APP_DEBUG)s
-
-The only thing to be aware of here is that there is no fallback. The INI file
-will fail to parse if the environment variable is not set. The app may be run
-like so:
-
-.. code-block:: bash
-
- $ APP_DEBUG=true env/bin/pserve development.ini
-
-.. _PasteDeploy: http://pastedeploy.readthedocs.io/en/latest/
-.. _plaster: http://docs.pylonsproject.org/projects/plaster/en/latest/
+.. _PasteDeploy: https://pastedeploy.readthedocs.io/en/latest/
+.. _plaster: https://docs.pylonsproject.org/projects/plaster/en/latest/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/pyproject.toml
new/plaster_pastedeploy-0.7/pyproject.toml
--- old/plaster_pastedeploy-0.4.1/pyproject.toml 1970-01-01
01:00:00.000000000 +0100
+++ new/plaster_pastedeploy-0.7/pyproject.toml 2019-04-12 07:43:58.000000000
+0200
@@ -0,0 +1,28 @@
+[build-system]
+requires = ["setuptools", "wheel"]
+
+[tool.black]
+line-length = 79
+skip-string-normalization = true
+py36 = false
+exclude = '''
+/(
+ \.git
+ | \.mypy_cache
+ | \.tox
+ | \.venv
+ | \.pytest_cache
+ | dist
+ | build
+ | docs
+)/
+'''
+
+ # This next section only exists for people that have their editors
+# automatically call isort, black already sorts entries on its own when run.
+[tool.isort]
+multi_line_output = 3
+include_trailing_comma = true
+force_grid_wrap = 0
+combine_as_imports = true
+line_length = 79
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/pytest.ini
new/plaster_pastedeploy-0.7/pytest.ini
--- old/plaster_pastedeploy-0.4.1/pytest.ini 1970-01-01 01:00:00.000000000
+0100
+++ new/plaster_pastedeploy-0.7/pytest.ini 2019-04-12 07:43:05.000000000
+0200
@@ -0,0 +1,5 @@
+[pytest]
+python_files = test_*.py
+testpaths =
+ src/plaster_pastedeploy
+ tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/setup.cfg
new/plaster_pastedeploy-0.7/setup.cfg
--- old/plaster_pastedeploy-0.4.1/setup.cfg 2017-07-11 06:43:30.000000000
+0200
+++ new/plaster_pastedeploy-0.7/setup.cfg 2019-04-12 08:21:03.000000000
+0200
@@ -1,16 +1,9 @@
-[wheel]
+[bdist_wheel]
universal = 1
[metadata]
license_file = LICENSE.txt
-[flake8]
-exclude =
- tests/fake_packages,
- tests/sample_configs,
-show-source = True
-max-line-length = 80
-
[check-manifest]
ignore =
.gitignore
@@ -21,12 +14,6 @@
ignore-bad-ideas =
tests/*
-[tool:pytest]
-python_files = test_*.py
-testpaths =
- src/plaster_pastedeploy
- tests
-
[egg_info]
tag_build =
tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/setup.py
new/plaster_pastedeploy-0.7/setup.py
--- old/plaster_pastedeploy-0.4.1/setup.py 2017-07-11 06:22:19.000000000
+0200
+++ new/plaster_pastedeploy-0.7/setup.py 2019-04-12 07:58:41.000000000
+0200
@@ -1,70 +1,68 @@
from setuptools import setup, find_packages
+
def readfile(name):
with open(name) as f:
return f.read()
-readme = readfile('README.rst')
-changes = readfile('CHANGES.rst')
+
+readme = readfile("README.rst")
+changes = readfile("CHANGES.rst")
install_requires = [
- 'PasteDeploy >= 1.5.0', # py3 compat
- 'plaster >= 0.5', # file schemes
+ "PasteDeploy >= 2.0", # default override order has been changed in
version 2
+ "plaster >= 0.5", # file schemes
]
-tests_require = [
- 'pytest',
- 'pytest-cov',
-]
+tests_require = ["pytest", "pytest-cov"]
setup(
- name='plaster_pastedeploy',
- version='0.4.1',
+ name="plaster_pastedeploy",
+ version="0.7",
description=(
- 'A loader implementing the PasteDeploy syntax to be used by plaster.'
+ "A loader implementing the PasteDeploy syntax to be used by plaster."
),
- long_description=readme + '\n\n' + changes,
- author='Hunter Senft-Grupp',
- author_email='[email protected]',
- url='https://github.com/Pylons/plaster_pastedeploy',
- packages=find_packages('src', exclude=['tests']),
- package_dir={'': 'src'},
+ long_description=readme + "\n\n" + changes,
+ author="Hunter Senft-Grupp",
+ author_email="[email protected]",
+ url="https://github.com/Pylons/plaster_pastedeploy",
+ packages=find_packages("src", exclude=["tests"]),
+ package_dir={"": "src"},
include_package_data=True,
- python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',
+ python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*",
install_requires=install_requires,
- extras_require={
- 'testing': tests_require,
- },
+ extras_require={"testing": tests_require},
zip_safe=False,
- keywords='plaster pastedeploy plaster_pastedeploy ini config egg',
+ keywords="plaster pastedeploy plaster_pastedeploy ini config egg",
classifiers=[
- 'Development Status :: 5 - Production/Stable',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: MIT License',
- 'Natural Language :: English',
- 'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.4',
- 'Programming Language :: Python :: 3.5',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: Implementation :: CPython',
- 'Programming Language :: Python :: Implementation :: PyPy',
+ "Development Status :: 5 - Production/Stable",
+ "Intended Audience :: Developers",
+ "License :: OSI Approved :: MIT License",
+ "Natural Language :: English",
+ "Programming Language :: Python :: 2",
+ "Programming Language :: Python :: 2.7",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.4",
+ "Programming Language :: Python :: 3.5",
+ "Programming Language :: Python :: 3.6",
+ "Programming Language :: Python :: 3.7",
+ "Programming Language :: Python :: Implementation :: CPython",
+ "Programming Language :: Python :: Implementation :: PyPy",
],
entry_points={
- 'plaster.loader_factory': [
- 'file+ini=plaster_pastedeploy:Loader',
- 'egg=plaster_pastedeploy:Loader',
- 'pastedeploy=plaster_pastedeploy:Loader',
- 'pastedeploy+ini=plaster_pastedeploy:Loader',
- 'pastedeploy+egg=plaster_pastedeploy:Loader',
+ "plaster.loader_factory": [
+ "file+ini=plaster_pastedeploy:Loader",
+ "egg=plaster_pastedeploy:Loader",
+ "pastedeploy=plaster_pastedeploy:Loader",
+ "pastedeploy+ini=plaster_pastedeploy:Loader",
+ "pastedeploy+egg=plaster_pastedeploy:Loader",
],
- 'plaster.wsgi_loader_factory': [
- 'file+ini=plaster_pastedeploy:Loader',
- 'egg=plaster_pastedeploy:Loader',
- 'pastedeploy=plaster_pastedeploy:Loader',
- 'pastedeploy+ini=plaster_pastedeploy:Loader',
- 'pastedeploy+egg=plaster_pastedeploy:Loader',
+ "plaster.wsgi_loader_factory": [
+ "file+ini=plaster_pastedeploy:Loader",
+ "egg=plaster_pastedeploy:Loader",
+ "pastedeploy=plaster_pastedeploy:Loader",
+ "pastedeploy+ini=plaster_pastedeploy:Loader",
+ "pastedeploy+egg=plaster_pastedeploy:Loader",
],
},
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy/__init__.py
new/plaster_pastedeploy-0.7/src/plaster_pastedeploy/__init__.py
--- old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy/__init__.py
2017-07-11 06:42:20.000000000 +0200
+++ new/plaster_pastedeploy-0.7/src/plaster_pastedeploy/__init__.py
2019-04-12 08:02:58.000000000 +0200
@@ -4,12 +4,7 @@
import os
import sys
-from paste.deploy import (
- loadapp,
- loadserver,
- loadfilter,
- appconfig,
-)
+from paste.deploy import loadapp, loadserver, loadfilter, appconfig
import paste.deploy.loadwsgi as loadwsgi
from plaster import ILoader
@@ -22,7 +17,8 @@
# is using so that we can catch the NoSectionError raised by it.
#
# Import the py2 version first to avoid name clash with the configparser
- # module on PyPI. See
https://github.com/Pylons/plaster_pastedeploy/issues/5
+ # module on PyPI.
+ # See https://github.com/Pylons/plaster_pastedeploy/issues/5
from ConfigParser import NoSectionError
else:
from configparser import NoSectionError
@@ -40,13 +36,14 @@
"""
+ filepath = None
+
def __init__(self, uri):
self.uri = uri
- self.pastedeploy_scheme = get_pastedeploy_scheme(uri)
- self.pastedeploy_spec = '{0}:{1}'.format(
- self.pastedeploy_scheme, uri.path)
- if os.path.isabs(uri.path):
- self.relative_to = os.path.dirname(uri.path)
+ scheme = get_pastedeploy_scheme(uri)
+ if scheme == "config":
+ self.filepath = os.path.abspath(uri.path)
+ self.pastedeploy_spec = "{0}:{1}".format(scheme, uri.path)
self.relative_to = os.getcwd()
def get_sections(self):
@@ -56,7 +53,7 @@
:return: A list of the section names in the config file.
"""
- if self.pastedeploy_scheme != 'config':
+ if self.filepath is None:
return []
parser = self._get_parser()
return parser.sections()
@@ -78,7 +75,7 @@
# ``paste.deploy.loadwsgi.ConfigLoader:get_context`` which supports
# "set" and "get" options and filters out any other globals
section = self._maybe_get_default_name(section)
- if self.pastedeploy_scheme != 'config':
+ if self.filepath is None:
return {}
parser = self._get_parser(defaults)
defaults = parser.defaults()
@@ -91,10 +88,10 @@
local_conf = OrderedDict()
get_from_globals = {}
for option, value in raw_items:
- if option.startswith('set '):
+ if option.startswith("set "):
name = option[4:].strip()
defaults[name] = value
- elif option.startswith('get '):
+ elif option.startswith("get "):
name = option[4:].strip()
get_from_globals[name] = value
# insert a value into local_conf to preserve the order
@@ -125,10 +122,12 @@
"""
name = self._maybe_get_default_name(name)
defaults = self._get_defaults(defaults)
- return loadapp(self.pastedeploy_spec,
- name=name,
- relative_to=self.relative_to,
- global_conf=defaults)
+ return loadapp(
+ self.pastedeploy_spec,
+ name=name,
+ relative_to=self.relative_to,
+ global_conf=defaults,
+ )
def get_wsgi_server(self, name=None, defaults=None):
"""
@@ -146,10 +145,12 @@
"""
name = self._maybe_get_default_name(name)
defaults = self._get_defaults(defaults)
- return loadserver(self.pastedeploy_spec,
- name=name,
- relative_to=self.relative_to,
- global_conf=defaults)
+ return loadserver(
+ self.pastedeploy_spec,
+ name=name,
+ relative_to=self.relative_to,
+ global_conf=defaults,
+ )
def get_wsgi_filter(self, name=None, defaults=None):
"""Reads the configuration soruce and finds and loads a WSGI filter
@@ -165,10 +166,12 @@
"""
name = self._maybe_get_default_name(name)
defaults = self._get_defaults(defaults)
- return loadfilter(self.pastedeploy_spec,
- name=name,
- relative_to=self.relative_to,
- global_conf=defaults)
+ return loadfilter(
+ self.pastedeploy_spec,
+ name=name,
+ relative_to=self.relative_to,
+ global_conf=defaults,
+ )
def get_wsgi_app_settings(self, name=None, defaults=None):
"""
@@ -198,7 +201,8 @@
self.pastedeploy_spec,
name=name,
relative_to=self.relative_to,
- global_conf=defaults)
+ global_conf=defaults,
+ )
return ConfigDict(conf.local_conf, conf.global_conf, self)
def setup_logging(self, defaults=None):
@@ -214,28 +218,19 @@
:return: ``None``.
"""
- if 'loggers' in self.get_sections():
+ if "loggers" in self.get_sections():
defaults = self._get_defaults(defaults)
- fileConfig(self.uri.path, defaults)
+ fileConfig(self.uri.path, defaults, disable_existing_loggers=False)
else:
logging.basicConfig()
def _get_defaults(self, defaults=None):
- path = os.path.abspath(self.uri.path)
- result = {
- '__file__': path,
- 'here': os.path.dirname(path),
- }
- if not PY2:
- # Only inject environment variables on py3+ where escaping is
- # supported. On py2 any environment var with contents of the
- # format %(foo)s would break the parser. Unfortunately, this is
- # risky enough to simply not support it.
- result.update({
- 'ENV_' + k: v.replace('%', '%%')
- for k, v in os.environ.items()
- })
+ result = {"__file__": self.filepath}
+ if self.filepath is None:
+ result["here"] = os.getcwd()
+ else:
+ result["here"] = os.path.dirname(self.filepath)
result.update(self.uri.options)
if defaults:
result.update(defaults)
@@ -262,11 +257,11 @@
def get_pastedeploy_scheme(uri):
- scheme = 'config'
- if uri.scheme.endswith('egg'):
- scheme = 'egg'
-# elif uri.scheme.startswith('call'):
-# scheme = 'call'
+ scheme = "config"
+ if uri.scheme.endswith("egg"):
+ scheme = "egg"
+ # elif uri.scheme.startswith('call'):
+ # scheme = 'call'
return scheme
@@ -275,3 +270,11 @@
super(ConfigDict, self).__init__(local_conf)
self.global_conf = global_conf
self.loader = loader
+
+ def __reduce__(self):
+ initargs = list(self.items()), self.global_conf, self.loader
+ return self.__class__, initargs
+
+ def copy(self):
+ callable, args = self.__reduce__()
+ return callable(*args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy.egg-info/PKG-INFO
new/plaster_pastedeploy-0.7/src/plaster_pastedeploy.egg-info/PKG-INFO
--- old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy.egg-info/PKG-INFO
2017-07-11 06:43:30.000000000 +0200
+++ new/plaster_pastedeploy-0.7/src/plaster_pastedeploy.egg-info/PKG-INFO
2019-04-12 08:21:03.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
Name: plaster-pastedeploy
-Version: 0.4.1
+Version: 0.7
Summary: A loader implementing the PasteDeploy syntax to be used by plaster.
Home-page: https://github.com/Pylons/plaster_pastedeploy
Author: Hunter Senft-Grupp
@@ -75,33 +75,41 @@
- ``egg:MyApp?debug=false#foo``
- Environment Variables
- ---------------------
+ .. _PasteDeploy: https://pastedeploy.readthedocs.io/en/latest/
+ .. _plaster: https://docs.pylonsproject.org/projects/plaster/en/latest/
- **This feature is not supported on Python 2.**
- This binding extends ``pastedeploy`` to inject environ variables as
defaults
- which are available to use in the INI file. Each ``os.environ`` key is
prefixed
- with ``ENV_`` and added as a default.
+ 0.7 (2019-04-12)
+ ================
- For example:
+ - Support Python 3.7.
- .. code-block:: ini
+ - Depend on ``pastedeploy >= 2.0`` to enforce new behavior when
overriding
+ defaults. Default values passed into the loader will now override
values in
+ the ``[DEFAULT]`` section.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/17
- [app:main]
- debug = %(ENV_APP_DEBUG)s
+ 0.6 (2018-07-11)
+ ================
- The only thing to be aware of here is that there is no fallback. The
INI file
- will fail to parse if the environment variable is not set. The app may
be run
- like so:
+ - Change ``setup_logging`` to invoke ``logging.config.fileConfig`` with
+ ``disable_existing_loggers=False`` to avoid disabling any loggers
that were
+ imported prior to configuration of the logging system.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/16
- .. code-block:: bash
+ 0.5 (2018-03-29)
+ ================
- $ APP_DEBUG=true env/bin/pserve development.ini
+ - Removed environment variable support entirely for now. The feature
requires
+ bugfixes upstream in PasteDeploy which have not been done yet and
this was
+ breaking people's environments so it is gone for now.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/15
- .. _PasteDeploy: http://pastedeploy.readthedocs.io/en/latest/
- .. _plaster: http://docs.pylonsproject.org/projects/plaster/en/latest/
+ 0.4.2 (2017-11-20)
+ ==================
+ - Fix ``ConfigDict.copy`` so that it works.
+ See https://github.com/Pylons/plaster_pastedeploy/pull/14
0.4.1 (2017-07-10)
==================
@@ -197,6 +205,8 @@
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*
+Provides-Extra: testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy.egg-info/SOURCES.txt
new/plaster_pastedeploy-0.7/src/plaster_pastedeploy.egg-info/SOURCES.txt
--- old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy.egg-info/SOURCES.txt
2017-07-11 06:43:30.000000000 +0200
+++ new/plaster_pastedeploy-0.7/src/plaster_pastedeploy.egg-info/SOURCES.txt
2019-04-12 08:21:03.000000000 +0200
@@ -1,4 +1,5 @@
.coveragerc
+.flake8
.gitignore
.travis.yml
CHANGES.rst
@@ -8,6 +9,8 @@
MANIFEST.in
README.rst
appveyor.yml
+pyproject.toml
+pytest.ini
setup.cfg
setup.py
tox.ini
@@ -21,6 +24,7 @@
src/plaster_pastedeploy.egg-info/top_level.txt
tests/__init__.py
tests/conftest.py
+tests/test_configdict.py
tests/test_get_settings.py
tests/test_get_wsgi_app.py
tests/test_get_wsgi_app_settings.py
@@ -39,6 +43,7 @@
tests/fake_packages/FakeApp/fakeapp/configapps.py
tests/sample_configs/basic_app.ini
tests/sample_configs/test_config.ini
+tests/sample_configs/test_config_included.ini
tests/sample_configs/test_filter.ini
tests/sample_configs/test_filter_with.ini
tests/sample_configs/test_settings.ini
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy.egg-info/requires.txt
new/plaster_pastedeploy-0.7/src/plaster_pastedeploy.egg-info/requires.txt
--- old/plaster_pastedeploy-0.4.1/src/plaster_pastedeploy.egg-info/requires.txt
2017-07-11 06:43:30.000000000 +0200
+++ new/plaster_pastedeploy-0.7/src/plaster_pastedeploy.egg-info/requires.txt
2019-04-12 08:21:03.000000000 +0200
@@ -1,5 +1,5 @@
-PasteDeploy >= 1.5.0
-plaster >= 0.5
+PasteDeploy>=2.0
+plaster>=0.5
[testing]
pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/tests/conftest.py
new/plaster_pastedeploy-0.7/tests/conftest.py
--- old/plaster_pastedeploy-0.4.1/tests/conftest.py 2017-03-28
02:34:02.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/conftest.py 2019-04-12
07:41:48.000000000 +0200
@@ -3,12 +3,13 @@
import pytest
import sys
[email protected](scope='session')
+
[email protected](scope="session")
def fake_packages():
# we'd like to keep this scope more focused but it's proven really
# difficult to fully monkeypatch pkg_resources and so for now we just
# install the packages for the duration of the test suite
test_dir = os.path.dirname(__file__)
- info_dir = os.path.join(test_dir, 'fake_packages', 'FakeApp')
+ info_dir = os.path.join(test_dir, "fake_packages", "FakeApp")
sys.path.insert(0, info_dir)
pkg_resources.working_set.add_entry(info_dir)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/fake_packages/FakeApp/fakeapp/apps.py
new/plaster_pastedeploy-0.7/tests/fake_packages/FakeApp/fakeapp/apps.py
--- old/plaster_pastedeploy-0.4.1/tests/fake_packages/FakeApp/fakeapp/apps.py
2017-03-30 03:48:55.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/fake_packages/FakeApp/fakeapp/apps.py
2019-04-12 07:41:48.000000000 +0200
@@ -4,12 +4,12 @@
def simple_app(response, environ, start_response):
- start_response('200 OK', [('Content-type', 'text/html')])
- return ['This is ', response]
+ start_response("200 OK", [("Content-type", "text/html")])
+ return ["This is ", response]
def basic_app(environ, start_response):
- return simple_app('basic app', environ, start_response)
+ return simple_app("basic app", environ, start_response)
def make_basic_app(global_conf, **conf):
@@ -20,7 +20,8 @@
# Filters
############################################################
-def make_cap_filter(global_conf, method_to_call='upper'):
+
+def make_cap_filter(global_conf, method_to_call="upper"):
def cap_filter(app):
return CapFilter(app, global_conf, method_to_call)
@@ -28,7 +29,7 @@
class CapFilter(object):
- def __init__(self, app, global_conf, method_to_call='upper'):
+ def __init__(self, app, global_conf, method_to_call="upper"):
self.app = app
self.method_to_call = method_to_call
self.global_conf = global_conf
@@ -37,7 +38,7 @@
app_iter = self.app(environ, start_response)
for item in app_iter:
yield getattr(item, self.method_to_call)()
- if hasattr(app_iter, 'close'):
+ if hasattr(app_iter, "close"):
app_iter.close()
@@ -45,6 +46,7 @@
# Servers
############################################################
+
def make_fake_server(global_conf=None, **settings):
return Server(global_conf, settings)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/fake_packages/FakeApp/fakeapp/configapps.py
new/plaster_pastedeploy-0.7/tests/fake_packages/FakeApp/fakeapp/configapps.py
---
old/plaster_pastedeploy-0.4.1/tests/fake_packages/FakeApp/fakeapp/configapps.py
2017-03-28 02:34:02.000000000 +0200
+++
new/plaster_pastedeploy-0.7/tests/fake_packages/FakeApp/fakeapp/configapps.py
2019-04-12 07:41:48.000000000 +0200
@@ -5,10 +5,10 @@
self.name = name
def __call__(self, environ, start_response):
- start_response('200 OK', [('Content-type', 'text/html')])
- return ['I am: ', name]
-
+ start_response("200 OK", [("Content-type", "text/html")])
+ return ["I am: ", name]
+
def make_app(cls, global_conf, **conf):
- return cls(global_conf, conf, 'basic')
- make_app = classmethod(make_app)
+ return cls(global_conf, conf, "basic")
+ make_app = classmethod(make_app)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/fake_packages/FakeApp/setup.py
new/plaster_pastedeploy-0.7/tests/fake_packages/FakeApp/setup.py
--- old/plaster_pastedeploy-0.4.1/tests/fake_packages/FakeApp/setup.py
2017-03-30 03:49:57.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/fake_packages/FakeApp/setup.py
2019-04-12 07:41:48.000000000 +0200
@@ -5,15 +5,15 @@
version="1.0",
packages=find_packages(),
entry_points={
- 'paste.app_factory': """
+ "paste.app_factory": """
basic_app=fakeapp.apps:make_basic_app
other=fakeapp.apps:make_basic_app2
configed=fakeapp.configapps:SimpleApp.make_app
""",
- 'paste.filter_factory': """
+ "paste.filter_factory": """
caps=fakeapp.apps:make_cap_filter
""",
- 'paste.server_factory': """
+ "paste.server_factory": """
fake=fakeapp.apps:make_fake_server
""",
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/sample_configs/test_config_included.ini
new/plaster_pastedeploy-0.7/tests/sample_configs/test_config_included.ini
--- old/plaster_pastedeploy-0.4.1/tests/sample_configs/test_config_included.ini
1970-01-01 01:00:00.000000000 +0100
+++ new/plaster_pastedeploy-0.7/tests/sample_configs/test_config_included.ini
2017-08-30 06:46:46.000000000 +0200
@@ -0,0 +1,10 @@
+[DEFAULT]
+def2 = from include
+def3 = c
+
+[app:main]
+# Equivalent to the egg reference, but just for kicks...
+paste.app_factory = fakeapp.configapps:SimpleApp.make_app
+set glob = orig
+bob = your uncle
+another = BAR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/sample_configs/test_settings.ini
new/plaster_pastedeploy-0.7/tests/sample_configs/test_settings.ini
--- old/plaster_pastedeploy-0.4.1/tests/sample_configs/test_settings.ini
2017-07-11 06:18:57.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/sample_configs/test_settings.ini
2019-04-12 07:34:27.000000000 +0200
@@ -12,7 +12,3 @@
a = a_val
b = b_val
c = %(default_c)s
-
-[section3]
-foo = %(ENV_PLASTER_FOO)s
-bar = %(ENV_PLASTER_BAR)s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/tests/test_configdict.py
new/plaster_pastedeploy-0.7/tests/test_configdict.py
--- old/plaster_pastedeploy-0.4.1/tests/test_configdict.py 1970-01-01
01:00:00.000000000 +0100
+++ new/plaster_pastedeploy-0.7/tests/test_configdict.py 2019-04-12
07:45:29.000000000 +0200
@@ -0,0 +1,40 @@
+""" Tests for plaster_pastedeploy.ConfigDict
+"""
+import copy # noqa: F401
+import plaster
+import pytest
+
+
[email protected]
+def loader():
+ from plaster_pastedeploy import Loader
+
+ uri = plaster.PlasterURL("pastedeploy+ini", "development.ini")
+ return Loader(uri)
+
+
+def dict_copy(d):
+ return d.copy()
+
+
+def copy_copy(d):
+ return copy.copy(d)
+
+
[email protected](
+ "copier", [dict_copy, copy_copy], ids=lambda f: f.__name__
+)
+def test_copy(copier, loader):
+ from plaster_pastedeploy import ConfigDict
+
+ x = []
+ global_conf = {}
+ configdict = ConfigDict({"x": x}, global_conf, loader)
+
+ duplicate = copier(configdict)
+
+ assert duplicate.items() == configdict.items()
+ # check that we got a shallow copy
+ assert duplicate["x"] is x
+ assert duplicate.global_conf is global_conf
+ assert duplicate.loader is loader
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/tests/test_get_settings.py
new/plaster_pastedeploy-0.7/tests/test_get_settings.py
--- old/plaster_pastedeploy-0.4.1/tests/test_get_settings.py 2017-07-11
06:18:57.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/test_get_settings.py 2019-04-12
07:41:48.000000000 +0200
@@ -4,7 +4,7 @@
here = os.path.dirname(__file__)
-test_settings_relpath = 'sample_configs/test_settings.ini'
+test_settings_relpath = "sample_configs/test_settings.ini"
test_settings_path = os.path.abspath(os.path.join(here, test_settings_relpath))
@@ -17,76 +17,65 @@
def test_sections(self):
result = self.loader.get_sections()
- assert set(result) == {'section1', 'section2', 'section3'}
+ assert set(result) == {"section1", "section2"}
def test_missing_section(self):
- result = self.loader.get_settings('missing', {'a': 'b'})
+ result = self.loader.get_settings("missing", {"a": "b"})
assert result == {}
def test_no_defaults_passed(self):
- result = self.loader.get_settings('section1')
+ result = self.loader.get_settings("section1")
assert list(result.items()) == [
- ('a', 'a_val'),
- ('c', 'override_b'),
- ('b', 'default_b'),
+ ("a", "a_val"),
+ ("c", "override_b"),
+ ("b", "default_b"),
]
- assert result.global_conf['default_a'] == 'default_a'
- assert result.global_conf['default_b'] == 'override_b'
+ assert result.global_conf["default_a"] == "default_a"
+ assert result.global_conf["default_b"] == "override_b"
assert result.loader == self.loader
with pytest.raises(Exception):
- self.loader.get_settings('section2')
+ self.loader.get_settings("section2")
def test_defaults_passed(self):
- defaults = {'default_c': 'default_c'}
- result = self.loader.get_settings('section1', defaults=defaults)
- assert result['a'] == 'a_val'
- assert result['b'] == 'default_b'
- assert 'default_c' not in result
-
- assert result.global_conf['default_a'] == 'default_a'
- assert result.global_conf['default_b'] == 'override_b'
- assert result.global_conf['default_c'] == 'default_c'
-
- result = self.loader.get_settings('section2', defaults=defaults)
- assert result['a'] == 'a_val'
- assert result['b'] == 'b_val'
- assert result['c'] == 'default_c'
-
- assert result.global_conf['default_a'] == 'default_a'
- assert result.global_conf['default_b'] == 'default_b'
- assert result.global_conf['default_c'] == 'default_c'
-
- @pytest.mark.skipif('sys.version_info[0] == 2')
- def test_environ_passed_and_escaped(self, monkeypatch):
- monkeypatch.setenv('PLASTER_FOO', '%(foo)s')
- monkeypatch.setenv('PLASTER_BAR', '%bar')
- result = self.loader.get_settings('section3')
+ defaults = {"default_c": "default_c"}
+ result = self.loader.get_settings("section1", defaults=defaults)
+ assert result["a"] == "a_val"
+ assert result["b"] == "default_b"
+ assert "default_c" not in result
+
+ assert result.global_conf["default_a"] == "default_a"
+ assert result.global_conf["default_b"] == "override_b"
+ assert result.global_conf["default_c"] == "default_c"
+
+ result = self.loader.get_settings("section2", defaults=defaults)
+ assert result["a"] == "a_val"
+ assert result["b"] == "b_val"
+ assert result["c"] == "default_c"
+
+ assert result.global_conf["default_a"] == "default_a"
+ assert result.global_conf["default_b"] == "default_b"
+ assert result.global_conf["default_c"] == "default_c"
- assert result['foo'] == '%(foo)s'
- assert result.global_conf['ENV_PLASTER_FOO'] == '%(foo)s'
-
- assert result['bar'] == '%bar'
- assert result.global_conf['ENV_PLASTER_BAR'] == '%bar'
class TestSectionedURI(TestSimpleUri):
- config_uri = test_settings_path + '#section1'
+ config_uri = test_settings_path + "#section1"
def test_no_section_name_passed(self):
result = self.loader.get_settings()
- assert result['a'] == 'a_val'
- assert result['b'] == 'default_b'
- assert result['c'] == 'override_b'
- assert 'default_b' not in result
+ assert result["a"] == "a_val"
+ assert result["b"] == "default_b"
+ assert result["c"] == "override_b"
+ assert "default_b" not in result
class TestFullURI(TestSectionedURI):
- config_uri = 'pastedeploy+ini:' + test_settings_path + '#section1'
+ config_uri = "pastedeploy+ini:" + test_settings_path + "#section1"
class TestEggURI(object):
- config_uri = 'pastedeploy+egg:FakeApp#basic_app'
+ config_uri = "pastedeploy+egg:FakeApp#basic_app"
@pytest.fixture(autouse=True)
def loader(self, fake_packages):
@@ -101,5 +90,5 @@
assert result == {}
def test_named_settings(self):
- result = self.loader.get_settings('missing')
+ result = self.loader.get_settings("missing")
assert result == {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_app.py
new/plaster_pastedeploy-0.7/tests/test_get_wsgi_app.py
--- old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_app.py 2017-06-02
07:28:54.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/test_get_wsgi_app.py 2019-04-12
07:45:29.000000000 +0200
@@ -4,7 +4,7 @@
here = os.path.dirname(__file__)
-basic_app_relpath = 'sample_configs/basic_app.ini'
+basic_app_relpath = "sample_configs/basic_app.ini"
basic_app_path = os.path.abspath(os.path.join(here, basic_app_relpath))
@@ -14,16 +14,18 @@
@pytest.fixture(autouse=True)
def loader(self, fake_packages, monkeypatch):
monkeypatch.chdir(here)
- self.loader = plaster.get_loader(self.config_uri, protocols=['wsgi'])
+ self.loader = plaster.get_loader(self.config_uri, protocols=["wsgi"])
def test_get_wsgi_app_with_relative(self):
import fakeapp.apps
+
app = self.loader.get_wsgi_app()
assert app is fakeapp.apps.basic_app
def test_get_wsgi_app_main(self):
import fakeapp.apps
- app = self.loader.get_wsgi_app('main')
+
+ app = self.loader.get_wsgi_app("main")
assert app is fakeapp.apps.basic_app
same_app = self.loader.get_wsgi_app()
@@ -31,15 +33,15 @@
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_app('invalid')
+ self.loader.get_wsgi_app("invalid")
class TestSectionedURI(TestSimpleURI):
- config_uri = basic_app_path + '#main'
+ config_uri = basic_app_path + "#main"
class TestSchemeAndSectionedURI(TestSimpleURI):
- config_uri = 'pastedeploy+ini:' + basic_app_path + '#main'
+ config_uri = "pastedeploy+ini:" + basic_app_path + "#main"
class TestRelativeURI(TestSimpleURI):
@@ -47,31 +49,34 @@
class TestRelativeSectionedURI(TestSectionedURI, TestRelativeURI):
- config_uri = basic_app_relpath + '#main'
+ config_uri = basic_app_relpath + "#main"
-class TestRelativeSchemeAndSectionedURI(TestSchemeAndSectionedURI,
- TestRelativeURI):
- config_uri = 'pastedeploy+ini:' + basic_app_relpath + '#main'
+class TestRelativeSchemeAndSectionedURI(
+ TestSchemeAndSectionedURI, TestRelativeURI
+):
+ config_uri = "pastedeploy+ini:" + basic_app_relpath + "#main"
class TestEggURI(object):
- config_uri = 'egg:FakeApp#basic_app'
+ config_uri = "egg:FakeApp#basic_app"
@pytest.fixture(autouse=True)
def loader(self, fake_packages):
- self.loader = plaster.get_loader(self.config_uri, protocols=['wsgi'])
+ self.loader = plaster.get_loader(self.config_uri, protocols=["wsgi"])
def test_it(self):
import fakeapp.apps
+
app = self.loader.get_wsgi_app()
assert app is fakeapp.apps.basic_app
def test_it_override_name(self):
import fakeapp.configapps
- app = self.loader.get_wsgi_app('configed')
+
+ app = self.loader.get_wsgi_app("configed")
assert isinstance(app, fakeapp.configapps.SimpleApp)
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_app('invalid')
+ self.loader.get_wsgi_app("invalid")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_app_settings.py
new/plaster_pastedeploy-0.7/tests/test_get_wsgi_app_settings.py
--- old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_app_settings.py
2017-07-10 07:01:49.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/test_get_wsgi_app_settings.py
2019-04-12 07:45:29.000000000 +0200
@@ -3,7 +3,7 @@
import pytest
here = os.path.dirname(__file__)
-test_config_relpath = 'sample_configs/test_config.ini'
+test_config_relpath = "sample_configs/test_config.ini"
test_config_path = os.path.abspath(os.path.join(here, test_config_relpath))
@@ -12,18 +12,28 @@
def loader(self, fake_packages, monkeypatch):
monkeypatch.chdir(here)
self.loader = plaster.get_loader(
- test_config_relpath, protocols=['wsgi'])
+ test_config_relpath, protocols=["wsgi"]
+ )
def test_get_wsgi_app_settings(self):
- result = self.loader.get_wsgi_app_settings('test_get')
- assert result == {'def1': 'a', 'foo': 'TEST'}
- assert result.global_conf['def1'] == 'a'
- assert result.global_conf['def2'] == 'TEST'
- assert 'basepath' in result.global_conf
+ result = self.loader.get_wsgi_app_settings("test_get")
+ assert result == {"def1": "a", "foo": "TEST"}
+ assert result.global_conf["def1"] == "a"
+ assert result.global_conf["def2"] == "TEST"
+ assert "basepath" in result.global_conf
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_app_settings('invalid')
+ self.loader.get_wsgi_app_settings("invalid")
+
+ def test_foreign_config(self):
+ result = self.loader.get_wsgi_app_settings("test_foreign_config")
+ assert result == {"another": "FOO", "bob": "your uncle"}
+ assert result.global_conf["def1"] == "a"
+ assert result.global_conf["def2"] == "b"
+ assert result.global_conf["def3"] == "c"
+ assert result.global_conf["glob"] == "override"
+ assert "basepath" in result.global_conf
class TestSimpleURI(object):
@@ -31,19 +41,20 @@
def loader(self, fake_packages, monkeypatch):
monkeypatch.chdir(here)
self.loader = plaster.get_loader(
- 'sample_configs/test_filter_with.ini', protocols=['wsgi'])
+ "sample_configs/test_filter_with.ini", protocols=["wsgi"]
+ )
def test_get_wsgi_app_settings(self):
conf = self.loader.get_wsgi_app_settings()
- assert conf['example'] == 'test'
+ assert conf["example"] == "test"
class TestEggURI(object):
- config_uri = 'egg:FakeApp#configed'
+ config_uri = "egg:FakeApp#configed"
@pytest.fixture(autouse=True)
def loader(self, fake_packages):
- self.loader = plaster.get_loader(self.config_uri, protocols=['wsgi'])
+ self.loader = plaster.get_loader(self.config_uri, protocols=["wsgi"])
def test_it(self):
conf = self.loader.get_wsgi_app_settings()
@@ -51,4 +62,4 @@
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_app_settings('invalid')
+ self.loader.get_wsgi_app_settings("invalid")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_filter.py
new/plaster_pastedeploy-0.7/tests/test_get_wsgi_filter.py
--- old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_filter.py 2017-06-02
07:28:54.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/test_get_wsgi_filter.py 2019-04-12
07:45:29.000000000 +0200
@@ -4,7 +4,7 @@
here = os.path.dirname(__file__)
-test_filter_path = 'sample_configs/test_filter.ini'
+test_filter_path = "sample_configs/test_filter.ini"
class TestSimpleURI(object):
@@ -13,67 +13,73 @@
@pytest.fixture(autouse=True)
def loader(self, fake_packages, monkeypatch):
monkeypatch.chdir(here)
- self.loader = plaster.get_loader(self.config_uri, protocols=['wsgi'])
+ self.loader = plaster.get_loader(self.config_uri, protocols=["wsgi"])
def test_get_wsgi_filter(self):
import fakeapp.apps
- app_filter_factory = self.loader.get_wsgi_filter('filt')
+
+ app_filter_factory = self.loader.get_wsgi_filter("filt")
other_loader = plaster.get_loader(
- 'sample_configs/basic_app.ini', protocols=['wsgi'])
+ "sample_configs/basic_app.ini", protocols=["wsgi"]
+ )
app = other_loader.get_wsgi_app()
app_filter = app_filter_factory(app)
assert isinstance(app_filter, fakeapp.apps.CapFilter)
- assert app_filter.method_to_call == 'lower'
+ assert app_filter.method_to_call == "lower"
assert app_filter.app is fakeapp.apps.basic_app
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_filter('invalid')
+ self.loader.get_wsgi_filter("invalid")
class TestSectionedURI(TestSimpleURI):
- config_uri = test_filter_path + '#filt'
+ config_uri = test_filter_path + "#filt"
def test_get_wsgi_filter(self):
import fakeapp.apps
+
app_filter_factory = self.loader.get_wsgi_filter()
other_loader = plaster.get_loader(
- 'pastedeploy+ini:sample_configs/basic_app.ini#main',
- protocols=['wsgi'])
+ "pastedeploy+ini:sample_configs/basic_app.ini#main",
+ protocols=["wsgi"],
+ )
app = other_loader.get_wsgi_app()
app_filter = app_filter_factory(app)
assert isinstance(app_filter, fakeapp.apps.CapFilter)
- assert app_filter.method_to_call == 'lower'
+ assert app_filter.method_to_call == "lower"
assert app_filter.app is fakeapp.apps.basic_app
class TestSchemeAndSectionedURI(TestSectionedURI):
- config_uri = 'pastedeploy+ini:' + test_filter_path + '#filt'
+ config_uri = "pastedeploy+ini:" + test_filter_path + "#filt"
class TestEggURI(object):
- config_uri = 'egg:FakeApp#caps'
+ config_uri = "egg:FakeApp#caps"
@pytest.fixture(autouse=True)
def loader(self, fake_packages):
- self.loader = plaster.get_loader(self.config_uri, protocols=['wsgi'])
+ self.loader = plaster.get_loader(self.config_uri, protocols=["wsgi"])
def test_it(self):
import fakeapp.apps
+
filter = self.loader.get_wsgi_filter()
- filtered_app = filter('foo')
+ filtered_app = filter("foo")
assert isinstance(filtered_app, fakeapp.apps.CapFilter)
def test_it_override_name(self):
import fakeapp.apps
- filter = self.loader.get_wsgi_filter('caps')
- filtered_app = filter('foo')
+
+ filter = self.loader.get_wsgi_filter("caps")
+ filtered_app = filter("foo")
assert isinstance(filtered_app, fakeapp.apps.CapFilter)
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_filter('invalid')
+ self.loader.get_wsgi_filter("invalid")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_server.py
new/plaster_pastedeploy-0.7/tests/test_get_wsgi_server.py
--- old/plaster_pastedeploy-0.4.1/tests/test_get_wsgi_server.py 2017-06-02
07:28:54.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/test_get_wsgi_server.py 2019-04-12
07:41:48.000000000 +0200
@@ -4,7 +4,7 @@
here = os.path.dirname(__file__)
-test_config_path = 'sample_configs/test_config.ini'
+test_config_path = "sample_configs/test_config.ini"
class TestSimpleURI(object):
@@ -13,52 +13,52 @@
@pytest.fixture(autouse=True)
def loader(self, fake_packages, monkeypatch):
monkeypatch.chdir(here)
- self.loader = plaster.get_loader(self.config_uri, protocols=['wsgi'])
+ self.loader = plaster.get_loader(self.config_uri, protocols=["wsgi"])
def test_get_wsgi_server_default(self):
server = self.loader.get_wsgi_server()
dummy_app = object()
result = server(dummy_app)
assert result is dummy_app
- assert server.settings['foo'] == 'main'
+ assert server.settings["foo"] == "main"
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_server('invalid')
+ self.loader.get_wsgi_server("invalid")
class TestSectionedURI(TestSimpleURI):
- config_uri = test_config_path + '#other'
+ config_uri = test_config_path + "#other"
def test_get_wsgi_server_default(self):
server = self.loader.get_wsgi_server()
dummy_app = object()
result = server(dummy_app)
assert result is dummy_app
- assert server.settings['foo'] == 'other'
+ assert server.settings["foo"] == "other"
class TestSchemeAndSectionedURI(TestSectionedURI):
- config_uri = 'pastedeploy+ini:' + test_config_path + '#other'
+ config_uri = "pastedeploy+ini:" + test_config_path + "#other"
class TestEggURI(object):
- config_uri = 'egg:FakeApp#fake'
+ config_uri = "egg:FakeApp#fake"
@pytest.fixture(autouse=True)
def loader(self, fake_packages):
- self.loader = plaster.get_loader(self.config_uri, protocols=['wsgi'])
+ self.loader = plaster.get_loader(self.config_uri, protocols=["wsgi"])
def test_it(self):
server = self.loader.get_wsgi_server()
- result = server('foo')
- assert result == 'foo'
+ result = server("foo")
+ assert result == "foo"
def test_it_override_name(self):
- server = self.loader.get_wsgi_server('fake')
- result = server('foo')
- assert result == 'foo'
+ server = self.loader.get_wsgi_server("fake")
+ result = server("foo")
+ assert result == "foo"
def test_invalid_name(self):
with pytest.raises(LookupError):
- self.loader.get_wsgi_server('invalid')
+ self.loader.get_wsgi_server("invalid")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/tests/test_loader.py
new/plaster_pastedeploy-0.7/tests/test_loader.py
--- old/plaster_pastedeploy-0.4.1/tests/test_loader.py 2017-06-02
07:28:54.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/test_loader.py 2019-04-12
07:41:48.000000000 +0200
@@ -1,8 +1,10 @@
import plaster
+
def test___repr__():
from plaster_pastedeploy import Loader
- uri = plaster.PlasterURL('pastedeploy+ini', 'development.ini')
+
+ uri = plaster.PlasterURL("pastedeploy+ini", "development.ini")
loader = Loader(uri)
assert str(loader) == (
'plaster_pastedeploy.Loader(uri="pastedeploy+ini://development.ini")'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/plaster_pastedeploy-0.4.1/tests/test_setup_logging.py
new/plaster_pastedeploy-0.7/tests/test_setup_logging.py
--- old/plaster_pastedeploy-0.4.1/tests/test_setup_logging.py 2017-07-11
06:42:20.000000000 +0200
+++ new/plaster_pastedeploy-0.7/tests/test_setup_logging.py 2019-04-12
07:41:48.000000000 +0200
@@ -4,7 +4,7 @@
here = os.path.dirname(__file__)
-test_config_relpath = 'sample_configs/test_config.ini'
+test_config_relpath = "sample_configs/test_config.ini"
test_config_path = os.path.abspath(os.path.join(here, test_config_relpath))
@@ -13,8 +13,8 @@
def logging(self, fake_packages, monkeypatch):
self.basicConfig = DummyFileConfig()
self.fileConfig = DummyFileConfig()
- monkeypatch.setattr('logging.basicConfig', self.basicConfig)
- monkeypatch.setattr('plaster_pastedeploy.fileConfig', self.fileConfig)
+ monkeypatch.setattr("logging.basicConfig", self.basicConfig)
+ monkeypatch.setattr("plaster_pastedeploy.fileConfig", self.fileConfig)
monkeypatch.chdir(here)
def _makeOne(self, uri=None):
@@ -29,8 +29,8 @@
path, defaults = self.fileConfig.args
assert path == test_config_relpath
- assert defaults['__file__'] == test_config_path
- assert defaults['here'] == os.path.dirname(test_config_path)
+ assert defaults["__file__"] == test_config_path
+ assert defaults["here"] == os.path.dirname(test_config_path)
def test_it_global_conf_empty(self):
loader = self._makeOne()
@@ -39,20 +39,20 @@
path, defaults = self.fileConfig.args
assert path == test_config_relpath
- assert defaults['__file__'] == test_config_path
- assert defaults['here'] == os.path.dirname(test_config_path)
+ assert defaults["__file__"] == test_config_path
+ assert defaults["here"] == os.path.dirname(test_config_path)
def test_it_global_conf_not_empty(self):
- defaults = {'key': 'val'}
+ defaults = {"key": "val"}
loader = self._makeOne()
loader.setup_logging(defaults=defaults)
assert self.fileConfig.called
path, defaults = self.fileConfig.args
assert path == test_config_relpath
- assert defaults['__file__'] == test_config_path
- assert defaults['here'] == os.path.dirname(test_config_path)
- assert defaults['key'] == 'val'
+ assert defaults["__file__"] == test_config_path
+ assert defaults["here"] == os.path.dirname(test_config_path)
+ assert defaults["key"] == "val"
def test_no_logging_section(self):
loader = self._makeOne()
@@ -63,12 +63,18 @@
assert self.basicConfig.kwargs == {}
def test_egg_uri(self):
- loader = self._makeOne('egg:FakeApp#fake')
+ loader = self._makeOne("egg:FakeApp#fake")
loader.setup_logging()
assert self.basicConfig.called
assert self.basicConfig.args == ()
assert self.basicConfig.kwargs == {}
+ def test_it_keeps_existing_loggers(self):
+ loader = self._makeOne()
+ loader.setup_logging()
+ assert self.fileConfig.called
+ assert self.fileConfig.kwargs["disable_existing_loggers"] is False
+
class DummyFileConfig(object):
called = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/plaster_pastedeploy-0.4.1/tox.ini
new/plaster_pastedeploy-0.7/tox.ini
--- old/plaster_pastedeploy-0.4.1/tox.ini 2017-07-01 17:42:22.000000000
+0200
+++ new/plaster_pastedeploy-0.7/tox.ini 2019-04-12 07:54:51.000000000 +0200
@@ -1,33 +1,24 @@
[tox]
envlist =
lint,
- py27,py34,py35,py36,pypy,
+ py27,py34,py35,py36,pypy,pypy3,
coverage
[testenv]
-basepython =
- py27: python2.7
- py34: python3.4
- py35: python3.5
- py36: python3.6
- pypy: pypy
- py2: python2.7
- py3: python3.5
- pypy3: pypy3
-
commands =
- pip install plaster_pastedeploy[testing]
py.test --cov --cov-report= {posargs:}
setenv =
COVERAGE_FILE=.coverage.{envname}
+extras =
+ testing
+
deps =
py27: configparser
[testenv:coverage]
skip_install = True
-basepython = python3.5
commands =
coverage combine
coverage report --fail-under=100
@@ -37,13 +28,35 @@
COVERAGE_FILE=.coverage
[testenv:lint]
-skip_install = True
-basepython = python3.5
+skip_install = true
commands =
flake8 src/plaster_pastedeploy/
+ black --check --diff src/plaster_pastedeploy tests setup.py
python setup.py check -r -s -m
check-manifest
deps =
+ black
+ check-manifest
flake8
readme_renderer
- check-manifest
+
+[testenv:black]
+skip_install = true
+commands =
+ black src/plaster_pastedeploy tests setup.py
+deps =
+ black
+
+[testenv:build]
+skip_install = true
+commands =
+ # clean up build/ and dist/ folders
+ python -c 'import shutil; shutil.rmtree("dist", ignore_errors=True)'
+ python setup.py clean --all
+ # build sdist
+ python setup.py sdist --dist-dir {toxinidir}/dist
+ # build wheel from sdist
+ pip wheel -v --no-deps --no-index --no-build-isolation --wheel-dir
{toxinidir}/dist --find-links {toxinidir}/dist plaster_pastedeploy
+deps =
+ setuptools
+ wheel