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

Uploaded CPython 3.13Windows x86-64

bosa_core_binary-0.8.3-cp313-cp313-manylinux_2_31_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.8.3-cp313-cp313-macosx_13_0_x86_64.whl (833.5 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

bosa_core_binary-0.8.3-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl (696.4 kB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64macOS 15.0+ ARM64

bosa_core_binary-0.8.3-cp312-cp312-win_amd64.whl (692.9 kB view details)

Uploaded CPython 3.12Windows x86-64

bosa_core_binary-0.8.3-cp312-cp312-manylinux_2_31_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.8.3-cp312-cp312-macosx_13_0_x86_64.whl (830.3 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

bosa_core_binary-0.8.3-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl (694.7 kB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64macOS 15.0+ ARM64

bosa_core_binary-0.8.3-cp311-cp311-win_amd64.whl (696.5 kB view details)

Uploaded CPython 3.11Windows x86-64

bosa_core_binary-0.8.3-cp311-cp311-manylinux_2_31_x86_64.whl (933.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.8.3-cp311-cp311-macosx_13_0_x86_64.whl (810.6 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

bosa_core_binary-0.8.3-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl (678.2 kB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64macOS 15.0+ ARM64

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ad4c3e8d9db09994dbb471e98e6164b5b0c1f0581d9599b91d258b6f102c29ea
MD5 f2580c28605b2224fd4e751c1654b214
BLAKE2b-256 b3d16673d9cb5aac2b7b6eec235eccf4621a37c785439440125d3ba7c91a1903

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 fe84fcc8baa34673b602ff3be48e1edd5ed39b482021a7b206f033d4357228ab
MD5 17e8336bf9b761dcd0b7f05b0b4d5ade
BLAKE2b-256 cad7b2e4a6d926a09869d9331460c1091a6e61b0aec3f9eb68419cec30d4d920

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.8.3-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 99b17edd1e6c71d5e7de128223a93dda6dba267bdd97446f10562f981d6c69ba
MD5 a8843f04e0bbfd2acac2356cba2e5af9
BLAKE2b-256 3902e7da1c858c466889bf7c1362a4b402c146baa4b853a68eab1922f9e78091

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.8.3-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.8.3-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 83a61406d86eed3c0831472d9d144d2417f14ecf94c087a25506c781a6a080d5
MD5 80f545c79e838e7e6cd6978df39133a3
BLAKE2b-256 ae13132847b3e3ae14b007ffab39f00efa6b3b9e2d506babc3ad6f754338362e

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.8.3-cp313-cp313-macosx_13_0_arm64.macosx_15_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.8.3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a17502ae0bb70142f2e54718e1eb4ad15a2d1b64b84bc62f906e706df530fd31
MD5 fc79ed255130324fa84def52fe3b1279
BLAKE2b-256 78b01096b6715d0d341e50224416714c65377e320858161b2eabe2460406ef93

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 f927887b551f0e2d407b7a9c3a103800185c2664a10d6a9268da2c61c652e8be
MD5 68eaeedf4cd5fb66415e6f419aeb6df3
BLAKE2b-256 c178cec8f0e96ce05649414dfd86fdb3640be7849b8131a53985172b6fcf8cce

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.8.3-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 d1054f1efba827aae102d634cc6ecd99fed2b896d7629436345a5e849bf3554d
MD5 7a6a35200b0defcbc514f1ade8960c71
BLAKE2b-256 b8fadb95ab75e84c600741266a9680ee675e4b6e97b073e3bc3b879489803785

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.8.3-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.8.3-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c706b179a9663a953aa52e5d061b1f2f8202e47e1b78208f41262fb9ac56c5ce
MD5 e633cfad037137b5d522b9ad90c1570f
BLAKE2b-256 4ebcf64100184e2c2f6fb67a781e22ebc696a1bb9a85c04d3adeb4665473d840

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.8.3-cp312-cp312-macosx_13_0_arm64.macosx_15_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.8.3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 71ec5103356cc7cd980024b9be1f62738b5157bcfb7ef7803b5153b6e160b6c5
MD5 5565338a68afa84b41e4468ea693d49a
BLAKE2b-256 12cd092d1ad19b866b24926081b992807ae97dec3374e875afaec018fd929495

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 54f23850775294031cb39a03524f44c3032ed50ffae6af4cd3f5ed5c443ea411
MD5 ae73de79da653a243a28ee8bbc195d7d
BLAKE2b-256 17c19789614bf042d2ef1bc805829aed16cac95e5a5c6f2cb2400dbba7108db1

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.8.3-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 7857bba972e5aae036e8a4a3fa697ebeebc408065b853873a035bfdfd2c16e18
MD5 5c72b3e09d9969a2c085b9f98c07182c
BLAKE2b-256 0ef002bf56b33e33d665905f2074ebb0d46243756237614c2ca03a9e393c4ede

See more details on using hashes here.

Provenance

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

File details

Details for the file bosa_core_binary-0.8.3-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.8.3-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 40a1cc0004255b85968ea7c818fdb0b58b868388389564e8235619f8c6dd6db7
MD5 03240d06fa7f577f5c547fa5dcfa3085
BLAKE2b-256 15820aa43a84b4d75be1e64b86c5dea8110dd4f1b2bffc1b4ca7fc17a3a82a93

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.8.3-cp311-cp311-macosx_13_0_arm64.macosx_15_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.

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