Skip to main content

BOSA Core Library

Project description

BOSA Core

BOSA Core is a flexible plugin-based architecture that allows you to build modular and extensible applications. It provides a robust framework for managing plugins, handling dependencies, and injecting services.

Key Features

  • 🔌 Plugin-based Architecture
  • 💉 Dependency Injection
  • 🔄 Service Registry
  • 🛠️ Flexible Plugin Handlers
  • 🌐 HTTP Interface Support
  • 📊 OpenTelemetry Integration
  • 🛡️ Sentry Error Tracking
  • 📜 Logging

Installation

Prerequisites

1. Installation from Pypi

Choose one of the following methods to install the package:

Using pip

pip install bosa-core-binary

Using Poetry

poetry add bosa-core-binary

2. Development Installation (Git)

For development purposes, you can install directly from the Git repository:

poetry add "git+ssh://git@github.com/GDP-ADMIN/bosa-sdk.git#subdirectory=python/bosa-core"

Plugin Architecture Overview

Plugin Architecture

How It Works

  1. Plugin Manager: The central piece that orchestrates everything

    • Manages plugin lifecycle
    • Handles service registration
    • Initializes plugins with required dependencies
  2. Service Registry: A container for all services

    • Stores service instances
    • Handles dependency injection
    • Maps service types to their implementations
    • Note: You don't need to create your own Service Registry - it's integrated into the Manager!
  3. Plugin Handler: Interface for providing services to plugins

    • Creates service injections through create_injections
    • Initializes plugin-specific resources
    • Can be extended for different types of plugins (e.g., HTTP handlers)
  4. Plugin: Base class for all plugins

    • Has basic metadata (name, description, version)
    • Receives injected services automatically
    • Can be extended with specific functionality
  5. Open Telemetry: Initializer class to use open telemetry

    • Integrates with OpenTelemetry for tracing and metrics
    • Provides observability for plugins and services
    • Can be configured to export data to various backends (e.g., Jaeger, Prometheus)
  6. Sentry: Initializer class to use sentry

    • Integrates with Sentry for error tracking and performance monitoring
    • Captures exceptions and sends them to Sentry
    • Provides insights into application performance and errors

Authentication

BOSA Core provides a robust, multi-tenancy authentication system, allowing secure client and user management.

  1. Client Management:

    • Clients are created using a Master Key (BOSA_WHITELISTED_KEYS).
    • Each client has a unique API key used for authentication.
    • API Key Format: sk-client-<base64-client-id>.<base64-client-name>.<client-secret>.
    • Clients can manage their users and authentication settings.
  2. User Authentication:

    • Clients create users by providing an identifier.
    • Each user receives a secret, which is displayed only once.
    • Users authenticate using their identifier and secret.
    • User API Key Format: sk-user-<base64-user-id>.<base64-user-identifier>.<user-secret>.
  3. Token-Based Access:

    • Upon authentication, users receive JWT tokens for secure access.
    • Tokens are verified for subsequent requests.
    • Tokens expire after 30 days (default: 43,200 minutes).
    • Tokens can be revoked when necessary.
  4. Third-Party Integrations:

    • Users can create integrations with third-party services.
    • Authentication credentials are securely stored.
    • Each integration can be assigned scoped access.

For detailed implementation, refer to the Authentication README.

Implementation Details

The plugin system works through these key components:

1. Plugin Manager

from fastapi_interface import FastApiHttpInterface

# Create FastAPI handler
fastapi_handler = FastApiHttpInterface()

# Initialize manager with the handler
manager = PluginManager(handlers=[fastapi_handler])
manager.register_plugin(MyPlugin)
  • Initializes the plugin system
  • Manages plugin lifecycle
  • Handles service registration

2. Plugin Handler

from bosa_core.plugin import PluginHandler

