Michael Merickel
2018-10-16 8eed333343e4e9e7f11f3aee67299030d6bf2783
Merge pull request #3390 from mmerickel/whatsnew-1.10

prep 1.10a1
1 files deleted
1 files added
14 files modified
237 ■■■■ changed files
CHANGES.rst 21 ●●●● patch | view | raw | blame | history
MANIFEST.in 5 ●●●● patch | view | raw | blame | history
README.rst 10 ●●●● patch | view | raw | blame | history
docs/conf.py 8 ●●●● patch | view | raw | blame | history
docs/index.rst 1 ●●●● patch | view | raw | blame | history
docs/narr/project.rst 2 ●●● patch | view | raw | blame | history
docs/quick_tour.rst 4 ●●●● patch | view | raw | blame | history
docs/quick_tutorial/cookiecutters.rst 2 ●●● patch | view | raw | blame | history
docs/tutorials/modwsgi/index.rst 2 ●●● patch | view | raw | blame | history
docs/tutorials/wiki/installation.rst 4 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/installation.rst 4 ●●●● patch | view | raw | blame | history
docs/whatsnew-1.10.rst 131 ●●●●● patch | view | raw | blame | history
hacking-tox.ini 25 ●●●●● patch | view | raw | blame | history
setup.py 2 ●●● patch | view | raw | blame | history
src/pyramid/scaffolds/tests.py 4 ●●●● patch | view | raw | blame | history
tox.ini 12 ●●●● patch | view | raw | blame | history
CHANGES.rst
@@ -1,5 +1,5 @@
unreleased
==========
1.10a1 (2018-10-15)
===================
Features
--------
@@ -38,8 +38,8 @@
  See https://github.com/Pylons/pyramid/pull/3300
- Modify ``pyramid.authentication.AuthTktAuthenticationPolicy`` and
  ``pyramid.csrf.CookieCSRFStoragePolicy`` to support the SameSite option on
  cookies and set the default to ``'Lax'``.
  ``pyramid.csrf.CookieCSRFStoragePolicy`` to support the ``SameSite`` option
  on cookies and set the default to ``'Lax'``.
  See https://github.com/Pylons/pyramid/pull/3319
- Added new ``pyramid.httpexceptions.HTTPPermanentRedirect``
@@ -75,6 +75,12 @@
- Add a ``registry`` argument to ``pyramid.renderers.get_renderer``
  to allow users to avoid threadlocals during renderer lookup.
  See https://github.com/Pylons/pyramid/pull/3358
- Pyramid's test suite is no longer distributed with the universal wheel.
  See https://github.com/Pylons/pyramid/pull/3387
- All Python code is now formatted automatically using ``black``.
  See https://github.com/Pylons/pyramid/pull/3388
Bug Fixes
---------
@@ -163,11 +169,16 @@
  and replaced by the ``userid`` argument.
  See https://github.com/Pylons/pyramid/pull/3369
- Removed the ``pyramid.tests`` subpackage that used to contain the Pyramid
  test suite. These changes also changed the format of the repository to move
  the code into a ``src`` folder.
  See https://github.com/Pylons/pyramid/pull/3387
Documentation Changes
---------------------
- Ad support for Read The Docs Ethical Ads.
  https://github.com/Pylons/pyramid/pull/3360
  See https://github.com/Pylons/pyramid/pull/3360 and
  https://docs.readthedocs.io/en/latest/advertising/ethical-advertising.html
- Add support for alembic to the pyramid-cookiecutter-alchemy cookiecutter
MANIFEST.in
@@ -7,13 +7,10 @@
include CHANGES.rst HISTORY.rst BFG_HISTORY.rst
include CONTRIBUTORS.txt LICENSE.txt COPYRIGHT.txt
include contributing.md RELEASING.txt
include .coveragerc .flake8 setup.cfg pyproject.toml
include tox.ini appveyor.yml .travis.yml rtd.txt
include contributing.md RELEASING.txt HACKING.txt TODO.txt
graft .github
include HACKING.txt hacking-tox.ini
include TODO.txt
global-exclude __pycache__ *.py[cod]
global-exclude .DS_Store
README.rst
@@ -1,13 +1,13 @@
Pyramid
=======
.. image:: https://travis-ci.org/Pylons/pyramid.png?branch=master
.. image:: https://travis-ci.org/Pylons/pyramid.png?branch=1.10-branch
        :target: https://travis-ci.org/Pylons/pyramid
        :alt: master Travis CI Status
        :alt: 1.10-branch Travis CI Status
