Skip to main content

The Pyramid Web Framework, a Pylons project

Project description

Pyramid

1.8-branch Travis CI Status 1.8-branch Documentation Status IRC Freenode

Pyramid is a small, fast, down-to-earth, open source Python web framework. It makes real-world web application development and deployment more fun, more predictable, and more productive.

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response

def hello_world(request):
    return Response('Hello %(name)s!' % request.matchdict)

if __name__ == '__main__':
    config = Configurator()
    config.add_route('hello', '/hello/{name}')
    config.add_view(hello_world, route_name='hello')
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()

Pyramid is a project of the Pylons Project.

Support and Documentation

See Pyramid Support and Development for documentation, reporting bugs, and getting support.

Developing and Contributing

See HACKING.txt and contributing.md for guidelines on running tests, adding features, coding style, and updating documentation when developing in or contributing to Pyramid.

License

Pyramid is offered under the BSD-derived Repoze Public License.

Authors

Pyramid is made available by Agendaless Consulting and a team of contributors.

1.8.4 (2017-06-11)

Bug Fixes

Documentation Changes

1.8.3 (2017-03-12)

Bug Fixes

  • Fix a reference cycle causing memory leaks in which the registry would keep a Configurator instance alive even after the configurator was discarded. Another fix was also added for the global_registries object in which the registry was stored in a closure preventing it from being deallocated. See https://github.com/Pylons/pyramid/pull/2973

  • Fix a bug directly invoking pyramid.scripts.pserve.main with the --reload option in which sys.argv is always used in the subprocess instead of the supplied argv. See https://github.com/Pylons/pyramid/pull/2974

Documentation Changes

1.8.2 (2017-02-20)

1.8.1 (2017-01-24)

  • Restore the pyramid.registry.Registry signature that forwards extra *args, **kwargs to zope.interface.registry.Components allowing implementations to specify a custom registry with bases. See https://github.com/Pylons/pyramid/pull/2918

1.8 (2017-01-21)

  • No major changes from 1.8b1.

1.8b1 (2017-01-17)

Features

Documentation Changes

1.8a1 (2016-12-25)

Backward Incompatibilities

  • Support for the IContextURL interface that was deprecated in Pyramid 1.3 has been removed. See https://github.com/Pylons/pyramid/pull/2822

  • Following the Pyramid deprecation period (1.6 -> 1.8), daemon support for pserve has been removed. This includes removing the daemon commands (start, stop, restart, status) as well as the following arguments: --daemon, --pid-file, --log-file, --monitor-restart, --status, --user, --group, --stop-daemon

    To run your server as a daemon you should use a process manager instead of pserve.

    See https://github.com/Pylons/pyramid/pull/2615

  • pcreate is now interactive by default. You will be prompted if a file already exists with different content. Previously if there were similar files it would silently skip them unless you specified --interactive or --overwrite. See https://github.com/Pylons/pyramid/pull/2775

  • Removed undocumented argument cachebust_match from pyramid.static.static_view. This argument was shipped accidentally in Pyramid 1.6. See https://github.com/Pylons/pyramid/pull/2681

  • Change static view to avoid setting the Content-Encoding response header to an encoding guessed using Python’s mimetypes module. This was causing clients to decode the content of gzipped files when downloading them. The client would end up with a foo.txt.gz file on disk that was already decoded, thus should really be foo.txt. Also, the Content-Encoding should only have been used if the client itself broadcast support for the encoding via Accept-Encoding request headers. See https://github.com/Pylons/pyramid/pull/2810

  • Settings are no longer accessible as attributes on the settings object (e.g. request.registry.settings.foo). This was deprecated in Pyramid 1.2. See https://github.com/Pylons/pyramid/pull/2823

