Skip to main content

A python library to integrate python APIs in Mycelium API Gateway

Reason this release was yanked:

Broken package

Project description

Mycelium HTTP Tools

A python library to integrate python APIs in Mycelium API Gateway.

Installation

Basic Installation

Install the core library without optional dependencies:

pip install mycelium-http-tools

With FastAPI Support

To use the FastAPI middleware for profile extraction, install with the FastAPI extra:

pip install mycelium-http-tools[fastapi]

This will install the additional dependencies:

  • fastapi>=0.104.0,<1.0.0
  • zstandard>=0.25.0,<0.26.0

Development Installation

For development with all dependencies:

pip install mycelium-http-tools[dev,fastapi]

Usage

Basic Usage

from myc_http_tools.models.profile import Profile
from myc_http_tools.models.owner import Owner

# Create and use Profile objects
profile = Profile(
    acc_id="123e4567-e89b-12d3-a456-426614174000",
    is_subscription=True,
    is_staff=True,
    is_manager=False,
    owner_is_active=True,
    account_is_active=True,
    account_was_approved=True,
    account_was_archived=False,
    account_was_deleted=False,
    owners=[Owner(...)]
)

FastAPI Integration

If you installed with FastAPI support, you have several options:

Option 1: Using Dependency Injection (Recommended)

from fastapi import FastAPI, Depends
from myc_http_tools.fastapi import get_profile_from_header, get_profile_from_header_required

app = FastAPI()

# Optional profile (returns None if header missing in development)
@app.get("/")
async def my_route(profile: Profile | None = Depends(get_profile_from_header)):
    if profile:
        related_accounts = profile \
            .with_read_access() \
            .on_tenant(tenant_id) \
            .with_roles(["admin"]) \
            .on_account(account_id) \
            .get_related_account_or_error()
        # ... use the related accounts
    else:
        return {"message": "No profile available"}

# Required profile (raises error if header missing)
@app.get("/protected")
async def protected_route(profile: Profile = Depends(get_profile_from_header_required)):
    related_accounts = profile \
        .with_read_access() \
        .on_tenant(tenant_id) \
        .with_roles(["admin"]) \
        .on_account(account_id) \
        .get_related_account_or_error()
    # ... use the related accounts

Option 2: Using Middleware

from fastapi import FastAPI
from fastapi.middleware.base import BaseHTTPMiddleware
from myc_http_tools.fastapi import profile_middleware

app = FastAPI()
app.add_middleware(BaseHTTPMiddleware, dispatch=profile_middleware)

@app.get("/")
async def my_route(request: Request):
    profile = request.state.profile  # Profile extracted from x-mycelium-profile header
    # ... use the profile

Option 3: Manual Extraction

from fastapi import FastAPI, Depends
from myc_http_tools.fastapi import get_profile_from_request

app = FastAPI()

@app.get("/")
async def my_route(request: Request):
    profile = get_profile_from_request(request)
    # ... use the profile

Features

  • Profile Management: Core Profile model with filtering and permission management
  • FastAPI Middleware (optional): Extract profiles from HTTP headers
  • Flexible Installation: Install only what you need

License

Apache 2.0

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

mycelium_http_tools-0.1.0a7-py3-none-any.whl (33.1 kB view details)

Uploaded Python 3

File details

Details for the file mycelium_http_tools-0.1.0a7-py3-none-any.whl.

File metadata

File hashes

Hashes for mycelium_http_tools-0.1.0a7-py3-none-any.whl
Algorithm Hash digest
SHA256 5d507d594807d7bf632236be01604ab6aed5f9fb23c9ab98a332fac70aaa22dd
MD5 3b40ca40b30bf3ab1cefebd61e954ab5
BLAKE2b-256 fdc3c9c90644c7b41496400d51086c09510e5eaf9f9e3f5a8d18f018c18678a7

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