class MyHandler(PluginHandler):
    @classmethod
    def create_injections(cls, instance):
        # Tell the manager what services this handler provides
        return {MyService: instance}

    @classmethod
    def initialize_plugin(cls, instance, plugin):
        # Initialize plugin resources
        pass
  • Creates service mappings via create_injections
  • Initializes plugin resources
  • Can be customized for different plugin types

3. Plugin

from bosa_core.plugin import Plugin
from fastapi_interface import FastApiService

class MyPlugin(Plugin):
    # Services will be injected automatically
    fastapi_service: FastApiService

    def __init__(self, name, description, version):
        super().__init__(name, description, version)
  • Base class for all plugins
  • Receives injected services
  • Can be extended with custom functionality

4. Open telemetry external exporter (enable fastapi & langchain instrumentation)

from bosa_core.telemetry import OpenTelemetryConfig, FastAPIConfig, init_telemetry
from fastapi import FastAPI

endpoint = "your-exporter-endpoint"
port = "your-exporter-port"
attributes = {
   "key1":"val1"
}
app = FastAPI()
use_langchain_instrumentation = True
fastapi_config = FastAPIConfig(app=app)
otel_config = OpenTelemetryConfig(endpoint=endpoint, port=port, attributes=attributes, fastapi_config=fastapi_config, use_langchain=use_langchain_instrumentation)
init_telemetry(TelemetryConfig(otel_config=otel_config))

5. Sentry

from bosa_core.telemetry import SentryConfig, init_telemetry

def traces_sampler(sampling_context: dict) -> float:
    """Determine appropriate sampling rate for Sentry transactions.
    Args:
        sampling_context: Context dictionary containing transaction information
    Returns:
        float: Sampling rate between 0 and 1
    """

    ### you can use customization (ex: for certain name sampler will be 0.1) for trace_sampler in this class
    return 1.0


dsn = "your-dsn"
environment = "development/staging/production"
release = "your release tag"
sentry_config = SentryConfig(
        dsn=dsn,
        environment=environment,
        release=release,
        traces_sampler=traces_sampler,
        send_default_pii=True,
    )
init_telemetry(TelemetryConfig(sentry_config=sentry_config))

6. Sentry with Open Telemetry (enable fastapi & langchain instrumentation)

from bosa_core.telemetry import SentryConfig, init_telemetry, FastAPIConfig, OpenTelemetryConfig
from fastapi import FastAPI


def traces_sampler(sampling_context: dict) -> float:
    """Determine appropriate sampling rate for Sentry transactions.
    Args:
        sampling_context: Context dictionary containing transaction information
    Returns:
        float: Sampling rate between 0 and 1
    """

    ### you can use customization (ex: for certain name sampler will be 0.1) for trace_sampler in this class
    return 1.0


dsn = "your-dsn"
environment = "development/staging/production"
release = "your release tag"

attributes = {
   "key1":"val1"
}
app = FastAPI()
use_langchain_instrumentation = True
fastapi_config = FastAPIConfig(app=app)
opentelemetry_init = OpenTelemetryConfig(attributes=attributes, fastapi_config=fastapi_config, use_langchain=use_langchain_instrumentation)

sentry_config = SentryConfig(
        dsn=dsn,
        environment=environment,
        release=release,
        traces_sampler=traces_sampler,
        send_default_pii=True,
        open_telemetry_initiliazer=opentelemetry_init
    )
init_telemetry(sentry_config=sentry_config)

7. Logging Ner API Handler

from bosa_core.logger import init_ner_pii_logging_handler

init_ner_pii_logging_handler(logger_name="logging-name", api_url="https://dev-api-gdplabs-ner-api.obrol.id/anonymize", api_field="text", pii_ner_process_enabled=True)


