Core utilities for building OAuth-based integrations in FastAPI applications
Project description
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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file abs_integration_core-0.1.1.tar.gz.
File metadata
- Download URL: abs_integration_core-0.1.1.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.13.3 Darwin/23.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c081b9b50c0a9749baf17380173d092b3ed3ad5a4c4711b147a84f91bd6dc99
|
|
| MD5 |
dedec86222f2cca39b9fe3a449eeb5f8
|
|
| BLAKE2b-256 |
fc2622ff966ab5312148e3afe2e87232e7f9a4b83f2f6449d831cbce9376c221
|
File details
Details for the file abs_integration_core-0.1.1-py3-none-any.whl.
File metadata
- Download URL: abs_integration_core-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.13.3 Darwin/23.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1622f40620ec8d0261ef49012e22eca4878fe834ed59b10b6db723e72f28c3b
|
|
| MD5 |
184c57508c54151bfdb3d2f1d27a0400
|
|
| BLAKE2b-256 |
52ed38854107972ea74b20777b16cd8f32e80eb2c3a56a7b5ea67fe038b55978
|