summaryrefslogtreecommitdiff
path: root/src/werkzeug/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/werkzeug/__init__.py')
-rw-r--r--src/werkzeug/__init__.py243
1 files changed, 162 insertions, 81 deletions
diff --git a/src/werkzeug/__init__.py b/src/werkzeug/__init__.py
index f8d0d447..5a0c4e9e 100644
--- a/src/werkzeug/__init__.py
+++ b/src/werkzeug/__init__.py
@@ -14,12 +14,10 @@
:copyright: 2007 Pallets
:license: BSD-3-Clause
"""
-from types import ModuleType
import sys
+from types import ModuleType
-from werkzeug._compat import iteritems
-
-__version__ = '0.15.dev'
+__version__ = "0.15.dev"
# This import magic raises concerns quite often which is why the implementation
# and motivation is explained here in detail now.
@@ -34,82 +32,153 @@ __version__ = '0.15.dev'
# 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',
- 'dump_cookie', 'parse_cookie', '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'],
- 'werkzeug.wrappers': ['BaseResponse', 'BaseRequest', 'Request', 'Response',
- 'AcceptMixin', 'ETagRequestMixin',
- 'ETagResponseMixin', 'ResponseStreamMixin',
- 'CommonResponseDescriptorsMixin', 'UserAgentMixin',
- 'AuthorizationMixin', 'WWWAuthenticateMixin',
- 'CommonRequestDescriptorsMixin'],
+ "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",
+ "dump_cookie",
+ "parse_cookie",
+ "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",
+ ],
+ "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'],
+ "werkzeug.security": ["generate_password_hash", "check_password_hash"],
# the undocumented easteregg ;-)
- 'werkzeug._internal': ['_easteregg']
+ "werkzeug._internal": ["_easteregg"],
}
# modules that should be imported when accessed as attributes of werkzeug
-attribute_modules = frozenset(['exceptions', 'routing'])
-
+attribute_modules = frozenset(["exceptions", "routing"])
object_origins = {}
-for module, items in iteritems(all_by_module):
+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):
@@ -119,34 +188,46 @@ class module(ModuleType):
setattr(self, extra_name, getattr(module, extra_name))
return getattr(module, name)
elif name in attribute_modules:
- __import__('werkzeug.' + name)
+ __import__("werkzeug." + name)
return ModuleType.__getattribute__(self, name)
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__'))
+ 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']
+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({
- '__file__': __file__,
- '__package__': 'werkzeug',
- '__path__': __path__,
- '__doc__': __doc__,
- '__version__': __version__,
- '__all__': tuple(object_origins) + tuple(attribute_modules),
- '__docformat__': 'restructuredtext en'
-})
+new_module = sys.modules["werkzeug"] = module("werkzeug")
+new_module.__dict__.update(
+ {
+ "__file__": __file__,
+ "__package__": "werkzeug",
+ "__path__": __path__,
+ "__doc__": __doc__,
+ "__version__": __version__,
+ "__all__": tuple(object_origins) + tuple(attribute_modules),
+ "__docformat__": "restructuredtext en",
+ }
+)
# Due to bootstrapping issues we need to import exceptions here.
# Don't ask :-(
-__import__('werkzeug.exceptions')
+__import__("werkzeug.exceptions")