Skip to main content

core-apis

This project/library contains useful elements related to APIs and provides basic structures to speed up the implementation of an API service using the FastApi framework as base…


PyPI Downloads Python Versions License Pipeline Status Docs Status Security

Installation

Install from PyPI using pip:

pip install core-apis
uv pip install core-apis  # Or using UV...

Features

FastAPI Server Management

  • Quick server setup with uvicorn ASGI server

  • Environment-based configuration (HOST, PORT, DEBUG, LOG_LEVEL)

  • Secure defaults (localhost-only binding)

Application Factory

  • AppConfig dataclass consolidating all application parameters (name, version, description, base_path, cors_config, debug)

  • CorsConfig dataclass for CORS middleware (origins, methods, headers)

  • create_application(app_config: AppConfig) factory with safe defaults

Router Management

  • Plugin architecture: register routers at import time via add_router()

  • Runtime addition: attach routers to an existing app via app.include_router()

  • reset_routers() for clearing the registry between tests

  • Built-in health check endpoint (/api/ping)

Response Standardization

  • @wrap_response decorator for consistent API responses

  • ApiResponse TypedDict contract: code, status, result, error

  • HTTP status code mapping (2XX success, 4XX error, 5XX failure)

  • Automatic exception handling for ServiceException and InternalServerError

Testing Utilities

  • BaseApiTestCases class for FastAPI testing with pre-configured TestClient

  • setUp() calls reset_routers() automatically to prevent cross-test pollution

  • init_client(with_cors=True) for flexible test application initialization

How to use it

The simple way to spin up the FastAPI server locally using uvicorn:

# -*- coding: utf-8 -*-
from core_apis.api import server
server.run()

Creating an application with custom configuration (AppConfig / CorsConfig):

# -*- coding: utf-8 -*-
from core_apis.api import create_application, AppConfig, CorsConfig

app = create_application(
    app_config=AppConfig(
        name="My Service",
        version="1.0.0",
        cors_config=CorsConfig(
            enabled=True,
            origins=["https://example.com"],
        ),
    ),
)

Adding custom routers — plugin architecture (recommended):

Use add_router() to register routers at import time. They are collected by create_application() when the app is built. This is the recommended pattern for plugins and reusable components that don’t need a reference to the app instance.

# -*- coding: utf-8 -*-

from fastapi import APIRouter

from core_apis.api import server
from core_apis.api.routers import add_router

router = APIRouter()
add_router(router)

@router.get(path="/server_status")
def get_server_status():
    return {"status": "OK"}

server.run()

Adding routers at runtime (post-creation):

Use app.include_router() directly on the FastAPI instance after the application has already been created. Useful for dynamic or conditional route registration.

# -*- coding: utf-8 -*-

from fastapi import APIRouter

from core_apis.api import create_application

app = create_application()

late_router = APIRouter()

@late_router.get(path="/status")
def get_status():
    return {"status": "OK"}

app.include_router(late_router, prefix="/api")

Using @wrap_response — standardized response contract (ApiResponse):

# -*- coding: utf-8 -*-

from core_https import HTTPStatus
from core_apis.decorators import wrap_response

@wrap_response
def get_item(item_id: int):
    return HTTPStatus.OK, {"id": item_id, "name": "Widget"}

# Returns an ApiResponse dict:
# {"code": 200, "status": "success", "result": {"id": 1, "name": "Widget"}, "error": None}

For an example of the structure of a production-ready project check: https://gitlab.com/bytecode-solutions/examples/fastapi-project

Quick Start

Installation

Install the package:

pip install core-apis
uv pip install core-apis  # Or using UV...
pip install -e ".[dev]"    # For development...

Setting Up Environment

  1. Install required libraries:

pip install --upgrade pip
pip install virtualenv
  1. Create Python virtual environment:

virtualenv --python=python3.12 .venv
  1. Activate the virtual environment:

source .venv/bin/activate

Install packages

pip install .
pip install -e ".[dev]"

Check tests and coverage

python manager.py run-tests
python manager.py run-coverage

Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Write tests for new functionality

  4. Ensure all tests pass: pytest -n auto

  5. Run linting: pylint core_apis

  6. Run security checks: bandit -r core_apis

  7. Submit a pull request

License

This project is licensed under the MIT License. See the LICENSE file for details.

Support

For questions or support, please open an issue on GitLab or contact the maintainers.

Authors

Metadata

Release files for core-apis 2.1.1

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

Source distribution (sdist)

Source distribution for core-apis 2.1.1
File Size Uploaded
core_apis-2.1.1.tar.gz 12.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for core-apis 2.1.1
File Interpreter ABI Platform
core_apis-2.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.1 kB

Release files / core_apis-2.1.1.tar.gz

Download URL core_apis-2.1.1.tar.gz
Size 12.9 kB
Tags Source
SHA-256 checksum
How to use checksums
b2202c5b70988dea720329612043bca4d24840c7145b7e0fc44cea7aaec6cdb4
BLAKE2b-256 checksum
How to use checksums
53d8683f57f7b66916921e650634418dd1051b30cdcbe15d84f250da71bb3e89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / core_apis-2.1.1-py3-none-any.whl

Download URL core_apis-2.1.1-py3-none-any.whl
Size 13.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9e63f3a11ae2797912042cd2fbbcd752699065d74a6dc9533b2ae24481075f06
BLAKE2b-256 checksum
How to use checksums
868abf79e4e9c228e70d8c41ae70099fb541f8e906f443849d45401ce076e988
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

This release

2.1.1 This release

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

0.0.0

2 release files

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