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.4.5-cp313-cp313-win_amd64.whl (596.5 kB view details)

Uploaded CPython 3.13Windows x86-64

bosa_core_binary-0.4.5-cp313-cp313-manylinux_2_31_x86_64.whl (905.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.4.5-cp313-cp313-macosx_14_0_arm64.whl (633.4 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

bosa_core_binary-0.4.5-cp313-cp313-macosx_13_0_x86_64.whl (711.6 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

bosa_core_binary-0.4.5-cp312-cp312-win_amd64.whl (598.1 kB view details)

Uploaded CPython 3.12Windows x86-64

bosa_core_binary-0.4.5-cp312-cp312-manylinux_2_31_x86_64.whl (905.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.4.5-cp312-cp312-macosx_14_0_arm64.whl (632.0 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

bosa_core_binary-0.4.5-cp312-cp312-macosx_13_0_x86_64.whl (707.6 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

bosa_core_binary-0.4.5-cp311-cp311-win_amd64.whl (597.7 kB view details)

Uploaded CPython 3.11Windows x86-64

bosa_core_binary-0.4.5-cp311-cp311-manylinux_2_31_x86_64.whl (815.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.4.5-cp311-cp311-macosx_14_0_arm64.whl (625.3 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

bosa_core_binary-0.4.5-cp311-cp311-macosx_13_0_x86_64.whl (698.1 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a7960b7aae889cf369e7f59ab86f800e019244ce9637562fcaff9ffc471cbdb9
MD5 43ebef1a9831dfbed8ec59d9b3a900b8
BLAKE2b-256 915784f006259064d59994cad4187e71641bac12eaaec0c345760ec408418288

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-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.4.5-cp313-cp313-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 3986cc2ff2fe8be2e58ca829ae2d6ed152931114930a42a4b269b44c17647cec
MD5 5bb6488ff09c0beb64f284b442cde9f0
BLAKE2b-256 756d414a9b4812ff173ad3ad73239dc97e7766f4e7864c605527691577a61ce6

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.4.5-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a70d7e65aac7573280e0180c2e9bac37f40abba8030afa98d5f883d8ebebe092
MD5 528c2501b7bc8d437c5372517f5de3e5
BLAKE2b-256 c68800432f9da857784f41997f2c87044870a1dcb170cdc48e79a6f48393ced3

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-cp313-cp313-macosx_14_0_arm64.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.4.5-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 de1c6fb3aa698c918a5ce8224c1ec2ebf325d9731320086c1a52e492536c1ca0
MD5 b5e447709f9796cb12efa6b388f52028
BLAKE2b-256 f98057a9aa99e0574bcfec729bc2649c858567f0568d4880345f968dd97328c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-cp313-cp313-macosx_13_0_x86_64.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.4.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 490f9d045d6c0edd844270cba83ba0a3de0f6599c2d1f126dd649b4c236d6960
MD5 224b1cfe4a0907620a71e614d7246c49
BLAKE2b-256 4f651e0dcf00ea9a19b7eed401515b811f09015fa07158325adaff679b5c9180

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-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.4.5-cp312-cp312-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 9a64915389680d2c4d7931e36e41635270db1094ae74f02dcbdf5aa6442a9d29
MD5 96e3f9a69b9ef39e0fd2d5570c1aa3f4
BLAKE2b-256 9668f9bf9955eb22f1bcf700c2391b442722d2ff06d37a9a1ee75b677f4d0217

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.4.5-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5a6ff5ea025427f7d07727681afbae491bac45bfb9827daf6730d2ae3b7d7340
MD5 4826a62916d887e45fa36db005c9a74b
BLAKE2b-256 f6c9aaa96cd54e6b4c61f3e5aa58bdc794e44bf0fd0d64a2b9baa6546c11e323

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-cp312-cp312-macosx_14_0_arm64.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.4.5-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 50099d788086c425188cfa46ff5ea54c665fa5a309e813cc2e72f8f397b86993
MD5 78153f12fac6458ff472d3d221dfd8f7
BLAKE2b-256 b2e478dc2541ed203732f214ff25cd3461022315c3aaffe64fa06ce78175d2f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-cp312-cp312-macosx_13_0_x86_64.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.4.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3b177cf8e77010ad95fdeb2d2c44f10c7a2adaaceac76fdf580184186a099cb7
MD5 5945912df7280ae8df802b71f46c9351
BLAKE2b-256 b05ee14ce5c92d556136d654f3a3ca57d2da0f422170306692b9aa802a74b50d

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-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.4.5-cp311-cp311-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 a85f338245a76b16a1e57d2e0ab0df259ff9cdce45ef3132e1c4c2d20b8701d4
MD5 b7c1da6ac66c81825ca51edab066583b
BLAKE2b-256 b7a0988faae0d91881fc6739c9f822d419d3d6660f4e8340c7c426ef7b2c2c2a

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.4.5-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6747cdbb99b4d1a6a1b6d4b9021352712a8c0826cf5fe13ed47f8aec5f8f09d0
MD5 7ff28109880880612da629485ae4b7fc
BLAKE2b-256 ee2ea446241f677c93a3a61a7dbba057e6ab96f55ecddee2d4b4b1ecbd257309

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-cp311-cp311-macosx_14_0_arm64.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.4.5-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.4.5-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ba969e4bdb419f95b76fbea8eb02b27e67efbb99e77576e7ce7615f62a5406cd
MD5 8611ecbca362914ac9e1c12646917ad8
BLAKE2b-256 e13b7aa41a3e2de9cca3d3755ee68fcb63b87928ae171f1403dcd650b5404371

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.4.5-cp311-cp311-macosx_13_0_x86_64.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