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

Uploaded CPython 3.13Windows x86-64

bosa_core_binary-0.6.0-cp313-cp313-manylinux_2_31_x86_64.whl (994.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.6.0-cp313-cp313-macosx_13_0_x86_64.whl (798.4 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

bosa_core_binary-0.6.0-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl (668.4 kB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64macOS 15.0+ ARM64

bosa_core_binary-0.6.0-cp312-cp312-win_amd64.whl (667.8 kB view details)

Uploaded CPython 3.12Windows x86-64

bosa_core_binary-0.6.0-cp312-cp312-manylinux_2_31_x86_64.whl (994.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.6.0-cp312-cp312-macosx_13_0_x86_64.whl (796.3 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

bosa_core_binary-0.6.0-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl (666.7 kB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64macOS 15.0+ ARM64

bosa_core_binary-0.6.0-cp311-cp311-win_amd64.whl (669.2 kB view details)

Uploaded CPython 3.11Windows x86-64

bosa_core_binary-0.6.0-cp311-cp311-manylinux_2_31_x86_64.whl (897.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.6.0-cp311-cp311-macosx_13_0_x86_64.whl (776.9 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

bosa_core_binary-0.6.0-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl (650.9 kB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64macOS 15.0+ ARM64

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 59857e50cf13107a81d5a9e926b8ac5407336526baa4f20612c0b2e7ae679164
MD5 e9ac68b0fe4bdf257163b39beb7eb0ec
BLAKE2b-256 cde5b7bccf3d43f7ce5b2e2fa9025c684d00020a528cb4184510f89533a6b9db

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 c70a4893d15636c48d445d6a5c71e217d402992f221df3edbd7946ba93682bcb
MD5 940ff47b7b09078986e174bf19eeed2c
BLAKE2b-256 b8f5ce0fbddce718b5ff035f7cff9c6b9c7822b2277cc04cbc082dbd137f9c79

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f0486af93f39a8c7db9fe5d5a5639c5da6fdc921a6d0bde4767ec25c240ecea6
MD5 c2badc5861de2aee3196d0eef41e373c
BLAKE2b-256 ac3fcbb73251fd61a4fadeed13d1d98b596189793ee6e3c69275d25c889eab6c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 9e063c9ec17a3123c5c3ac25b5564885685f3570b7dcb43c5310d16d74274382
MD5 bf7c8fc9d686cab8f34dd8632fa7f6b8
BLAKE2b-256 76a3a216ad061cabe3637c2f6940e065ad6242e6eea5c81d3cb03de97d543257

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.6.0-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.6.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fd9ec52f46787c936eacdec60774564127d282dce636851cb8e3c7419434c565
MD5 a652649b68b88f009ae439c6b66ae52f
BLAKE2b-256 a1ab94f58451c2f70670224064339d11442a8b5d4c45326efb3fffc5ae755ee6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 649e94a4987251cf911b11d5ba4adae544582312582b6ed8e4b151f97f0be8be
MD5 908ad894f6761567247d01f34424e307
BLAKE2b-256 d9989d3b20abd21605b2ddd7c70873421679ff98cd77df9c566ce92626cacb36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 44d80a4e0215ef44692ad5979119ed7ff37a928cbe5a5053c4f4f06c62c8a381
MD5 fbb85328c63c7b5b799b7b3469ebe316
BLAKE2b-256 eb68d3ad064c09fe921697d4bd8023b3eba7212c85ceedde0c69631b98e8c50d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 d3340629593aefae2c7a8e69286cd99f6abae34196e9d7a4470a8fcfdfd57406
MD5 5af7602f9e76930e007c667ea8c2a229
BLAKE2b-256 380b00b472c3bfe1671bf642e68b44f454169a8ea384a61486f27f97884d3212

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.6.0-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.6.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6c6bc9315c9e297eb72ac80abfca27d8c95a09de9cb46bcfca455437945ff9b3
MD5 849522a840ab40c78e85b7fb62e8fde5
BLAKE2b-256 c34bed2b4d05014686b65c5ba8da0851c5a499f2a02d21e22d41bd822c57041b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 9038367b5bbb9920725a0b7043e6d17c8528a2228453055d57b6f4d8cf600fd8
MD5 cc497f1459018206057dd2d7fd2661f0
BLAKE2b-256 17e716ad11e0cac95bb111c74d4c2c037fe15a18eacd920baa3f27751614b896

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e43f9218e3ef3a7ce564c0cc7afc7bf5c59b284e7b1b71d91192dcf712112749
MD5 799e62dab6d2445583a3966450163d44
BLAKE2b-256 b97d368ed5b96418e86d4fb7e41ca9fe04907f9e9941d46145cda395bbe849a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for bosa_core_binary-0.6.0-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.6.0-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 7315e89bb3f5ce3c2438a99754343277f31d2f0fda2af4361f43f140e03e7343
MD5 b02d64deef34d1d70c4325d93bbb5173
BLAKE2b-256 53d45840ebf8280ff78b4d5f880c9038bb5e94bf77eb4c7026d62afee1c63412

See more details on using hashes here.

Provenance

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