.. image:: https://readthedocs.org/projects/pyramid/badge/?version=master
        :target: https://docs.pylonsproject.org/projects/pyramid/en/master
        :alt: master Documentation Status
.. image:: https://readthedocs.org/projects/pyramid/badge/?version=1.10-branch
        :target: https://docs.pylonsproject.org/projects/pyramid/en/1.10-branch
        :alt: 1.10-branch Documentation Status
.. image:: https://img.shields.io/badge/irc-freenode-blue.svg
        :target: https://webchat.freenode.net/?channels=pyramid
docs/conf.py
@@ -71,7 +71,7 @@
    'python': ('https://docs.python.org/3', None),
    'pytest': ('https://docs.pytest.org/en/latest/', None),
    'sphinx': ('http://www.sphinx-doc.org/en/latest', None),
    'sqla': ('http://docs.sqlalchemy.org/en/latest', None),
    'sqla': ('https://docs.sqlalchemy.org/en/latest', None),
    'tm': ('https://docs.pylonsproject.org/projects/pyramid-tm/en/latest/', None),
    'toolbar': ('https://docs.pylonsproject.org/projects/pyramid-debugtoolbar/en/latest', None),
    'tstring': ('https://docs.pylonsproject.org/projects/translationstring/en/latest', None),
@@ -79,10 +79,10 @@
    'venusian': ('https://docs.pylonsproject.org/projects/venusian/en/latest', None),
    'webob': ('https://docs.pylonsproject.org/projects/webob/en/latest/', None),
    'webtest': ('http://webtest.pythonpaste.org/en/latest', None),
    'who': ('http://repozewho.readthedocs.io/en/latest', None),
    'who': ('https://repozewho.readthedocs.io/en/latest', None),
    'zcml': ('https://docs.pylonsproject.org/projects/pyramid-zcml/en/latest', None),
    'zcomponent': ('http://zopecomponent.readthedocs.io/en/latest/', None),
    'zinterface': ('http://zopeinterface.readthedocs.io/en/latest/', None),
    'zcomponent': ('https://zopecomponent.readthedocs.io/en/latest/', None),
    'zinterface': ('https://zopeinterface.readthedocs.io/en/latest/', None),
}
docs/index.rst
@@ -179,6 +179,7 @@
.. toctree::
   :maxdepth: 1
   whatsnew-1.10
   whatsnew-1.9
   whatsnew-1.8
   whatsnew-1.7
docs/narr/project.rst
@@ -83,7 +83,7 @@
.. code-block:: bash
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
If prompted for the first item, accept the default ``yes`` by hitting return.
docs/quick_tour.rst
@@ -510,7 +510,7 @@
.. code-block:: bash
    $VENV/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
    $VENV/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
If prompted for the first item, accept the default ``yes`` by hitting return.
@@ -863,7 +863,7 @@
.. code-block:: bash
    cd ~
    env/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
    env/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
If prompted for the first item, accept the default ``yes`` by hitting return.
docs/quick_tutorial/cookiecutters.rst
@@ -28,7 +28,7 @@
    .. code-block:: bash
        $VENV/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
        $VENV/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
    If prompted for the first item, accept the default ``yes`` by hitting return.
docs/tutorials/modwsgi/index.rst
@@ -39,7 +39,7 @@
    .. code-block:: bash
        cd ~
        cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
        cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
    If prompted for the first item, accept the default ``yes`` by hitting return.
