Skip to main content

A composable toolkit for standing up Flask APIs without repeating yourself. Handles blueprint discovery, CORS, request parsing, endpoint introspection, and route generation — so the only code you write is the code that matters.

Project description

abstract_flask

A composable toolkit for standing up Flask APIs without repeating yourself. Handles blueprint discovery, CORS, request parsing, endpoint introspection, and route generation — so the only code you write is the code that matters.

Install

pip install abstract_flask

Quickstart

# my_api/__init__.py
from . import routes
from abstract_flask import get_Flask_app

app = get_Flask_app(routes=routes, allowed_origins=["https://yourdomain.com"])

That's it. Blueprints are discovered from any *_bp objects in your routes module, CORS is applied, and introspection endpoints are registered automatically.

Full signature

app = get_Flask_app(
    name="my_api",              # Flask app name (default: caller's __name__)
    routes=routes,              # module to scan for *_bp Blueprints
    bp_list=None,               # or pass blueprints explicitly
    url_prefix="v1",            # prefix for blueprint registration + filtered /endpoints
    allowed_origins=["https://example.com"],
    supports_credentials=True,
)

Running

from abstract_flask import main_flask_start

main_flask_start(app, key_head="MYAPI", env_path=".env")
# reads MYAPI_DEBUG, MYAPI_HOST, MYAPI_PORT from env

Package structure

abstract_flask/
├── abstract_flask.py        # App factory, CORS, audit logging, introspection
├── request_utils/
│   ├── request_utils.py     # get_request_data, extract_request_data
│   ├── get_requests.py      # required_keys, execute_request, get_spec_kwargs
│   └── parse_utils.py       # parse_request, parse_and_spec_vars
├── network_utils/
│   └── ip_utils.py          # get_host_ip, get_user_ip, get_ip_addr
├── user_utils/
│   └── user_utils.py        # get_user_name (from request or fallback)
└── generator/
    ├── generateFlaskRoute.py # Auto-generate Flask routes from Python files
    └── help_utils.py         # ?help introspection for any endpoint

Core modules

App factory (abstract_flask.py)

Function Purpose
get_Flask_app(...) One-call app factory: blueprints, CORS, logging, introspection
get_bp(name, abs_path) Create a named Blueprint with a logger
main_flask_start(app) Run the app using env-driven host/port/debug

Every app gets these endpoints for free:

  • GET /endpoints — all registered routes
  • GET /<prefix>/endpoints — routes under that prefix
  • GET /prefixes — unique top-level route segments

Request utilities (request_utils/)

from abstract_flask.request_utils import get_request_data, required_keys, parse_request
  • get_request_data(req) — Returns a dict from JSON body, form data, or query string (checked in that order).
  • extract_request_data(req, res_type) — Full extraction: user, IP, headers, cookies, files, metadata. Pass res_type to narrow scope.
  • required_keys(keys, req, defaults) — Validate that required keys are present; returns the data dict or a 400 error payload.
  • parse_request(req) — Split a request into positional args and kwargs.
  • get_spec_kwargs(var_types, args, **kwargs) — Type-coerced argument extraction against a schema.

Route generator (generator/)

Auto-generate Flask endpoints from plain Python files:

from abstract_flask.generator import generate_from_files

source = generate_from_files(
    directory="./my_functions",
    bp_name="auto_bp",
    url_prefix="generated",
)

Every public function becomes a GET/POST endpoint. Async functions are preserved. Pass ?help to any generated endpoint to get parameter introspection via offer_help.

Register routes programmatically against an existing blueprint:

from abstract_flask.generator import register_category

register_category(bp, "math", {
    "add": lambda a, b: a + b,
    "multiply": lambda a, b: a * b,
})
# creates /math/add, /math/multiply

Network utilities (network_utils/)

from abstract_flask.network_utils import get_host_ip, get_user_ip

User utilities (user_utils/)

from abstract_flask.user_utils import get_user_name

Resolves username from the request's .user attribute, falling back to IP-based lookup via UserIPManager.

Dependencies

  • flask, flask_cors, werkzeug
  • abstract_utilities, abstract_security, abstract_queries

License

MIT

Author

putkoffpartners@abstractendeavors.com

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

abstract_flask-0.0.0.1045.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

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

abstract_flask-0.0.0.1045-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

File details

Details for the file abstract_flask-0.0.0.1045.tar.gz.

File metadata

  • Download URL: abstract_flask-0.0.0.1045.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for abstract_flask-0.0.0.1045.tar.gz
Algorithm Hash digest
SHA256 dfb70417c0cb1c214808e7a0479b9bf4a0a013e5c54be003bbbde06f42add1a7
MD5 a6dd3f9b67aa86d8d497b2a65461ca24
BLAKE2b-256 a945097dd5c4be107636065c90e9ce6318a4aa042255f563e53a4bb0524a1b42

See more details on using hashes here.

File details

Details for the file abstract_flask-0.0.0.1045-py3-none-any.whl.

File metadata

File hashes

Hashes for abstract_flask-0.0.0.1045-py3-none-any.whl
Algorithm Hash digest
SHA256 e3152c45fbfd45a5edd59c720f95104d3b2bdda03b8c257e93411009cdc49399
MD5 1b65e388a99925c725f9312689443e87
BLAKE2b-256 d70c95cd1a4a6c95d8a24d4b99e22744eb46f86ec19fa848c2c6a8f5b7659181

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