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.1b3-cp313-cp313-win_amd64.whl (173.4 kB view details)

Uploaded CPython 3.13Windows x86-64

bosa_core_binary-0.5.1b3-cp313-cp313-manylinux_2_31_x86_64.whl (950.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.5.1b3-cp313-cp313-macosx_11_0_universal2.macosx_13_0_arm64.whl (637.3 kB view details)

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

bosa_core_binary-0.5.1b3-cp313-cp313-macosx_10_13_universal2.macosx_13_0_x86_64.whl (731.6 kB view details)

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

bosa_core_binary-0.5.1b3-cp312-cp312-win_amd64.whl (175.3 kB view details)

Uploaded CPython 3.12Windows x86-64

bosa_core_binary-0.5.1b3-cp312-cp312-manylinux_2_31_x86_64.whl (951.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.5.1b3-cp312-cp312-macosx_11_0_universal2.macosx_13_0_arm64.whl (636.4 kB view details)

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

bosa_core_binary-0.5.1b3-cp312-cp312-macosx_10_9_universal2.macosx_13_0_x86_64.whl (728.0 kB view details)

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

bosa_core_binary-0.5.1b3-cp311-cp311-win_amd64.whl (643.8 kB view details)

Uploaded CPython 3.11Windows x86-64

bosa_core_binary-0.5.1b3-cp311-cp311-manylinux_2_31_x86_64.whl (861.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.5.1b3-cp311-cp311-macosx_11_0_universal2.macosx_13_0_arm64.whl (619.7 kB view details)

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

bosa_core_binary-0.5.1b3-cp311-cp311-macosx_10_9_universal2.macosx_13_0_x86_64.whl (719.9 kB view details)

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

File details

Details for the file bosa_core_binary-0.5.1b3-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6ae088d67a6e90f7035772bf43cd91d2fe4e5fb2ae3e6430e613eb9458c164e7
MD5 1c999b4de28fa0d842e8b28768264a49
BLAKE2b-256 d746d44105b8aa92a7698e846609fb5726112100f7c824267b13b10725c7b18e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 2ab8671a6fc730098a7efa3a10cc5e39f6c43b21d8fb2aeb4318b8438cd0dac3
MD5 aff591527638deb7fba88a36460f89a1
BLAKE2b-256 e29b4a683c29aa864e668e537f91998268bd2940016b87edb4d5f0e3fd25f0b8

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.5.1b3-cp313-cp313-macosx_11_0_universal2.macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp313-cp313-macosx_11_0_universal2.macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 5174fdd480d4b484b30470b58b813034fa67b79123fe159a501d5609e5697fd7
MD5 dd45ae153335537ce917b9b05b5f67cb
BLAKE2b-256 abc1602ad2c21bafe76b8790c70b37ca0f85212f7510955163956a37387651cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.1b3-cp313-cp313-macosx_11_0_universal2.macosx_13_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.5.1b3-cp313-cp313-macosx_10_13_universal2.macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp313-cp313-macosx_10_13_universal2.macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 2586dae03c03486a8b6facdc2789048a224dd24ca4a52b719d87d74a15c9d0d0
MD5 7ad27e85ace33149078ffcc9e459610f
BLAKE2b-256 64dd6914272c6b6eaac94e22cb8e34c8f0d74c1378047370a346328572a800ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.1b3-cp313-cp313-macosx_10_13_universal2.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.5.1b3-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6cf17fcc9a67f867f550662ffcf98c6500bdc2c2344a9da67751280fd5036164
MD5 2d4cfef72927553fdf864a1ed7fb71a3
BLAKE2b-256 063374987d3b9d6ecb3e38cf47e13e9b708d314a35c7b0604f8281471aa9b619

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 c9cddbb353134997c2dc661d224dc833aa379c04d0cfa251e2022f64caffff8c
MD5 b11ec1370dade9edb5af3b642aaeae0b
BLAKE2b-256 68aae8082486b67c5501e54451eec0e3b058443c9c3e902a0c3e2156c41df97e

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.5.1b3-cp312-cp312-macosx_11_0_universal2.macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp312-cp312-macosx_11_0_universal2.macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 8a259d223a3c77952e38264cae4a0c597736f8c44d80f2471d2face0b093bb61
MD5 1f17624128e76a7d9621d10c7aa3980b
BLAKE2b-256 2192645560dfec46ed55717706e00f299e4265c130bc2fc073c31ed0b42b4523

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.1b3-cp312-cp312-macosx_11_0_universal2.macosx_13_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.5.1b3-cp312-cp312-macosx_10_9_universal2.macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp312-cp312-macosx_10_9_universal2.macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b04bebf005631fb55c716ddd1f76f70d04d22c69bd9f636515c52ffcc467a5c0
MD5 dce29c135626b5b965df1cba833952aa
BLAKE2b-256 155b7e2424179561c98bf6b58f4b73efe899ee4e55fe5287f42bb9830ab9754b

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.1b3-cp312-cp312-macosx_10_9_universal2.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.5.1b3-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 176bea7798ec6792d8c8a8d4f23c6660e18875dceacf3e6ba0add63a98773101
MD5 ce3c7543e60826eee0569ad940368415
BLAKE2b-256 1d8be456397e722690b0d24115d806d4de19a451872f7ed40ffbeea9005661df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 097adda8204af73efab4569afb4ce634058822e317e777fa0bc779b4f92a5fcd
MD5 bc4b629d8708425d788a3c4763323a71
BLAKE2b-256 aa3c436555400a8324f2da5d41413b07f453001bdb63c7f44c51a4f59487e18f

See more details on using hashes here.

File details

Details for the file bosa_core_binary-0.5.1b3-cp311-cp311-macosx_11_0_universal2.macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp311-cp311-macosx_11_0_universal2.macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 6dd35f7b4aa975668f5ce7daad926c940e61f8a09c3a2866245d5f29922027e5
MD5 8d280e119a08a3bf20ca69ff540d4455
BLAKE2b-256 4bccf2e46587a185583d5f71c7b961a9ebf3435f932bdd70516493dce9727557

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.1b3-cp311-cp311-macosx_11_0_universal2.macosx_13_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.5.1b3-cp311-cp311-macosx_10_9_universal2.macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.5.1b3-cp311-cp311-macosx_10_9_universal2.macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 52f47fb1279155d087fd60a464e6bd3e9548841d56bdb0fe4cca5a5fd9a7ebb3
MD5 213ca78c33e4db9eed485ec00c9d64b2
BLAKE2b-256 c4cd2ed8693de9a7183dc5b309f5ded5eaab4819a60968a19747a5b1812aacd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.5.1b3-cp311-cp311-macosx_10_9_universal2.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