docs/tutorials/wiki/installation.rst
@@ -31,7 +31,7 @@
.. code-block:: bash
    cd ~
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
On Windows
^^^^^^^^^^
@@ -39,7 +39,7 @@
.. code-block:: doscon
    cd \
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
On all operating systems
^^^^^^^^^^^^^^^^^^^^^^^^
docs/tutorials/wiki2/installation.rst
@@ -43,7 +43,7 @@
.. code-block:: bash
    cd ~
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
On Windows
^^^^^^^^^^
@@ -51,7 +51,7 @@
.. code-block:: doscon
    cd \
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout master
    cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.10-branch
On all operating systems
^^^^^^^^^^^^^^^^^^^^^^^^
docs/whatsnew-1.10.rst
New file
@@ -0,0 +1,131 @@
What's New in Pyramid 1.10
==========================
This article explains the new features in :app:`Pyramid` version 1.10 as compared to its predecessor, :app:`Pyramid` 1.9. It also documents backwards incompatibilities between the two versions and deprecations added to :app:`Pyramid` 1.10, as well as software dependency changes and notable documentation additions.
.. note::
    This release is the last planned release feature release to support Python 2.7.
    Bug fixes will continue to be backported until at least 2020-01-01 when Python 2.7 reaches end of life.
    New features, and backports will be reviewed and accepted for the 1.x series of Pyramid but new development will be focused on Pyramid 2.x.
Feature Additions
-----------------
- Add support for Python 3.7. Add testing on Python 3.8 with allowed failures.
  See https://github.com/Pylons/pyramid/pull/3333
- Add a context manager :meth:`pyramid.config.Configurator.route_prefix_context` to allow for convenient setting of the ``route_prefix`` for :meth:`pyramid.config.Configurator.include` and :meth:`pyramid.config.Configurator.add_route` calls inside the context.
  See https://github.com/Pylons/pyramid/pull/3279
- Added the :meth:`pyramid.config.Configurator.add_accept_view_order` directive, allowing users to specify media type preferences in ambiguous situations such as when several views match.
  A default ordering is defined for media types that prefers human-readable html/text responses over JSON.
  See https://github.com/Pylons/pyramid/pull/3326
- Support a list of media types in the ``accept`` predicate used in :meth:`pyramid.config.Configurator.add_route`.
  See https://github.com/Pylons/pyramid/pull/3326
- Added :class:`pyramid.session.JSONSerializer`.
  See "Upcoming Changes to ISession in Pyramid 2.0" in the "Sessions" chapter of the documentation for more information about this feature.
  See https://github.com/Pylons/pyramid/pull/3353
- Modify the builtin session implementations to support ``SameSite`` options on cookies and set the default to ``'Lax'``.
  This affects :func:`pyramid.session.BaseCookieSessionFactory`, :func:`pyramid.session.SignedCookieSessionFactory`, and :func:`pyramid.session.UnencryptedCookieSessionFactoryConfig`.
  See https://github.com/Pylons/pyramid/pull/3300
- Modify :class:`pyramid.authentication.AuthTktAuthenticationPolicy` and :class:`pyramid.csrf.CookieCSRFStoragePolicy` to support the ``SameSite`` option on cookies and set the default to ``'Lax'``.
  See https://github.com/Pylons/pyramid/pull/3319
- Added new :class:`pyramid.httpexceptions.HTTPPermanentRedirect` exception/response object for a HTTP 308 redirect.
  See https://github.com/Pylons/pyramid/pull/3302
- Add ``_depth`` and ``_category`` arguments to all of the venusian decorators.
  The ``_category`` argument can be used to affect which actions are registered when performing a ``config.scan(..., category=...)`` with a specific category.
  The ``_depth`` argument should be used when wrapping the decorator in your own.
  This change affects :func:`pyramid.view.view_config`, :func:`pyramid.view.exception_view_config`, :func:`pyramid.view.forbidden_view_config`, :func:`pyramid.view.notfound_view_config`, :func:`pyramid.events.subscriber` and :func:`pyramid.response.response_adapter` decorators.
  See https://github.com/Pylons/pyramid/pull/3105 and https://github.com/Pylons/pyramid/pull/3122