logger.info("contoh nomor ktp 3525011212941001\ncontoh email john.doe@example.com\ncontoh nomor telepon +628121729819 dan 0812898029384.\ncontoh npwp 01.123.456.7-891.234" ) # if you using gdplabs ner API output will be contoh nomor ktp <ID_KTP_1>\ncontoh email <EMAIL_ADDRESS_1>\ncontoh nomor telepon <PHONE_NUMBER_1> dan <PHONE_NUMBER_2>.\ncontoh npwp <ID_NPWP_1>

[!WARNING] If you are using Logger Ner API handler, the logging process may take some time because it needs to call an API for every log entry synchronously.

8. Logging Regex Handler

from bosa_core.logger import init_regex_pii_logging_handler

init_regex_pii_logging_handler(logger_name="logging-name", pii_regex_process_enabled=True)


logger.info("contoh nomor ktp 3525011212941001\ncontoh email john.doe@example.com\ncontoh nomor telepon +628121729819 dan 0812898029384.\ncontoh npwp 01.123.456.7-891.234" ) # if you using gdplabs ner API output will be contoh nomor ktp <ID_KTP_1>\ncontoh email <EMAIL_ADDRESS_1>\ncontoh nomor telepon <PHONE_NUMBER_1> dan <PHONE_NUMBER_2>.\ncontoh npwp <ID_NPWP_1>

Getting Started

  1. Install dependencies:

    poetry install
    
  2. Create a plugin:

    class MyPlugin(Plugin):
        name = "my-plugin"
        description = "My awesome plugin"
        version = "1.0.0"
    
  3. Register and use:

    # Using FastAPI as an example
    from fastapi import FastAPI
    from fastapi_interface import FastApiHttpInterface
    
    app = FastAPI()
    fastapi_handler = FastApiHttpInterface(app)
    manager = PluginManager(handlers=[fastapi_handler])
    manager.register_plugin(MyPlugin)
    

Development

  • Use Poetry for dependency management
  • Install pre-commit hooks poetry run pre-commit install. This will run checks before each commit.
  • Run ./build.sh to perform all checks:
    • Code formatting and validation (ruff)
    • Documentation style (pydocstyle)
    • Tests (pytest)
    • And more!

References

Product Requirements Documents(PRD):

  • N/A

Architecture Documents:

Design Documents:

Implementation Documents:

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 Distributions

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

Built Distributions

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

bosa_core_binary-0.5.3-cp313-cp313-win_amd64.whl (642.1 kB view details)

Uploaded CPython 3.13Windows x86-64

