Skip to main content

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 handling
  • sqlalchemy: For database ORM functionality
  • pydantic: For data validation
  • abs-exception-core: For standardized exception handling
  • abs-repository-core: For base repository pattern implementation
  • abs-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:

  1. Create a new service class that extends IntegrationBaseService
  2. Implement the required abstract methods:
    • get_auth_url()
    • get_token_data(code)
    • handle_oauth_callback(code)
    • refresh_token()
  3. Register your service in your FastAPI application
  4. 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


Download files

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

Source Distribution

abs_integration_core-0.1.7.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

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

abs_integration_core-0.1.7-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file abs_integration_core-0.1.7.tar.gz.

File metadata

  • Download URL: abs_integration_core-0.1.7.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.13.3 Darwin/23.6.0

File hashes

Hashes for abs_integration_core-0.1.7.tar.gz
Algorithm Hash digest
SHA256 e1428e787cfc6257bf7da858541bd10a4ed860b6b903973a6a843133e1a45eff
MD5 fcf7824f7a5b3996f502837742f595de
BLAKE2b-256 d2b1aade998c6d0b5d72146c1bcdc2055a0523f921dbeefd61825bee12305f41

See more details on using hashes here.

File details

Details for the file abs_integration_core-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for abs_integration_core-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 4aaeaa12f688fccce92512686898f7298467200ad1551b74449a2276a51415e8
MD5 3d918caf60a43ea8e55135b17936a6ba
BLAKE2b-256 8988f9434890c6d978bc61e6d3839fc00b78a2965a70dccae13b0dbfc7b20db7

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