Metadata-Version: 2.4
Name: fast-platform
Version: 0.12.2
Summary: Umbrella package: fast_platform.configuration, fast_admin, fast_notifications, fast_resilience, fast_versioning, fast_features, fast_channels, fast_db, observability, analytics, queues, … — merged fast_* modules under one install.
License: MIT
Project-URL: Homepage, https://github.com/shregar1/fastMVC
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiokafka<1.0.0,>=0.8.0
Requires-Dist: fastapi>=0.100.0
Requires-Dist: starlette>=0.27.0
Requires-Dist: httpx>=0.24.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: loguru>=0.7.0
Requires-Dist: cryptography<44.0.0,>=41.0.0
Requires-Dist: sqlalchemy<3.0.0,>=2.0.0
Requires-Dist: jsonschema>=4.0.0
Requires-Dist: redis<7.0.0,>=4.0.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
Requires-Dist: aiosqlite>=0.19.0; extra == "dev"
Requires-Dist: jinja2>=3.0.0; extra == "dev"
Requires-Dist: mypy>=1.11.0; extra == "dev"
Requires-Dist: basedpyright>=1.19.0; extra == "dev"
Requires-Dist: ruff>=0.8.0; extra == "dev"
Requires-Dist: black>=24.0; extra == "dev"
Requires-Dist: flake8>=7.0; extra == "dev"
Requires-Dist: types-redis; extra == "dev"
Provides-Extra: async
Requires-Dist: asyncpg<1.0.0,>=0.29.0; extra == "async"
Provides-Extra: rabbitmq
Requires-Dist: pika>=1.3.0; extra == "rabbitmq"
Provides-Extra: sqs
Requires-Dist: boto3>=1.28.0; extra == "sqs"
Provides-Extra: service-bus
Requires-Dist: azure-servicebus>=7.0.0; extra == "service-bus"
Provides-Extra: nats
Requires-Dist: nats-py>=2.0.0; extra == "nats"
Provides-Extra: vault
Requires-Dist: hvac>=2.0.0; extra == "vault"
Provides-Extra: aws
Requires-Dist: boto3>=1.28.0; extra == "aws"
Provides-Extra: gcp
Requires-Dist: google-cloud-secret-manager>=2.0.0; extra == "gcp"
Provides-Extra: pinecone
Requires-Dist: pinecone-client>=3.0.0; extra == "pinecone"
Provides-Extra: qdrant
Requires-Dist: qdrant-client>=1.0.0; extra == "qdrant"
Provides-Extra: weaviate
Requires-Dist: weaviate-client>=4.0.0; extra == "weaviate"
Provides-Extra: s3
Requires-Dist: boto3>=1.28.0; extra == "s3"
Provides-Extra: gcs
Requires-Dist: google-cloud-storage>=2.10.0; extra == "gcs"
Provides-Extra: azure
Requires-Dist: azure-storage-blob>=12.17.0; extra == "azure"
Provides-Extra: celery
Requires-Dist: celery[redis]>=5.3.0; extra == "celery"
Provides-Extra: rq
Requires-Dist: rq>=1.0.0; extra == "rq"
Provides-Extra: dramatiq
Requires-Dist: dramatiq[redis]>=1.0.0; extra == "dramatiq"
Provides-Extra: fastapi
Requires-Dist: fastapi>=0.100.0; extra == "fastapi"
Provides-Extra: openai
Requires-Dist: openai>=1.0.0; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.18.0; extra == "anthropic"
Provides-Extra: ollama
Requires-Dist: httpx>=0.24.0; extra == "ollama"
Provides-Extra: groq
Requires-Dist: openai>=1.0.0; extra == "groq"
Provides-Extra: mistral
Requires-Dist: openai>=1.0.0; extra == "mistral"
Provides-Extra: gemini
Requires-Dist: google-generativeai>=0.8.0; extra == "gemini"
Provides-Extra: protobuf
Requires-Dist: protobuf>=5.0; extra == "protobuf"
Provides-Extra: avro
Requires-Dist: fastavro>=1.9; extra == "avro"
Provides-Extra: oauth
Requires-Dist: httpx>=0.24.0; extra == "oauth"
Provides-Extra: pillow
Requires-Dist: Pillow>=10.0.0; extra == "pillow"
Provides-Extra: utils-pdf
Requires-Dist: pypdf>=4.0.0; extra == "utils-pdf"
Provides-Extra: meilisearch
Requires-Dist: meilisearch>=0.31.0; extra == "meilisearch"
Provides-Extra: typesense
Requires-Dist: typesense>=0.18.0; extra == "typesense"
Provides-Extra: opensearch
Requires-Dist: opensearch-py>=2.0.0; extra == "opensearch"
Provides-Extra: mongo
Requires-Dist: pymongo>=4.0.0; extra == "mongo"
Provides-Extra: elasticsearch
Requires-Dist: elasticsearch<9.0.0,>=8.0.0; extra == "elasticsearch"
Provides-Extra: dynamo
Requires-Dist: boto3>=1.28.0; extra == "dynamo"
Provides-Extra: cassandra
Requires-Dist: cassandra-driver>=3.28.0; extra == "cassandra"
Provides-Extra: cosmos
Requires-Dist: azure-cosmos>=4.5.0; extra == "cosmos"
Provides-Extra: web
Requires-Dist: starlette>=0.27.0; extra == "web"
Provides-Extra: segment
Requires-Dist: analytics-python>=1.0.0; extra == "segment"
Provides-Extra: posthog
Requires-Dist: posthog>=3.0.0; extra == "posthog"
Provides-Extra: mixpanel
Requires-Dist: mixpanel>=4.0.0; extra == "mixpanel"
Provides-Extra: jinja2
Requires-Dist: jinja2>=3.0.0; extra == "jinja2"
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.20.0; extra == "otel"
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == "otel"
Requires-Dist: opentelemetry-exporter-otlp>=1.20.0; extra == "otel"
Requires-Dist: opentelemetry-instrumentation-fastapi>=0.41b0; extra == "otel"
Dynamic: license-file

