Skip to main content

Rhetoric

https://pypip.in/v/Rhetoric/badge.png https://pypip.in/d/Rhetoric/badge.png https://api.travis-ci.org/avanov/Rhetoric.png https://coveralls.io/repos/avanov/Rhetoric/badge.png?branch=develop

Status: Beta, Unstable API.

Naive implementation of Pyramid-like routes for Django projects.

Why it is worth your while

There’s a great article on why Pyramid routing subsystem is so convenient for web developers - Pyramid view configuration: Let me count the ways.

As a person who uses Pyramid as a foundation for his pet-projects, and Django - at work, I (the author) had a good opportunity to compare two different approaches to routing configuration provided by these frameworks. And I totally agree with the key points of the article - Pyramid routes are more flexible and convenient for developers writing RESTful services.

The lack of flexibility of standard Django url dispatcher motivated me to create this project. I hope it will be useful for you, and if you liked the idea behind Rhetoric URL Dispatcher, please consider Pyramid Web Framework for one of your future projects.

Project premises

  • Rhetoric components try to follow corresponding Pyramid components whenever possible.

  • Integration with django applications shall be transparent to existing code whenever possible.

  • Performance of Rhetoric URL Dispatcher is worse than of the one of Pyramid, due to naivety of the implementation and limitations imposed by the compatibility with Django API.

Installation

Rhetoric is available as a PyPI package:

$ pip install Rhetoric

The package shall be compatible with Python2.7, and Python3.3 or higher.

Integration with Django

  1. Replace django.middleware.csrf.CsrfViewMiddleware with rhetoric.middleware.CsrfProtectedViewDispatchMiddleware in your project’s MIDDLEWARE_CLASSES:

    # somewhere in a project_name.settings module
    
    MIDDLEWARE_CLASSES = [
        # ...
        'rhetoric.middleware.CsrfProtectedViewDispatchMiddleware',
        #'django.middleware.csrf.CsrfViewMiddleware',
        # ...
    ]
  2. Inside the project’s root urlconf (usually project_name.urls):

    from django.conf.urls import patterns, include, url
    # ... other imports ...
    from rhetoric import Configurator
    
    # ... various definitions ...
    
    urlpatterns = patterns('',
        # ... a number of standard django url definitions ...
    )
    
    # Rhetorical routing
    # ------------------
    config = Configurator()
    config.add_route('test.new.routes', '/test/new/routes/{param:[a-z]+}')
    config.scan(ignore=[
        # do not scan test modules included into the project tree
        re.compile('^.*[.]?tests[.]?.*$').match,
        # do not scan settings modules
        re.compile('^project_name.settings[_]?[_a-z09]*$').match,
    ])
    urlpatterns.extend(config.django_urls())
  3. Register views:

    # project_name.some_app.some_module
    
    from rhetoric import view_config
    
    
    @view_config(route_name="test.new.routes", renderer='json')
    def view_get(request, param):
        return {
            'Hello': param
        }
    
    @view_config(route_name="test.new.routes", renderer='json', request_method='POST')
    def view_post(request, param):
        return {
            'Hello': 'POST'
        }
  4. From this point you can request /test/new/routes/<param> with different methods.

Documentation

See complete documentation at http://rhetoric.readthedocs.org/

Changelog

  • 0.2.3

    • Cache request.json_body value after the first access to the attribute.

  • 0.2.0

  • 0.1.13

    • Depend on Venusian 1.0 and higher.

    • Allow re-assignment of the same ADT case implementations on subsequent venusian scans.

  • 0.1.9

    • Added support for the request.json_body property.

  • 0.1.8

    • Added support for the request.response API.

  • 0.1.7

    • Added support for the api_version predicate.

    • Added the view_defaults decorator.

  • 0.1.5

    • Feature: added support for decorator argument of view_config.

  • 0.1.4

    • Feature: added support for custom renderers.

  • 0.1.2

    • [Bugfix #2]: resolved race condition in rhetoric.view.ViewCallback.

    • [API]: rhetoric.middleware.UrlResolverMiddleware was renamed to rhetoric.middleware.CsrfProtectedViewDispatchMiddleware.

    • [Django integration]: rhetoric.middleware.CsrfProtectedViewDispatchMiddleware should now completely substitute django.middleware.csrf.CsrfViewMiddleware in MIDDLEWARE_CLASSES.

  • 0.1.0 - initial PyPI release. Early development, unstable API.

Metadata

Release files for Rhetoric 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Rhetoric 0.2.3
File Size Uploaded Provenance
Rhetoric-0.2.3.tar.gz 28.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for Rhetoric 0.2.3
File Interpreter ABI Platform
Rhetoric-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 64.8 kB

Release files / Rhetoric-0.2.3.tar.gz

Download URL Rhetoric-0.2.3.tar.gz
Size 28.1 kB
Tags Source
SHA-256 checksum
How to use checksums
8812d6d743990e1bb7e267db85a11d67b3544203064f5c642fad16cff50c0458
BLAKE2b-256 checksum
How to use checksums
eebd9369dd884b4ba0946bdd2d7d6b4ed8398d4b77760458818e721a4fff67ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / Rhetoric-0.2.3-py3-none-any.whl

Download URL Rhetoric-0.2.3-py3-none-any.whl
Size 36.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95aec03acc29832bbabc7d457250238ad74e132a5344b11d8a11d82149e03f7b
BLAKE2b-256 checksum
How to use checksums
102149bf86b669d07da26a3d46938e56976f6fa5189c5100b383c7b6c10906f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for Rhetoric 0.2.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page