Features

  • Python 3.6 compatibility. https://github.com/Pylons/pyramid/issues/2835

  • pcreate learned about --package-name to allow you to create a new project in an existing folder with a different package name than the project name. See https://github.com/Pylons/pyramid/pull/2783

  • The _get_credentials private method of BasicAuthAuthenticationPolicy has been extracted into standalone function extract_http_basic_credentials in pyramid.authentication module, this function extracts HTTP Basic credentials from a request object, and returns them as a named tuple. See https://github.com/Pylons/pyramid/pull/2662

  • Pyramid 1.4 silently dropped a feature of the configurator that has been restored. It’s again possible for action discriminators to conflict across different action orders. See https://github.com/Pylons/pyramid/pull/2757

  • pyramid.paster.bootstrap and its sibling pyramid.scripting.prepare can now be used as context managers to automatically invoke the closer and pop threadlocals off of the stack to prevent memory leaks. See https://github.com/Pylons/pyramid/pull/2760

  • Added pyramid.config.Configurator.add_exception_view and the pyramid.view.exception_view_config decorator. It is now possible using these methods or via the new exception_only=True option to add_view to add a view which will only be matched when handling an exception. Previously any exception views were also registered for a traversal context that inherited from the exception class which prevented any exception-only optimizations. See https://github.com/Pylons/pyramid/pull/2660

  • Added the exception_only boolean to pyramid.interfaces.IViewDeriverInfo which can be used by view derivers to determine if they are wrapping a view which only handles exceptions. This means that it is no longer necessary to perform request-time checks for request.exception to determine if the view is handling an exception - the pipeline can be optimized at config-time. See https://github.com/Pylons/pyramid/pull/2660

  • pserve should now work with gevent and other workers that need to monkeypatch the process, assuming the server and / or the app do so as soon as possible before importing the rest of pyramid. See https://github.com/Pylons/pyramid/pull/2797

  • Pyramid no longer copies the settings object passed to the pyramid.config.Configurator(settings=). The original dict is kept. See https://github.com/Pylons/pyramid/pull/2823

  • The csrf trusted origins setting may now be a whitespace-separated list of domains. Previously only a python list was allowed. Also, it can now be set using the PYRAMID_CSRF_TRUSTED_ORIGINS environment variable similar to other settings. See https://github.com/Pylons/pyramid/pull/2823

  • pserve --reload now uses the hupper library to monitor file changes. This comes with many improvements:

    • If the watchdog package is installed then monitoring will be done using inotify instead of cpu and disk-intensive polling.

    • The monitor is now a separate process that will not crash and starts up before any of your code.

    • The monitor will not restart the process after a crash until a file is saved.

    • The monitor works on windows.

    • You can now trigger a reload manually from a pyramid view or any other code via hupper.get_reloader().trigger_reload(). Kind of neat.

    • You can trigger a reload by issuing a SIGHUP to the monitor process.

    See https://github.com/Pylons/pyramid/pull/2805

  • A new [pserve] section is supported in your config files with a watch_files key that can configure pserve --reload to monitor custom file paths. See https://github.com/Pylons/pyramid/pull/2827

  • Allow streaming responses to be made from subclasses of pyramid.httpexceptions.HTTPException. Previously the response would be unrolled while testing for a body, making it impossible to stream a response. See https://github.com/Pylons/pyramid/pull/2863

  • Update starter, alchemy and zodb scaffolds to support IPv6 by using the new listen directives in waitress. See https://github.com/Pylons/pyramid/pull/2853

  • All p* scripts now use argparse instead of optparse. This improves their --help output as well as enabling nicer documentation of their options. See https://github.com/Pylons/pyramid/pull/2864

  • Any deferred configuration action registered via config.action may now depend on threadlocal state, such as asset overrides, being active when the action is executed. See https://github.com/Pylons/pyramid/pull/2873

  • Asset specifications for directories passed to config.add_translation_dirs now support overriding the entire asset specification, including the folder name. Previously only the package name was supported and the folder would always need to have the same name. See https://github.com/Pylons/pyramid/pull/2873

  • config.begin() will propagate the current threadlocal request through as long as the registry is the same. For example:

    request = Request.blank(...)
    config.begin(request)  # pushes a request
    config.begin()         # propagates the previous request through unchanged
    assert get_current_request() is request

    See https://github.com/Pylons/pyramid/pull/2873

  • Added a new callback option to config.set_default_csrf_options which can be used to determine per-request whether CSRF checking should be enabled to allow for a mix authentication methods. Only cookie-based methods generally require CSRF checking. See https://github.com/Pylons/pyramid/pull/2778

Bug Fixes

  • Fixed bug in proutes such that it now shows the correct view when a class and attr is involved. See: https://github.com/Pylons/pyramid/pull/2687

  • Fix a FutureWarning in Python 3.5 when using re.split on the format setting to the proutes script. See https://github.com/Pylons/pyramid/pull/2714

  • Fix a RuntimeWarning emitted by WebOb when using arbitrary objects as the userid in the AuthTktAuthenticationPolicy. This is now caught by the policy and the object is serialized as a base64 string to avoid the cryptic warning. Since the userid will be read back as a string on subsequent requests a more useful warning is emitted encouraging you to use a primitive type instead. See https://github.com/Pylons/pyramid/pull/2715

  • Pyramid 1.6 introduced the ability for an action to invoke another action. There was a bug in the way that config.add_view would interact with custom view derivers introduced in Pyramid 1.7 because the view’s discriminator cannot be computed until view derivers and view predicates have been created in earlier orders. Invoking an action from another action would trigger an unrolling of the pipeline and would compute discriminators before they were ready. The new behavior respects the order of the action and ensures the discriminators are not computed until dependent actions from previous orders have executed. See https://github.com/Pylons/pyramid/pull/2757

  • Fix bug in i18n where the default domain would always use the Germanic plural style, even if a different plural function is defined in the relevant messages file. See https://github.com/Pylons/pyramid/pull/2859

  • The config.override_asset method now occurs during pyramid.config.PHASE1_CONFIG such that it is ordered to execute before any calls to config.add_translation_dirs. See https://github.com/Pylons/pyramid/pull/2873

Deprecations

Documentation Changes

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyramid-1.8.4.tar.gz (2.6 MB view hashes)

Uploaded Source

Built Distribution

pyramid-1.8.4-py2.py3-none-any.whl (578.4 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page