bosa_core_binary-0.5.3-cp313-cp313-manylinux_2_31_x86_64.whl (955.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.5.3-cp313-cp313-macosx_11_0_universal2.whl (678.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

bosa_core_binary-0.5.3-cp313-cp313-macosx_10_13_universal2.whl (759.4 kB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

bosa_core_binary-0.5.3-cp312-cp312-win_amd64.whl (643.1 kB view details)

Uploaded CPython 3.12Windows x86-64

bosa_core_binary-0.5.3-cp312-cp312-manylinux_2_31_x86_64.whl (956.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.5.3-cp312-cp312-macosx_11_0_universal2.whl (676.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

bosa_core_binary-0.5.3-cp312-cp312-macosx_10_13_universal2.whl (753.8 kB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

bosa_core_binary-0.5.3-cp311-cp311-win_amd64.whl (646.7 kB view details)

Uploaded CPython 3.11Windows x86-64

bosa_core_binary-0.5.3-cp311-cp311-manylinux_2_31_x86_64.whl (865.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.5.3-cp311-cp311-macosx_11_0_universal2.whl (670.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

bosa_core_binary-0.5.3-cp311-cp311-macosx_10_9_universal2.whl (744.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file bosa_core_binary-0.5.3-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 83465ed8aec5b4d7088bbab5b1e32eb5b7d9796ea8b0b4b240adab37368587ae
MD5 01ce389a48b9024a69689446952dc622
BLAKE2b-256 6b166f3f496d07327f950f86053b9df3d5faca5824f95a08599cf84738348e07

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp313-cp313-win_amd64.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp313-cp313-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 afb85d7c3c0d740db9f7548bda633c580315a67db2be749149374121c7e4345a
MD5 fe602de2ae78137de1236abf7186082a
BLAKE2b-256 038165a46fa87e1da3111de6f6d37c00d05ebc94585490df84205f33300a816d

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.5.3-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 41767330b0d572b063e0fbd767b31ffd290e4396c1c2ecbf00b7c545020ce92b
MD5 091203eeeb1fea6f6638a8e73c14cc25
BLAKE2b-256 44390e8b285ad0da1a87605edc310332b55a76d30299b8683a82c0eba3c492f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp313-cp313-macosx_11_0_universal2.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 07bd5c0588bf93d0080a6f29feeadb6effa3de5799a43413f53bd9eb3fded2a2
MD5 c5a38a9e56bacf93230f047aa9b0cb8b
BLAKE2b-256 3879c7246f138709cd595f720fddcff1790b44904332457221a5690a30252aae

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 13a51ee85bd6676c7fe16d33a1c24405549f6ceafa634fd90bae6b46c5d098d0
MD5 15bfd0f5848faa07f41335b8accf3220
BLAKE2b-256 b2a87e70eca0e13c17ec6f4bb0db49919d19b5b18e5aa887e4555cc831327c71

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp312-cp312-win_amd64.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp312-cp312-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 71daa40777a5229afd63664b4a334f1503892ccb61e5cd2c705af60a20e57984
MD5 9887bcf374f06133b546f1bf4daeb84f
BLAKE2b-256 facfb115fcace87083fb836b2a7ab856c170bb4e601031d04130e4769f6b9c20

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.5.3-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 5f5768213faa905cce307089ad91276df04f01412949a41ee4b1d454274e6e8b
MD5 a3c4f70a2e3e6831cc97d2480c6f7f0f
BLAKE2b-256 31b2c3f30c44fa200b976fbcfda5ed383b276a30c067ad734d3f9e479e0e13f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp312-cp312-macosx_11_0_universal2.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 ff7809cfd634b428308e33cd4ccc30867cd6d2e00a70b7cc75df7d2a3501560b
MD5 707612b4222b1e96a448725a74a2d8b1
BLAKE2b-256 dbcd5409963e20351c44512e11608bed0ef5267e3b4a1b71f5a6e0c78f820a74

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp312-cp312-macosx_10_13_universal2.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9e07febfb78e15e47c3be4315297df464d50f7564be764f49119958ccc11875b
MD5 6a76365470f02e5ceef7b888a3af5ece
BLAKE2b-256 09b7bf8242ff1338c374e1a645a63b3876d0602db792174d318506553c330315

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp311-cp311-win_amd64.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp311-cp311-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 f6c6f6908881f16046b9b5fd69b14849cd463e30564eab44629983bdcbd40dcb
MD5 bfcc5be21ac167659df1b592474c41e8
BLAKE2b-256 494b15d8acc7758737a8862c5e272f23087af3d818f95723956d9460031b8434

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.5.3-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 34db358419af80376b4581767a6e0b1a52eb5c9fb62552d607324f5d8aacdac4
MD5 6a2bbe1c5c889e76bc57ff8e47dd336d
BLAKE2b-256 68c4ec5fa09c63ca8a732cdec588d3908cd8c64cac37ca12663ccb1f1a8cd656

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp311-cp311-macosx_11_0_universal2.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bosa_core_binary-0.5.3-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 73d1b94e8b36785d966bb0ac6551b1b74c5c385310f46048951c87cf9bca3a26
MD5 5d047943ee7c61465a05aa4cbad617f3
BLAKE2b-256 d6f54476f5f90d9d92ae03640b8a879863716435e9082f182be14e0045969d8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.3-cp311-cp311-macosx_10_9_universal2.whl:

Publisher: build-binary.yml on GDP-ADMIN/bosa-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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