- Fix the :class:`pyramid.request.Request` class name after using :meth:`pyramid.request.Request.set_property` or :meth:`pyramid.config.Configurator.add_request_method` such that the ``str(request.__class__)`` would appear as ``pyramid.request.Request`` instead of ``pyramid.util.Request``.
  See https://github.com/Pylons/pyramid/pull/3129
- Add a ``registry`` argument to :func:`pyramid.renderers.get_renderer` to allow users to avoid threadlocals during renderer lookup.
  See https://github.com/Pylons/pyramid/pull/3358
- Within ``pshell``, allow the user-defined ``setup`` function to be a generator, in which case it may wrap the command's lifecycle.
  See https://github.com/Pylons/pyramid/pull/3318
- Within ``pshell``, variables defined by the ``[pshell]`` settings are available within the user-defined ``setup`` function.
  See https://github.com/Pylons/pyramid/pull/3318
- In ``cherrypy_server_runner``, prefer imports from the ``cheroot`` package over the legacy imports from `cherrypy.wsgiserver`.
  See https://github.com/Pylons/pyramid/pull/3235
- :app:`Pyramid`'s test suite is no longer distributed with the universal wheel.
  See https://github.com/Pylons/pyramid/pull/3387
- All Python code is now formatted automatically using ``black``.
  See https://github.com/Pylons/pyramid/pull/3388
Deprecations
------------
- The :class:`pyramid.intefaces.ISession` interface will move to require JSON-serializable objects in :app:`Pyramid` 2.0. See "Upcoming Changes to ISession in Pyramid 2.0" in the "Sessions" chapter of the documentation for more information about this change.
  See https://github.com/Pylons/pyramid/pull/3353
- The :func:`pyramid.session.signed_serialize` and :func:`pyramid.session.signed_deserialize` functions will be removed in :app:`Pyramid` 2.0, along with the removal of :func:`pyramid.session.UnencryptedCookieSessionFactoryConfig` which was deprecated in :app:`Pyramid` 1.5.
  Please switch to using the :func:`pyramid.session.SignedCookieSessionFactory`, copying the code, or another session implementation if you're still using these features.
  See https://github.com/Pylons/pyramid/pull/3353
- Media ranges are deprecated in the ``accept`` argument of :meth:`pyramid.config.Configurator.add_route`.
  Use a list of explicit media types to ``add_route`` to support multiple types.
  See https://github.com/Pylons/pyramid/pull/3326
- Media ranges are deprecated in the ``accept`` argument of :meth:`pyramid.config.Configurator.add_view`.
  There is no replacement for ranges to ``add_view``, but after much discussion the workflow is fundamentally ambiguous in the face of various client-supplied values for the ``Accept`` header.
  See https://github.com/Pylons/pyramid/pull/3326
Backward Incompatibilities
--------------------------
- On Python 3.4+ the ``repoze.lru`` dependency is dropped. If you were using this package directly in your apps you should make sure that you are depending on it directly within your project.
  See https://github.com/Pylons/pyramid/pull/3140
- Remove the ``permission`` argument from :meth:`pyramid.config.Configurator.add_route`.
  This was an argument left over from a feature removed in :app:`Pyramid` 1.5 and has had no effect since then.
  See https://github.com/Pylons/pyramid/pull/3299
- Modify the builtin session implementations to set ``SameSite='Lax'`` on cookies.
  This affects :func:`pyramid.session.BaseCookieSessionFactory`, :func:`pyramid.session.SignedCookieSessionFactory`, and :func:`pyramid.session.UnencryptedCookieSessionFactoryConfig`.
  See https://github.com/Pylons/pyramid/pull/3300
- Variables defined in the ``[pshell]`` section of the settings will no longer override those set by the ``setup`` function.
  See https://github.com/Pylons/pyramid/pull/3318
