Skip to main content

Patterns and idioms for Flask applications.

Project description

Flask-Super

image

Documentation Status

"Any sufficiently complicated Python program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of the Zope Component Architecture." (S. Fermigier, December 2023).

[!WARNING] Due to PyPI refusing the submission of a package called "FLask-Plus", the package has been renamed (temporarily?) "Flask-Super".

(I know this sucks. Either way, it's temporary. Stay tuned.)

Flask patterns and idoms

  • Free software: Apache Software License 2.0

Features

  • Decorator-based registration system for services (using svcs)
  • Powerful inspection CLI command (flask inspect and flask config).
  • Flask initialisation helpers.

Status

This is a preview. Expect the API to change.

Sample usage

import svcs
from flask import Flask
from flask_super import register_services
from flask_super.scanner import scan_package

# Assuming you have developped the proper decorators and registration logic
# in app.lib (or any other module)
from app.lib import register_routes, register_components


def create_app():
    app = Flask(__name__)

    svcs.flask.init_app(app)
    scan_package("app.services")
    register_services(app)

    # Or just scan a package if using a framework like SQLAlchemy which
    # automatically registers classes on import
    scan_package("app.models")

    # You may also scan custom things (e.g. models, routes, components, etc.)
    scan_package("app.routes")
    register_routes(app)
    scan_package("app.components")
    register_components(app)

    return app


app = create_app()

Currently, flask-super provides the following decorators:

  • @service: register a service with a per-request lifecycle (on the svcs registry)
  • @singleton: register a singleton service (on the svcs registry)

A real-life example

Here is the initialisation code of a Flask application using flask-super:

def create_app(config: Any = None) -> Flask:
    # When testing
    if config:
        app = Flask(__name__)
        app.config.from_object(config)

    # Otherwise
    else:
        # Not needed when called from CLI, but needed when
        # called from a WSGI server
        load_dotenv(verbose=True)

        app = Flask(__name__)
        app.config.from_prefixed_env()

        finish_config(app)

    init_app(app)
    return app


def finish_config(app: Flask):
    app.config.from_object("app.config.Config")


def init_app(app: Flask):
    # First: Logging & Observability (e.g. sentry)
    init_logging(app)

    # Scan modules that may provide side effects
    scan_package("app.models")
    scan_package("app.services")
    scan_package("app.controllers")
    scan_package("app.cli")

    # Scan 3rd-party modules
    scan_package("flask_super")

    # Extensions, then services
    init_extensions(app)
    svcs.flask.init_app(app)
    register_services(app)

    # Web
    register_views(app)
    register_controllers(app)

    # Security
    register_rules()

    # CLI
    register_commands(app)

Credits

This package was created with Cruft and the abilian/cookiecutter-abilian-python project template.

Project details


Download files

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

Source Distribution

flask_super-0.2.12.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flask_super-0.2.12-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file flask_super-0.2.12.tar.gz.

File metadata

  • Download URL: flask_super-0.2.12.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for flask_super-0.2.12.tar.gz
Algorithm Hash digest
SHA256 b8423c09c3fb5d68a56dd972c075b0f5c4b20da5d9875ace1435d3f3bf31351a
MD5 61874458cd9a9ba122d2aec51d9ffc74
BLAKE2b-256 09f94c932670f608d262666fc4b71e29a219affc3e4db34c4cd0598d4263f70f

See more details on using hashes here.

File details

Details for the file flask_super-0.2.12-py3-none-any.whl.

File metadata

  • Download URL: flask_super-0.2.12-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for flask_super-0.2.12-py3-none-any.whl
Algorithm Hash digest
SHA256 1f2eec3f58762eb18adc7f33d9f59b2a362cc95a8c8308c28e41ec7a0c981c67
MD5 02cb2ecca781366fa4fea7943cca8320
BLAKE2b-256 7af8b21f8b521bc7b4595c68e5323b45aacb5d3eaa1abbe532730eb7345ac386

See more details on using hashes here.

Supported by

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