Skip to main content

Discover packages and classes in a python project.

Project description

Deescovery

Deescovery is a Python package to find and initialize modules of your Python projects on startup.

  • Find and register blueprints in a Flask project.
  • Automatically initialize Flask extensions.
  • Find all SQLAlchemy models to make alembic happy.
  • Find all FastAPI endpoints.
  • Collect all Celery tasks.

Initially designed to initialize Flask applications, it was made generic enough to work with any micro-framework or no framework at all.

Micro-framework initialization problem

Micro-framework-based projects are clean while they're small. Every micro-framework codebase I've seen, has a mess in the project initialization. With time, create_app() becomes filled with ad-hoc settings, imports-within-functions, and plug-in initializations.

The Application Factory Pattern, proposed, for example, in the official Flask documentation, and the Flask Mega-Tutorial, legitimize this approach.

The nature of create_app() leaves no place for the open-closed principle. We update this module every time we add a new plug-in, a new blueprint, or a new package.

# myproject/__init__.py

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    migrate.init_app(app, db)
    login.init_app(app)
    mail.init_app(app)
    bootstrap.init_app(app)
    moment.init_app(app)
    babel.init_app(app)

    from myproject.errors import bp as errors_bp
    app.register_blueprint(errors_bp)

    from myproject.auth import bp as auth_bp
    app.register_blueprint(auth_bp, url_prefix='/auth')

    return app

A common Flask application. The code is based on the Flask Mega-Tutorial.

With deescovery, you can make the same code shorter, and remove the dependencies from implementation details.

# file: myproject/app.py
from flask import Flask
from deescovery import discover
from deescovery.flask import get_flask_rules


def create_app():
    flask_app = Flask(__name__)
    flask_app.config.from_object("myproject.config")
    discover("myproject", get_flask_rules("myproject", flask_app))
    return flask_app

Read more

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

deescovery-1.0.1.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

deescovery-1.0.1-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file deescovery-1.0.1.tar.gz.

File metadata

  • Download URL: deescovery-1.0.1.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.0

File hashes

Hashes for deescovery-1.0.1.tar.gz
Algorithm Hash digest
SHA256 d9d814c7c9269df1c340400dbae06c15536a8b644d04b7ff6facfe84207e1e27
MD5 ffa6154289c12a4ced88e437abaa5d7a
BLAKE2b-256 8ab1b8e8eec1065809693da27333d6fc67dd5f14353b67e57df4f31adf530eb9

See more details on using hashes here.

Provenance

File details

Details for the file deescovery-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: deescovery-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.0

File hashes

Hashes for deescovery-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7eb332e818c54d6e928968b6e9af35bbe1a9a666b3f2b6cc3d7a3f5789e0940f
MD5 9c7e154763ca55ec707c8ff3f47c9cd5
BLAKE2b-256 ccbec6b2663ca16ab42cc5bde7faea793c55eeeb566f982499be85c89e66852c

See more details on using hashes here.

Provenance

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