# fast-platform

Single installable distribution (**`pip install fast-platform`**) that bundles many former standalone `fast_*` modules **unchanged at import time** (flat top-level imports such as `from notifications import …`, `from db import …`).

Logical organization is defined by the **package taxonomy** in [`src/fast_platform/taxonomy.py`](src/fast_platform/taxonomy.py). Imports stay flat under `src/`; the taxonomy is used for docs, tests layout, and navigation.

## Package taxonomy

Each top-level name under `src/` belongs to exactly one **section** (`PackageSection`). The canonical mapping is `PACKAGE_TO_SECTION` in `fast_platform.taxonomy`.

| Section | Meaning |
|--------|---------|
| **core** | Config, DTOs, errors, helpers, orchestration services |
| **security** | Crypto, API keys, identity, secret backends |
| **persistence** | SQLAlchemy + multi-backend datastores |
| **data_platform** | Search, vectors, object storage, cache |
| **messaging** | Queues, Kafka, jobs, events, notifications, webhooks |
| **realtime** | Channels, streams, WebRTC |
| **integrations** | LLM, payments, media, analytics, admin |
| **operations** | Observability, OpenTelemetry, flags, tenancy, resilience, API versioning |

### Packages by section

| Section | Packages |
|--------|----------|
| **core** | `configuration`, `dtos`, `errors`, `utils`, `service`, `fast_platform` |
| **security** | `security`, `secrets`, `identity` |
| **persistence** | `db`, `datastores` |
| **data_platform** | `search`, `vectors`, `storage`, `cache` |
| **messaging** | `kafka`, `queues`, `events`, `jobs`, `notifications`, `webhooks` |
| **realtime** | `channels`, `streams`, `webrtc` |
| **integrations** | `llm`, `payments`, `media`, `analytics`, `admin` |
| **operations** | `observability`, `otel`, `resilience`, `tenancy`, `versioning`, `features` |

Use in code:

```python
from fast_platform.taxonomy import section_of, PackageSection

section_of("notifications")  # PackageSection.MESSAGING
```

## Layout: `src/` vs `tests/`

- **`src/`** — **flat** top-level packages (`configuration/`, `notifications/`, …) so existing imports remain stable.
- **`tests/`** — mirrors the taxonomy: **`tests/<section_folder>/<package>/`**. Section folder names come from `SECTION_TEST_FOLDER` in `taxonomy.py` (e.g. `core`, `persistence`, `data_platform`). The security section uses **`sec`** (not `security`) so the `security` package can live at `tests/sec/security/` without a path collision.

Example: tests for `utils` live under `tests/core/utils/`; tests for `notifications` under `tests/messaging/notifications/`.

## Highlights (by import name)

| Import | Role |
|--------|------|
| `configuration` | JSON config loaders + Pydantic DTOs per subsystem |
| `dtos` | Shared Pydantic DTOs (`IDTO` base) |
| `errors` | Structured HTTP-oriented exceptions (`BadInputError`, `NotFoundError`, …) |
| `notifications` | Email/SMS/push templates, fan-out, idempotency, preferences (`pip install fast-platform[jinja2]` for templating extras) |
| `resilience` | Circuit breakers, retries, bulkheads |
| `versioning` | API versioning (`VersionedAPIRouter`, `VersioningMiddleware`, path/header/query strategies) |
| `features` | In-app feature flags, rollout, targeting |
| `channels` | Real-time hub, Redis/Kafka backends, presence, ACLs, metrics |
| `db` | SQLAlchemy engine, sessions, `DBDependency` |
| `datastores` | `IDataStore` adapters (Redis, Mongo, ES, …) |
| `observability` | Logging, metrics, tracing, audit, OTLP |
| `admin` | Admin API router (users, roles, audit log), generic SQLAlchemy CRUD routers |
| `queues` | Queues (DLQ, envelope, backends) |
| `jobs` | Background jobs |
| `storage` | Object storage (S3, GCS, Azure) |
| `secrets` | Secret backends + cache (Vault, AWS, GCP; not the stdlib `secrets` module) |
| `vectors` | Vector stores |
| `tenancy` | Multi-tenant context |
| `webhooks` | Webhook signing / delivery |
| `webrtc` | WebRTC signaling |
| `llm` | LLM providers, tools, streaming |
| `kafka` | Kafka producer/consumer, outbox |
| `identity` | OAuth/OIDC, JWKS, API keys |
| `media` | Uploads, variants, presigned URLs |
| `payments` | Payment gateways, webhooks, SCA |
| `search` | Meilisearch, Typesense, OpenSearch |
| `security` | API keys, inbound webhooks, field encryption |

**Install:** `pip install fast-platform`

Optional backends: e.g. `pip install fast-platform[async,otel,rabbitmq,s3,openai,meilisearch,pillow]`.

`pyfastmvc` depends on this wheel for these modules instead of many separate distributions.
