Integration Core
A core library for building and managing OAuth-based third-party integrations in FastAPI applications.
Overview
abs-integration-core provides a set of reusable components to simplify the implementation of OAuth-based integrations with third-party services. It includes models, schemas, repositories, and a base service class that can be extended for specific integration providers.
Features
- Integration Model: SQLAlchemy model for storing OAuth tokens and integration metadata
- Standard Schemas: Pydantic models for integration data validation and serialization
- Repository Layer: Data access layer for CRUD operations on integration records
- Base Service: Abstract base class for implementing integration services for different providers
- Token Verification: Automatic handling of token expiration and refresh
Installation
pip install abs-integration-core
Dependencies
This package depends on:
fastapi: For API routing and endpoint handlingsqlalchemy: For database ORM functionalitypydantic: For data validationabs-exception-core: For standardized exception handlingabs-repository-core: For base repository pattern implementationabs-auth-rbac-core: For authentication and base models
Usage
Models
The core model represents an OAuth integration with a third-party provider:
from abs_integration_core.models import Integration
# The Integration model includes:
# - provider_name: String(255)
# - access_token: Text
# - refresh_token: Text
# - expires_at: DateTime
Schemas
Various Pydantic schemas are available for request/response handling:
from abs_integration_core import (
TokenData,
IsConnectedResponse,
CreateIntegration,
UpdateIntegration,
ResponseSchema
)
# TokenData includes:
# - access_token: str
# - refresh_token: str
# - expires_at: datetime
# Example: Create a standard API response
response = ResponseSchema(
status=200,
message="Integration created successfully",
data=IsConnectedResponse(provider="sharepoint", connected=True)
)
Repository
The IntegrationRepository provides data access methods:
from abs_integration_core import IntegrationRepository
# Initialize repository with a database session factory
repo = IntegrationRepository(db_session)
# Available methods:
# - create_integration(integration_data)
# - update_integration(integration_id, update_data)
# - get_by_provider(provider_name)
# - get_all()
# - delete_by_provider(provider_name)
# - refresh_token(provider_name, token_data)
Base Service
Extend the IntegrationBaseService to implement provider-specific integration services:
from abs_integration_core import IntegrationBaseService
class SharepointIntegrationService(IntegrationBaseService):
def __init__(self, provider_name, integration_repository, encryption):
super().__init__(provider_name, integration_repository, encryption)
def get_auth_url(self, state=None):
# Implementation for generating OAuth URL
async def get_token_data(self, code):
# Implementation for exchanging code for tokens
async def handle_oauth_callback(self, code):
# Implementation for processing OAuth callback
async def refresh_token(self):
# Implementation for refreshing tokens
Implementing a New Integration
To implement a new integration provider:
- Create a new service class that extends
IntegrationBaseService - Implement the required abstract methods:
get_auth_url()get_token_data(code)handle_oauth_callback(code)refresh_token()
- Register your service in your FastAPI application
- Create API routes to initiate auth flow, handle callbacks, etc.
Example: Creating API Routes
from fastapi import APIRouter, Depends
from abs_integration_core import ResponseSchema, IsConnectedResponse
router = APIRouter(prefix="/integration", tags=["integration"])
@router.get("/{provider_name}/connect")
async def integration_connect(
service: IntegrationBaseService = Depends(get_integration_service)
):
auth_data = service.get_auth_url()
return RedirectResponse(url=auth_data["auth_url"])
@router.get("/{provider_name}/callback")
async def integration_callback(
code: str,
service: IntegrationBaseService = Depends(get_integration_service)
):
token_data = await service.handle_oauth_callback(code)
return ResponseSchema(
data=IsConnectedResponse(
provider=service.provider_name,
connected=True
),
message=f"Integration connected successfully"
)
License
MIT
Metadata
Release files for abs-integration-core 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| abs_integration_core-0.4.0.tar.gz | 26.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| abs_integration_core-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.3 kB
Release files / abs_integration_core-0.4.0.tar.gz
| Download URL | abs_integration_core-0.4.0.tar.gz |
|---|---|
| Size | 26.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
22918e24798492ce3a4c8fe0b8d9ebc828b19a85ad50f26ab95a2ffc506e3676
|
|
BLAKE2b-256 checksum How to use checksums |
50cfdc985a15caef4d13cc74f20f26965c9df86d1fd59ee2ecb19b586b989d33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.13.5 Darwin/24.5.0
|
Release files / abs_integration_core-0.4.0-py3-none-any.whl
| Download URL | abs_integration_core-0.4.0-py3-none-any.whl |
|---|---|
| Size | 42.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8ef74e65072410ff724e49eedc89cf1cf5f32b6f7233c598330f76d274d417e6
|
|
BLAKE2b-256 checksum How to use checksums |
3e951ce67066a5f9bd051ce2a4835316e37bd8af2b17b5ed7142c5a6dee50791
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.13.5 Darwin/24.5.0
|