- :meth:`pyramid.config.Configurator.add_notfound_view` uses default redirect class exception :class:`pyramid.httpexceptions.HTTPTemporaryRedirect` instead of previous :class:`pyramid.httpexceptions.HTTPFound`.
  See https://github.com/Pylons/pyramid/pull/3328
- Removed ``pyramid.config.Configurator.set_request_property`` which had been deprecated since :app:`Pyramid` 1.5.
  Instead use :meth:`pyramid.config.Configurator.add_request_method` with ``reify=True`` or ``property=True``.
  See https://github.com/Pylons/pyramid/pull/3368
- Removed the ``principal`` keyword argument from :func:`pyramid.security.remember` which had been deprecated since :app:`Pyramid` 1.6 and replaced by the ``userid`` argument.
  See https://github.com/Pylons/pyramid/pull/3369
- Removed the ``pyramid.tests`` subpackage that used to contain the Pyramid test suite.
  These changes also changed the format of the repository to move the code into a ``src`` folder.
  See https://github.com/Pylons/pyramid/pull/3387
Documentation Enhancements
--------------------------
- Ad support for Read The Docs Ethical Ads.
  See https://github.com/Pylons/pyramid/pull/3360 and https://docs.readthedocs.io/en/latest/advertising/ethical-advertising.html
- Add support for alembic to the pyramid-cookiecutter-alchemy cookiecutter and update the wiki2 tutorial to explain how it works.
  See https://github.com/Pylons/pyramid/pull/3307 and https://github.com/Pylons/pyramid-cookiecutter-alchemy/pull/7
- Bump Sphinx to >= 1.7.4 in setup.py to support ``emphasize-lines`` in PDFs and to pave the way for xelatex support.
  See https://github.com/Pylons/pyramid/pull/3271, https://github.com/Pylons/pyramid/issues/667, and https://github.com/Pylons/pyramid/issues/2572
- Added extra tests to the quick tutorial.
  See https://github.com/Pylons/pyramid/pull/3375
hacking-tox.ini
File was deleted
setup.py
@@ -57,7 +57,7 @@
setup(
    name='pyramid',
    version='1.10.dev0',
    version='1.10a1',
    description='The Pyramid Web Framework, a Pylons project',
    long_description=README + '\n\n' + CHANGES,
    classifiers=[
src/pyramid/scaffolds/tests.py
@@ -19,7 +19,7 @@
        logger = Logger([(Logger.level_for_integer(2), sys.stdout)])
        virtualenv.logger = logger
        virtualenv.create_environment(
            directory, site_packages=False, clear=False, unzip_setuptools=True
            directory, site_packages=False, clear=False
        )
    def install(self, tmpl_name):  # pragma: no cover
@@ -28,7 +28,7 @@
            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(here)))
            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)
tox.ini
@@ -28,37 +28,37 @@
[testenv:py27-scaffolds]
basepython = python2.7
commands =
    python pyramid/scaffolds/tests.py
    python src/pyramid/scaffolds/tests.py
deps = virtualenv
[testenv:py34-scaffolds]
basepython = python3.4
commands =
    python pyramid/scaffolds/tests.py
    python src/pyramid/scaffolds/tests.py
deps = virtualenv
[testenv:py35-scaffolds]
basepython = python3.5
commands =
    python pyramid/scaffolds/tests.py
    python src/pyramid/scaffolds/tests.py
deps = virtualenv
[testenv:py36-scaffolds]
basepython = python3.6
commands =
    python pyramid/scaffolds/tests.py
    python src/pyramid/scaffolds/tests.py
deps = virtualenv
[testenv:py37-scaffolds]
basepython = python3.7
commands =
    python pyramid/scaffolds/tests.py
    python src/pyramid/scaffolds/tests.py
deps = virtualenv
[testenv:pypy-scaffolds]
basepython = pypy
commands =
    python pyramid/scaffolds/tests.py
    python src/pyramid/scaffolds/tests.py
deps = virtualenv
[testenv:lint]