Hello community,
here is the log from the commit of package python-Werkzeug for openSUSE:Factory
checked in at 2019-09-30 15:55:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Werkzeug (Old)
and /work/SRC/openSUSE:Factory/.python-Werkzeug.new.2352 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Werkzeug"
Mon Sep 30 15:55:23 2019 rev:27 rq:732906 version:0.16.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Werkzeug/python-Werkzeug.changes
2019-09-23 12:16:54.721811646 +0200
+++
/work/SRC/openSUSE:Factory/.python-Werkzeug.new.2352/python-Werkzeug.changes
2019-09-30 15:55:26.865847536 +0200
@@ -1,0 +2,9 @@
+Tue Sep 24 10:15:31 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 0.16.0:
+ * Deprecate most top-level attributes provided by the werkzeug
+ module in favor of direct imports. The deprecated imports will
+ be removed in version 1.0.
+- Rebase patch 0001_create_a_thread_to_reap_death_process.patch
+
+-------------------------------------------------------------------
Old:
----
Werkzeug-0.15.6.tar.gz
New:
----
Werkzeug-0.16.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-Werkzeug.spec ++++++
--- /var/tmp/diff_new_pack.skBCeC/_old 2019-09-30 15:55:27.605845567 +0200
+++ /var/tmp/diff_new_pack.skBCeC/_new 2019-09-30 15:55:27.609845557 +0200
@@ -19,7 +19,7 @@
%define oldpython python
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-Werkzeug
-Version: 0.15.6
+Version: 0.16.0
Release: 0
Summary: The Swiss Army knife of Python web development
License: BSD-3-Clause
++++++ 0001_create_a_thread_to_reap_death_process.patch ++++++
--- /var/tmp/diff_new_pack.skBCeC/_old 2019-09-30 15:55:27.621845525 +0200
+++ /var/tmp/diff_new_pack.skBCeC/_new 2019-09-30 15:55:27.621845525 +0200
@@ -19,19 +19,19 @@
werkzeug/serving.py | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
-Index: Werkzeug-0.15.4/src/werkzeug/serving.py
+Index: Werkzeug-0.16.0/src/werkzeug/serving.py
===================================================================
---- Werkzeug-0.15.4.orig/src/werkzeug/serving.py
-+++ Werkzeug-0.15.4/src/werkzeug/serving.py
-@@ -41,6 +41,7 @@ import signal
+--- Werkzeug-0.16.0.orig/src/werkzeug/serving.py
++++ Werkzeug-0.16.0/src/werkzeug/serving.py
+@@ -40,6 +40,7 @@ import os
+ import signal
import socket
import sys
-
+import threading
- import werkzeug
+
from ._compat import PY2
from ._compat import reraise
-@@ -775,6 +776,7 @@ class ForkingWSGIServer(ForkingMixIn, Ba
+@@ -776,6 +777,7 @@ class ForkingWSGIServer(ForkingMixIn, Ba
passthrough_errors=False,
ssl_context=None,
fd=None,
@@ -39,7 +39,7 @@
):
if not can_fork:
raise ValueError("Your platform does not support forking.")
-@@ -783,6 +785,23 @@ class ForkingWSGIServer(ForkingMixIn, Ba
+@@ -784,6 +786,23 @@ class ForkingWSGIServer(ForkingMixIn, Ba
)
self.max_children = processes
++++++ Werkzeug-0.15.6.tar.gz -> Werkzeug-0.16.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/CHANGES.rst
new/Werkzeug-0.16.0/CHANGES.rst
--- old/Werkzeug-0.15.6/CHANGES.rst 2019-09-04 21:57:26.000000000 +0200
+++ new/Werkzeug-0.16.0/CHANGES.rst 2019-09-19 16:31:47.000000000 +0200
@@ -1,5 +1,23 @@
.. currentmodule:: werkzeug
+Version 0.16.0
+--------------
+
+Released 2019-09-19
+
+- Deprecate most top-level attributes provided by the ``werkzeug``
+ module in favor of direct imports. The deprecated imports will be
+ removed in version 1.0.
+
+ For example, instead of ``import werkzeug; werkzeug.url_quote``, do
+ ``from werkzeug.urls import url_quote``. A deprecation warning will
+ show the correct import to use. ``werkzeug.exceptions`` and
+ ``werkzeug.routing`` should also be imported instead of accessed,
+ but for technical reasons can't show a warning.
+
+ :issue:`2`, :pr:`1640`
+
+
Version 0.15.6
--------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/PKG-INFO new/Werkzeug-0.16.0/PKG-INFO
--- old/Werkzeug-0.15.6/PKG-INFO 2019-09-04 22:08:14.000000000 +0200
+++ new/Werkzeug-0.16.0/PKG-INFO 2019-09-19 16:39:09.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: Werkzeug
-Version: 0.15.6
+Version: 0.16.0
Summary: The comprehensive WSGI web application library.
Home-page: https://palletsprojects.com/p/werkzeug/
Author: Armin Ronacher
@@ -113,6 +113,6 @@
Classifier: Topic :: Software Development :: Libraries :: Application
Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
-Provides-Extra: dev
Provides-Extra: watchdog
Provides-Extra: termcolor
+Provides-Extra: dev
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/Werkzeug.egg-info/PKG-INFO
new/Werkzeug-0.16.0/src/Werkzeug.egg-info/PKG-INFO
--- old/Werkzeug-0.15.6/src/Werkzeug.egg-info/PKG-INFO 2019-09-04
22:08:14.000000000 +0200
+++ new/Werkzeug-0.16.0/src/Werkzeug.egg-info/PKG-INFO 2019-09-19
16:39:09.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: Werkzeug
-Version: 0.15.6
+Version: 0.16.0
Summary: The comprehensive WSGI web application library.
Home-page: https://palletsprojects.com/p/werkzeug/
Author: Armin Ronacher
@@ -113,6 +113,6 @@
Classifier: Topic :: Software Development :: Libraries :: Application
Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
-Provides-Extra: dev
Provides-Extra: watchdog
Provides-Extra: termcolor
+Provides-Extra: dev
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/Werkzeug.egg-info/SOURCES.txt
new/Werkzeug-0.16.0/src/Werkzeug.egg-info/SOURCES.txt
--- old/Werkzeug-0.15.6/src/Werkzeug.egg-info/SOURCES.txt 2019-09-04
22:08:14.000000000 +0200
+++ new/Werkzeug-0.16.0/src/Werkzeug.egg-info/SOURCES.txt 2019-09-19
16:39:09.000000000 +0200
@@ -242,7 +242,6 @@
src/werkzeug/wrappers/user_agent.py
tests/__init__.py
tests/conftest.py
-tests/test_compat.py
tests/test_datastructures.py
tests/test_debug.py
tests/test_exceptions.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/__init__.py
new/Werkzeug-0.16.0/src/werkzeug/__init__.py
--- old/Werkzeug-0.15.6/src/werkzeug/__init__.py 2019-09-04
21:57:26.000000000 +0200
+++ new/Werkzeug-0.16.0/src/werkzeug/__init__.py 2019-09-19
16:31:47.000000000 +0200
@@ -1,233 +1,221 @@
-# -*- coding: utf-8 -*-
"""
- werkzeug
- ~~~~~~~~
+werkzeug
+~~~~~~~~
- Werkzeug is the Swiss Army knife of Python web development.
+Werkzeug is the Swiss Army knife of Python web development.
- It provides useful classes and functions for any WSGI application to make
- the life of a python web developer much easier. All of the provided
- classes are independent from each other so you can mix it with any other
- library.
+It provides useful classes and functions for any WSGI application to
+make the life of a Python web developer much easier. All of the provided
+classes are independent from each other so you can mix it with any other
+library.
-
- :copyright: 2007 Pallets
- :license: BSD-3-Clause
+:copyright: 2007 Pallets
+:license: BSD-3-Clause
"""
-import sys
from types import ModuleType
-__version__ = "0.15.6"
+__version__ = "0.16.0"
+
+__all__ = ["run_simple", "Client", "Request", "Response", "__version__"]
+
+
+class _DeprecatedImportModule(ModuleType):
+ """Wrap a module in order to raise """
-# This import magic raises concerns quite often which is why the implementation
-# and motivation is explained here in detail now.
-#
-# The majority of the functions and classes provided by Werkzeug work on the
-# HTTP and WSGI layer. There is no useful grouping for those which is why
-# they are all importable from "werkzeug" instead of the modules where they are
-# implemented. The downside of that is, that now everything would be loaded at
-# once, even if unused.
-#
-# The implementation of a lazy-loading module in this file replaces the
-# werkzeug package when imported from within. Attribute access to the werkzeug
-# module will then lazily import from the modules that implement the objects.
-
-# import mapping to objects in other modules
-all_by_module = {
- "werkzeug.debug": ["DebuggedApplication"],
- "werkzeug.local": [
- "Local",
- "LocalManager",
- "LocalProxy",
- "LocalStack",
- "release_local",
- ],
- "werkzeug.serving": ["run_simple"],
- "werkzeug.test": ["Client", "EnvironBuilder", "create_environ",
"run_wsgi_app"],
- "werkzeug.testapp": ["test_app"],
- "werkzeug.exceptions": ["abort", "Aborter"],
- "werkzeug.urls": [
- "url_decode",
- "url_encode",
- "url_quote",
- "url_quote_plus",
- "url_unquote",
- "url_unquote_plus",
- "url_fix",
- "Href",
- "iri_to_uri",
- "uri_to_iri",
- ],
- "werkzeug.formparser": ["parse_form_data"],
- "werkzeug.utils": [
- "escape",
- "environ_property",
- "append_slash_redirect",
- "redirect",
- "cached_property",
- "import_string",
- "unescape",
- "format_string",
- "find_modules",
- "header_property",
- "html",
- "xhtml",
- "HTMLBuilder",
- "validate_arguments",
- "ArgumentValidationError",
- "bind_arguments",
- "secure_filename",
- ],
- "werkzeug.wsgi": [
- "get_current_url",
- "get_host",
- "pop_path_info",
- "peek_path_info",
- "ClosingIterator",
- "FileWrapper",
- "make_line_iter",
- "LimitedStream",
- "responder",
- "wrap_file",
- "extract_path_info",
- ],
- "werkzeug.datastructures": [
- "MultiDict",
- "CombinedMultiDict",
- "Headers",
- "EnvironHeaders",
- "ImmutableList",
- "ImmutableDict",
- "ImmutableMultiDict",
- "TypeConversionDict",
- "ImmutableTypeConversionDict",
- "Accept",
- "MIMEAccept",
- "CharsetAccept",
- "LanguageAccept",
- "RequestCacheControl",
- "ResponseCacheControl",
- "ETags",
- "HeaderSet",
- "WWWAuthenticate",
- "Authorization",
- "FileMultiDict",
- "CallbackDict",
- "FileStorage",
- "OrderedMultiDict",
- "ImmutableOrderedMultiDict",
- ],
- "werkzeug.useragents": ["UserAgent"],
- "werkzeug.http": [
- "parse_etags",
- "parse_date",
- "http_date",
- "cookie_date",
- "parse_cache_control_header",
- "is_resource_modified",
- "parse_accept_header",
- "parse_set_header",
- "quote_etag",
- "unquote_etag",
- "generate_etag",
- "dump_header",
- "parse_list_header",
- "parse_dict_header",
- "parse_authorization_header",
- "parse_www_authenticate_header",
- "remove_entity_headers",
- "is_entity_header",
- "remove_hop_by_hop_headers",
- "parse_options_header",
- "dump_options_header",
- "is_hop_by_hop_header",
- "unquote_header_value",
- "quote_header_value",
- "HTTP_STATUS_CODES",
- "dump_cookie",
- "parse_cookie",
- ],
- "werkzeug.wrappers": [
- "BaseResponse",
- "BaseRequest",
- "Request",
- "Response",
- "AcceptMixin",
- "ETagRequestMixin",
- "ETagResponseMixin",
- "ResponseStreamMixin",
- "CommonResponseDescriptorsMixin",
- "UserAgentMixin",
- "AuthorizationMixin",
- "WWWAuthenticateMixin",
- "CommonRequestDescriptorsMixin",
- ],
- "werkzeug.middleware.dispatcher": ["DispatcherMiddleware"],
- "werkzeug.middleware.shared_data": ["SharedDataMiddleware"],
- "werkzeug.security": ["generate_password_hash", "check_password_hash"],
- # the undocumented easteregg ;-)
- "werkzeug._internal": ["_easteregg"],
-}
-
-# modules that should be imported when accessed as attributes of werkzeug
-attribute_modules = frozenset(["exceptions", "routing"])
-
-object_origins = {}
-for module, items in all_by_module.items():
- for item in items:
- object_origins[item] = module
-
-
-class module(ModuleType):
- """Automatically import objects from the modules."""
-
- def __getattr__(self, name):
- if name in object_origins:
- module = __import__(object_origins[name], None, None, [name])
- for extra_name in all_by_module[module.__name__]:
- setattr(self, extra_name, getattr(module, extra_name))
- return getattr(module, name)
- elif name in attribute_modules:
- __import__("werkzeug." + name)
- return ModuleType.__getattribute__(self, name)
+ def __init__(self, name, available, removed_in):
+ import sys
+
+ super(_DeprecatedImportModule, self).__init__(name) # noqa F821
+ self._real_module = sys.modules[name] # noqa F821
+ sys.modules[name] = self
+ self._removed_in = removed_in
+ self._origin = {item: mod for mod, items in available.items() for item
in items}
+ mod_all = getattr(self._real_module, "__all__", dir(self._real_module))
+ self.__all__ = sorted(mod_all + list(self._origin))
+
+ def __getattr__(self, item):
+ # Don't export internal variables.
+ if item in {"_real_module", "_origin", "_removed_in"}:
+ raise AttributeError(item)
+
+ if item in self._origin:
+ from importlib import import_module
+
+ origin = self._origin[item]
+
+ if origin == ".":
+ # No warning for the "submodule as attribute" case, it's way
too messy
+ # and unreliable to try to distinguish 'from werkzueug import
+ # exceptions' and 'import werkzeug; werkzeug.exceptions'.
+ value = import_module(origin + item, self.__name__)
+ else:
+ from warnings import warn
+
+ # Import the module, get the attribute, and show a warning
about where
+ # to correctly import it from.
+ mod = import_module(origin, self.__name__.rsplit(".")[0])
+ value = getattr(mod, item)
+ warn(
+ "The import '{name}.{item}' is deprecated and will be
removed in"
+ " {removed_in}. Use 'from {name}{origin} import {item}'"
+ " instead.".format(
+ name=self.__name__,
+ item=item,
+ removed_in=self._removed_in,
+ origin=origin,
+ ),
+ DeprecationWarning,
+ stacklevel=2,
+ )
+ else:
+ value = getattr(self._real_module, item)
+
+ # Cache the value so it won't go through this process on subsequent
accesses.
+ setattr(self, item, value)
+ return value
def __dir__(self):
- """Just show what we want to show."""
- result = list(new_module.__all__)
- result.extend(
- (
- "__file__",
- "__doc__",
- "__all__",
- "__docformat__",
- "__name__",
- "__path__",
- "__package__",
- "__version__",
- )
- )
- return result
-
-
-# keep a reference to this module so that it's not garbage collected
-old_module = sys.modules["werkzeug"]
-
-
-# setup the new module and patch it into the dict of loaded modules
-new_module = sys.modules["werkzeug"] = module("werkzeug")
-new_module.__dict__.update(
+ return sorted(dir(self._real_module) + list(self._origin))
+
+
+del ModuleType
+
+_DeprecatedImportModule(
+ __name__,
{
- "__file__": __file__,
- "__package__": "werkzeug",
- "__path__": __path__,
- "__doc__": __doc__,
- "__version__": __version__,
- "__all__": tuple(object_origins) + tuple(attribute_modules),
- "__docformat__": "restructuredtext en",
- }
+ ".": ["exceptions", "routing"],
+ "._internal": ["_easteregg"],
+ ".datastructures": [
+ "Accept",
+ "Authorization",
+ "CallbackDict",
+ "CharsetAccept",
+ "CombinedMultiDict",
+ "EnvironHeaders",
+ "ETags",
+ "FileMultiDict",
+ "FileStorage",
+ "Headers",
+ "HeaderSet",
+ "ImmutableDict",
+ "ImmutableList",
+ "ImmutableMultiDict",
+ "ImmutableOrderedMultiDict",
+ "ImmutableTypeConversionDict",
+ "LanguageAccept",
+ "MIMEAccept",
+ "MultiDict",
+ "OrderedMultiDict",
+ "RequestCacheControl",
+ "ResponseCacheControl",
+ "TypeConversionDict",
+ "WWWAuthenticate",
+ ],
+ ".debug": ["DebuggedApplication"],
+ ".exceptions": ["abort", "Aborter"],
+ ".formparser": ["parse_form_data"],
+ ".http": [
+ "cookie_date",
+ "dump_cookie",
+ "dump_header",
+ "dump_options_header",
+ "generate_etag",
+ "http_date",
+ "HTTP_STATUS_CODES",
+ "is_entity_header",
+ "is_hop_by_hop_header",
+ "is_resource_modified",
+ "parse_accept_header",
+ "parse_authorization_header",
+ "parse_cache_control_header",
+ "parse_cookie",
+ "parse_date",
+ "parse_dict_header",
+ "parse_etags",
+ "parse_list_header",
+ "parse_options_header",
+ "parse_set_header",
+ "parse_www_authenticate_header",
+ "quote_etag",
+ "quote_header_value",
+ "remove_entity_headers",
+ "remove_hop_by_hop_headers",
+ "unquote_etag",
+ "unquote_header_value",
+ ],
+ ".local": [
+ "Local",
+ "LocalManager",
+ "LocalProxy",
+ "LocalStack",
+ "release_local",
+ ],
+ ".middleware.dispatcher": ["DispatcherMiddleware"],
+ ".middleware.shared_data": ["SharedDataMiddleware"],
+ ".security": ["check_password_hash", "generate_password_hash"],
+ ".test": ["create_environ", "EnvironBuilder", "run_wsgi_app"],
+ ".testapp": ["test_app"],
+ ".urls": [
+ "Href",
+ "iri_to_uri",
+ "uri_to_iri",
+ "url_decode",
+ "url_encode",
+ "url_fix",
+ "url_quote",
+ "url_quote_plus",
+ "url_unquote",
+ "url_unquote_plus",
+ ],
+ ".useragents": ["UserAgent"],
+ ".utils": [
+ "append_slash_redirect",
+ "ArgumentValidationError",
+ "bind_arguments",
+ "cached_property",
+ "environ_property",
+ "escape",
+ "find_modules",
+ "format_string",
+ "header_property",
+ "html",
+ "HTMLBuilder",
+ "import_string",
+ "redirect",
+ "secure_filename",
+ "unescape",
+ "validate_arguments",
+ "xhtml",
+ ],
+ ".wrappers.accept": ["AcceptMixin"],
+ ".wrappers.auth": ["AuthorizationMixin", "WWWAuthenticateMixin"],
+ ".wrappers.base_request": ["BaseRequest"],
+ ".wrappers.base_response": ["BaseResponse"],
+ ".wrappers.common_descriptors": [
+ "CommonRequestDescriptorsMixin",
+ "CommonResponseDescriptorsMixin",
+ ],
+ ".wrappers.etag": ["ETagRequestMixin", "ETagResponseMixin"],
+ ".wrappers.response": ["ResponseStreamMixin"],
+ ".wrappers.user_agent": ["UserAgentMixin"],
+ ".wsgi": [
+ "ClosingIterator",
+ "extract_path_info",
+ "FileWrapper",
+ "get_current_url",
+ "get_host",
+ "LimitedStream",
+ "make_line_iter",
+ "peek_path_info",
+ "pop_path_info",
+ "responder",
+ "wrap_file",
+ ],
+ },
+ "Werkzeug 1.0",
)
-
-# Due to bootstrapping issues we need to import exceptions here.
-# Don't ask :-(
-__import__("werkzeug.exceptions")
+from .serving import run_simple
+from .test import Client
+from .wrappers import Request
+from .wrappers import Response
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/contrib/sessions.py
new/Werkzeug-0.16.0/src/werkzeug/contrib/sessions.py
--- old/Werkzeug-0.15.6/src/werkzeug/contrib/sessions.py 2019-09-04
21:57:22.000000000 +0200
+++ new/Werkzeug-0.16.0/src/werkzeug/contrib/sessions.py 2019-09-19
16:30:28.000000000 +0200
@@ -67,9 +67,9 @@
from .._compat import text_type
from ..datastructures import CallbackDict
from ..filesystem import get_filesystem_encoding
+from ..http import dump_cookie
+from ..http import parse_cookie
from ..posixemulation import rename
-from ..utils import dump_cookie
-from ..utils import parse_cookie
from ..wsgi import ClosingIterator
warnings.warn(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/datastructures.py
new/Werkzeug-0.16.0/src/werkzeug/datastructures.py
--- old/Werkzeug-0.15.6/src/werkzeug/datastructures.py 2019-09-04
21:57:22.000000000 +0200
+++ new/Werkzeug-0.16.0/src/werkzeug/datastructures.py 2019-09-19
16:30:28.000000000 +0200
@@ -14,6 +14,7 @@
from copy import deepcopy
from itertools import repeat
+from . import exceptions
from ._compat import BytesIO
from ._compat import collections_abc
from ._compat import integer_types
@@ -2839,7 +2840,6 @@
# circular dependencies
-from . import exceptions
from .http import dump_header
from .http import dump_options_header
from .http import generate_etag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/exceptions.py
new/Werkzeug-0.16.0/src/werkzeug/exceptions.py
--- old/Werkzeug-0.15.6/src/werkzeug/exceptions.py 2019-09-04
21:57:22.000000000 +0200
+++ new/Werkzeug-0.16.0/src/werkzeug/exceptions.py 2019-09-19
16:30:28.000000000 +0200
@@ -59,18 +59,12 @@
"""
import sys
-import werkzeug
-
-# Because of bootstrapping reasons we need to manually patch ourselves
-# onto our parent module.
-werkzeug.exceptions = sys.modules[__name__]
-
from ._compat import implements_to_string
from ._compat import integer_types
from ._compat import iteritems
from ._compat import text_type
from ._internal import _get_environ
-from .wrappers import Response
+from .utils import escape
@implements_to_string
@@ -141,6 +135,8 @@
@property
def name(self):
"""The status name."""
+ from .http import HTTP_STATUS_CODES
+
return HTTP_STATUS_CODES.get(self.code, "Unknown Error")
def get_description(self, environ=None):
@@ -176,6 +172,8 @@
on how the request looked like.
:return: a :class:`Response` object or a subclass thereof.
"""
+ from .wrappers.response import Response
+
if self.response is not None:
return self.response
if environ is not None:
@@ -776,11 +774,6 @@
_aborter = Aborter()
-
#: An exception that is used to signal both a :exc:`KeyError` and a
#: :exc:`BadRequest`. Used by many of the datastructures.
BadRequestKeyError = BadRequest.wrap(KeyError)
-
-# imported here because of circular dependencies of werkzeug.utils
-from .http import HTTP_STATUS_CODES
-from .utils import escape
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/formparser.py
new/Werkzeug-0.16.0/src/werkzeug/formparser.py
--- old/Werkzeug-0.15.6/src/werkzeug/formparser.py 2019-08-05
17:21:58.000000000 +0200
+++ new/Werkzeug-0.16.0/src/werkzeug/formparser.py 2019-09-17
20:04:59.000000000 +0200
@@ -16,6 +16,7 @@
from itertools import repeat
from itertools import tee
+from . import exceptions
from ._compat import BytesIO
from ._compat import text_type
from ._compat import to_native
@@ -581,6 +582,3 @@
form = (p[1] for p in formstream if p[0] == "form")
files = (p[1] for p in filestream if p[0] == "file")
return self.cls(form), self.cls(files)
-
-
-from . import exceptions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/http.py
new/Werkzeug-0.16.0/src/werkzeug/http.py
--- old/Werkzeug-0.15.6/src/werkzeug/http.py 2019-09-04 21:57:22.000000000
+0200
+++ new/Werkzeug-0.16.0/src/werkzeug/http.py 2019-09-19 16:30:28.000000000
+0200
@@ -1144,6 +1144,8 @@
value = to_bytes(value, charset)
if path is not None:
+ from .urls import iri_to_uri
+
path = iri_to_uri(path, charset)
domain = _make_cookie_domain(domain)
if isinstance(max_age, timedelta):
@@ -1235,7 +1237,7 @@
return 0 <= start < length
-# circular dependency fun
+# circular dependencies
from .datastructures import Accept
from .datastructures import Authorization
from .datastructures import ContentRange
@@ -1246,58 +1248,12 @@
from .datastructures import RequestCacheControl
from .datastructures import TypeConversionDict
from .datastructures import WWWAuthenticate
-from .urls import iri_to_uri
-
-# DEPRECATED
-from .datastructures import CharsetAccept as _CharsetAccept
-from .datastructures import Headers as _Headers
-from .datastructures import LanguageAccept as _LanguageAccept
-from .datastructures import MIMEAccept as _MIMEAccept
-
-
-class MIMEAccept(_MIMEAccept):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.http.MIMEAccept' has moved to 'werkzeug"
- ".datastructures.MIMEAccept' as of version 0.5. This old"
- " import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(MIMEAccept, self).__init__(*args, **kwargs)
-
-
-class CharsetAccept(_CharsetAccept):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.http.CharsetAccept' has moved to 'werkzeug"
- ".datastructures.CharsetAccept' as of version 0.5. This old"
- " import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(CharsetAccept, self).__init__(*args, **kwargs)
-
-
-class LanguageAccept(_LanguageAccept):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.http.LanguageAccept' has moved to 'werkzeug"
- ".datastructures.LanguageAccept' as of version 0.5. This"
- " old import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(LanguageAccept, self).__init__(*args, **kwargs)
+from werkzeug import _DeprecatedImportModule
-class Headers(_Headers):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.http.Headers' has moved to 'werkzeug"
- ".datastructures.Headers' as of version 0.5. This old"
- " import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(Headers, self).__init__(*args, **kwargs)
+_DeprecatedImportModule(
+ __name__,
+ {".datastructures": ["CharsetAccept", "Headers", "LanguageAccept",
"MIMEAccept"]},
+ "Werkzeug 1.0",
+)
+del _DeprecatedImportModule
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/serving.py
new/Werkzeug-0.16.0/src/werkzeug/serving.py
--- old/Werkzeug-0.15.6/src/werkzeug/serving.py 2019-09-04 21:57:22.000000000
+0200
+++ new/Werkzeug-0.16.0/src/werkzeug/serving.py 2019-09-19 16:30:28.000000000
+0200
@@ -41,7 +41,6 @@
import socket
import sys
-import werkzeug
from ._compat import PY2
from ._compat import reraise
from ._compat import WIN
@@ -174,7 +173,9 @@
@property
def server_version(self):
- return "Werkzeug/" + werkzeug.__version__
+ from . import __version__
+
+ return "Werkzeug/" + __version__
def make_environ(self):
request_url = url_parse(self.path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/testapp.py
new/Werkzeug-0.16.0/src/werkzeug/testapp.py
--- old/Werkzeug-0.15.6/src/werkzeug/testapp.py 2019-08-05 17:21:58.000000000
+0200
+++ new/Werkzeug-0.16.0/src/werkzeug/testapp.py 2019-09-17 23:03:18.000000000
+0200
@@ -14,7 +14,7 @@
import sys
from textwrap import wrap
-import werkzeug
+from . import __version__ as _werkzeug_version
from .utils import escape
from .wrappers import BaseRequest as Request
from .wrappers import BaseResponse as Response
@@ -205,7 +205,7 @@
"os": escape(os.name),
"api_version": sys.api_version,
"byteorder": sys.byteorder,
- "werkzeug_version": werkzeug.__version__,
+ "werkzeug_version": _werkzeug_version,
"python_eggs": "\n".join(python_eggs),
"wsgi_env": "\n".join(wsgi_env),
"sys_path": "\n".join(sys_path),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/urls.py
new/Werkzeug-0.16.0/src/werkzeug/urls.py
--- old/Werkzeug-0.15.6/src/werkzeug/urls.py 2019-09-04 21:57:22.000000000
+0200
+++ new/Werkzeug-0.16.0/src/werkzeug/urls.py 2019-09-19 16:30:28.000000000
+0200
@@ -31,8 +31,6 @@
from ._compat import try_coerce_native
from ._internal import _decode_idna
from ._internal import _encode_idna
-from .datastructures import iter_multi_items
-from .datastructures import MultiDict
# A regular expression for what a valid schema looks like
_scheme_re = re.compile(r"^[a-zA-Z0-9+-.]+$")
@@ -415,6 +413,8 @@
def _url_encode_impl(obj, charset, encode_keys, sort, key):
+ from .datastructures import iter_multi_items
+
iterable = iter_multi_items(obj)
if sort:
iterable = sorted(iterable, key=key)
@@ -825,6 +825,8 @@
or `None` the default :class:`MultiDict` is used.
"""
if cls is None:
+ from .datastructures import MultiDict
+
cls = MultiDict
if isinstance(s, text_type) and not isinstance(separator, text_type):
separator = separator.decode(charset or "ascii")
@@ -884,6 +886,8 @@
return decoder
if cls is None:
+ from .datastructures import MultiDict
+
cls = MultiDict
return cls(decoder)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/useragents.py
new/Werkzeug-0.16.0/src/werkzeug/useragents.py
--- old/Werkzeug-0.15.6/src/werkzeug/useragents.py 2019-09-04
21:57:22.000000000 +0200
+++ new/Werkzeug-0.16.0/src/werkzeug/useragents.py 2019-09-19
16:30:28.000000000 +0200
@@ -12,7 +12,6 @@
:license: BSD-3-Clause
"""
import re
-import warnings
class UserAgentParser(object):
@@ -203,18 +202,9 @@
return "<%s %r/%s>" % (self.__class__.__name__, self.browser,
self.version)
-# DEPRECATED
-from .wrappers import UserAgentMixin as _UserAgentMixin
+from werkzeug import _DeprecatedImportModule
-
-class UserAgentMixin(_UserAgentMixin):
- @property
- def user_agent(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.useragents.UserAgentMixin' should be imported"
- " from 'werkzeug.wrappers.UserAgentMixin'. This old import"
- " will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- return super(_UserAgentMixin, self).user_agent
+_DeprecatedImportModule(
+ __name__, {".wrappers.user_agent": ["UserAgentMixin"]}, "Werkzeug 1.0"
+)
+del _DeprecatedImportModule
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/utils.py
new/Werkzeug-0.16.0/src/werkzeug/utils.py
--- old/Werkzeug-0.15.6/src/werkzeug/utils.py 2019-09-04 21:57:22.000000000
+0200
+++ new/Werkzeug-0.16.0/src/werkzeug/utils.py 2019-09-19 16:30:28.000000000
+0200
@@ -15,7 +15,6 @@
import pkgutil
import re
import sys
-import warnings
from ._compat import iteritems
from ._compat import PY2
@@ -757,80 +756,19 @@
)
-# DEPRECATED
-from .datastructures import CombinedMultiDict as _CombinedMultiDict
-from .datastructures import EnvironHeaders as _EnvironHeaders
-from .datastructures import Headers as _Headers
-from .datastructures import MultiDict as _MultiDict
-from .http import dump_cookie as _dump_cookie
-from .http import parse_cookie as _parse_cookie
+from werkzeug import _DeprecatedImportModule
-
-class MultiDict(_MultiDict):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.utils.MultiDict' has moved to 'werkzeug"
- ".datastructures.MultiDict' as of version 0.5. This old"
- " import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(MultiDict, self).__init__(*args, **kwargs)
-
-
-class CombinedMultiDict(_CombinedMultiDict):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.utils.CombinedMultiDict' has moved to 'werkzeug"
- ".datastructures.CombinedMultiDict' as of version 0.5. This"
- " old import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(CombinedMultiDict, self).__init__(*args, **kwargs)
-
-
-class Headers(_Headers):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.utils.Headers' has moved to 'werkzeug"
- ".datastructures.Headers' as of version 0.5. This old"
- " import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(Headers, self).__init__(*args, **kwargs)
-
-
-class EnvironHeaders(_EnvironHeaders):
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.utils.EnvironHeaders' has moved to 'werkzeug"
- ".datastructures.EnvironHeaders' as of version 0.5. This"
- " old import will be removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(EnvironHeaders, self).__init__(*args, **kwargs)
-
-
-def parse_cookie(*args, **kwargs):
- warnings.warn(
- "'werkzeug.utils.parse_cookie' as moved to 'werkzeug.http"
- ".parse_cookie' as of version 0.5. This old import will be"
- " removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- return _parse_cookie(*args, **kwargs)
-
-
-def dump_cookie(*args, **kwargs):
- warnings.warn(
- "'werkzeug.utils.dump_cookie' as moved to 'werkzeug.http"
- ".dump_cookie' as of version 0.5. This old import will be"
- " removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- return _dump_cookie(*args, **kwargs)
+_DeprecatedImportModule(
+ __name__,
+ {
+ ".datastructures": [
+ "CombinedMultiDict",
+ "EnvironHeaders",
+ "Headers",
+ "MultiDict",
+ ],
+ ".http": ["dump_cookie", "parse_cookie"],
+ },
+ "Werkzeug 1.0",
+)
+del _DeprecatedImportModule
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/wrappers/user_agent.py
new/Werkzeug-0.16.0/src/werkzeug/wrappers/user_agent.py
--- old/Werkzeug-0.15.6/src/werkzeug/wrappers/user_agent.py 2019-08-05
17:21:58.000000000 +0200
+++ new/Werkzeug-0.16.0/src/werkzeug/wrappers/user_agent.py 2019-09-17
23:03:18.000000000 +0200
@@ -1,3 +1,4 @@
+from ..useragents import UserAgent
from ..utils import cached_property
@@ -10,6 +11,4 @@
@cached_property
def user_agent(self):
"""The current user agent."""
- from ..useragents import UserAgent
-
return UserAgent(self.environ)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/src/werkzeug/wsgi.py
new/Werkzeug-0.16.0/src/werkzeug/wsgi.py
--- old/Werkzeug-0.15.6/src/werkzeug/wsgi.py 2019-09-04 21:57:22.000000000
+0200
+++ new/Werkzeug-0.16.0/src/werkzeug/wsgi.py 2019-09-19 16:30:28.000000000
+0200
@@ -10,7 +10,6 @@
"""
import io
import re
-import warnings
from functools import partial
from functools import update_wrapper
from itertools import chain
@@ -1001,67 +1000,14 @@
return True
-# DEPRECATED
-from .middleware.dispatcher import DispatcherMiddleware as
_DispatcherMiddleware
-from .middleware.http_proxy import ProxyMiddleware as _ProxyMiddleware
-from .middleware.shared_data import SharedDataMiddleware as
_SharedDataMiddleware
+from werkzeug import _DeprecatedImportModule
-
-class ProxyMiddleware(_ProxyMiddleware):
- """
- .. deprecated:: 0.15
- ``werkzeug.wsgi.ProxyMiddleware`` has moved to
- :mod:`werkzeug.middleware.http_proxy`. This import will be
- removed in 1.0.
- """
-
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.wsgi.ProxyMiddleware' has moved to 'werkzeug"
- ".middleware.http_proxy.ProxyMiddleware'. This import is"
- " deprecated as of version 0.15 and will be removed in"
- " version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(ProxyMiddleware, self).__init__(*args, **kwargs)
-
-
-class SharedDataMiddleware(_SharedDataMiddleware):
- """
- .. deprecated:: 0.15
- ``werkzeug.wsgi.SharedDataMiddleware`` has moved to
- :mod:`werkzeug.middleware.shared_data`. This import will be
- removed in 1.0.
- """
-
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.wsgi.SharedDataMiddleware' has moved to"
- " 'werkzeug.middleware.shared_data.SharedDataMiddleware'."
- " This import is deprecated as of version 0.15 and will be"
- " removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(SharedDataMiddleware, self).__init__(*args, **kwargs)
-
-
-class DispatcherMiddleware(_DispatcherMiddleware):
- """
- .. deprecated:: 0.15
- ``werkzeug.wsgi.DispatcherMiddleware`` has moved to
- :mod:`werkzeug.middleware.dispatcher`. This import will be
- removed in 1.0.
- """
-
- def __init__(self, *args, **kwargs):
- warnings.warn(
- "'werkzeug.wsgi.DispatcherMiddleware' has moved to"
- " 'werkzeug.middleware.dispatcher.DispatcherMiddleware'."
- " This import is deprecated as of version 0.15 and will be"
- " removed in version 1.0.",
- DeprecationWarning,
- stacklevel=2,
- )
- super(DispatcherMiddleware, self).__init__(*args, **kwargs)
+_DeprecatedImportModule(
+ __name__,
+ {
+ ".middleware.dispatcher": ["DispatcherMiddleware"],
+ ".middleware.http_proxy": ["ProxyMiddleware"],
+ ".middleware.shared_data": ["SharedDataMiddleware"],
+ },
+ "Werkzeug 1.0",
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/tests/contrib/test_securecookie.py
new/Werkzeug-0.16.0/tests/contrib/test_securecookie.py
--- old/Werkzeug-0.15.6/tests/contrib/test_securecookie.py 2019-09-04
21:57:22.000000000 +0200
+++ new/Werkzeug-0.16.0/tests/contrib/test_securecookie.py 2019-09-19
16:30:28.000000000 +0200
@@ -14,7 +14,7 @@
from werkzeug._compat import to_native
from werkzeug.contrib.securecookie import SecureCookie
-from werkzeug.utils import parse_cookie
+from werkzeug.http import parse_cookie
from werkzeug.wrappers import Request
from werkzeug.wrappers import Response
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Werkzeug-0.15.6/tests/test_compat.py
new/Werkzeug-0.16.0/tests/test_compat.py
--- old/Werkzeug-0.15.6/tests/test_compat.py 2019-09-04 21:57:22.000000000
+0200
+++ new/Werkzeug-0.16.0/tests/test_compat.py 1970-01-01 01:00:00.000000000
+0100
@@ -1,40 +0,0 @@
-# -*- coding: utf-8 -*-
-# flake8: noqa
-"""
- tests.compat
- ~~~~~~~~~~~~
-
- Ensure that old stuff does not break on update.
-
- :copyright: 2007 Pallets
- :license: BSD-3-Clause
-"""
-from werkzeug.test import create_environ
-from werkzeug.wrappers import Response
-
-
-def test_old_imports():
- from werkzeug.utils import (
- Headers,
- MultiDict,
- CombinedMultiDict,
- Headers,
- EnvironHeaders,
- )
- from werkzeug.http import (
- Accept,
- MIMEAccept,
- CharsetAccept,
- LanguageAccept,
- ETags,
- HeaderSet,
- WWWAuthenticate,
- Authorization,
- )
-
-
-def test_exposed_werkzeug_mod():
- import werkzeug
-
- for key in werkzeug.__all__:
- getattr(werkzeug, key)