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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.6.0b1-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.0b1-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.0b1-cp312-cp312-win_amd64.whl (667.8 kB view details)

Uploaded CPython 3.12Windows x86-64

bosa_core_binary-0.6.0b1-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.0b1-cp312-cp312-macosx_13_0_x86_64.whl (796.4 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

bosa_core_binary-0.6.0b1-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.0b1-cp311-cp311-win_amd64.whl (669.2 kB view details)

Uploaded CPython 3.11Windows x86-64

bosa_core_binary-0.6.0b1-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.0b1-cp311-cp311-macosx_13_0_x86_64.whl (777.0 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

bosa_core_binary-0.6.0b1-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.0b1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 205436748c3a273d3a623473ca45ad1edad61ab8abbd8117836579a660c8311a
MD5 7d1de7d22211af8dc0195e9ba1bd803f
BLAKE2b-256 46dd0b1341e367e42847bd4a836368b38b6a1eb0f0eebbe4b633b7ccf341eb38

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 0705052b2c1910cd6a418fb7c979a5e3c84dc8a427329a8a4cdc0ad9442113a2
MD5 234526239dc779bad96d19e07623a767
BLAKE2b-256 d11615095925df91915c7537aaa1340525525d203922a5d16bb3bea2324259ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 633ae74a45c1c3e4ed5ec9676a691e695f44965d296a15a0b89fec06dc35af44
MD5 b8e14890027f61bafc1d7d9f78e5d5a3
BLAKE2b-256 7a17f5f4c66966de336793e800ea896b23eca0c0cf00ac166314894d84b1112a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 5a9f628dfeabf1f6854772e499bc3be479c37ed3ca5a090317bec737abca6150
MD5 90d22c761e6e3a0c58316702806957e8
BLAKE2b-256 3d0833476d285d4b3fe20502f049be4450608d90eb7faefd243d90215b6b2509

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bca3bbe358f1194da5dcede6154f27198e0ed271b921cb39949a2a846056ac3a
MD5 8f53f6462301d16e39eac2c8453a3934
BLAKE2b-256 5b15c62947fb8db673188653fcfc2d0c041913fe939f6f2a431d1b6420893d4b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 e7fc88d699c29e77704d062d0348cc247c3f584f4ef417d2bd5c4d6547e16dd1
MD5 d29a7d01f291176f3f5a4b3695903751
BLAKE2b-256 366b6940c0c3fd70aa96ddd8df8e4f018531ec3c710096edbab246138f0b8567

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 66d5adb162ce2b52fc32e16dd045729ba9c23bde46b19b498784869f6d3471ce
MD5 3de15fac49af99325fbcea6900ca5ad0
BLAKE2b-256 9572e3a3e70fcb6122cfb666ebcab341151bf467ff9ec78beee245fd79e80ef4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 02fc06a32678a1c0ddb9170ab1c73477821e9e8f03f5dfbae35e2bbddb8d60ae
MD5 af7a1d6abe1bf7eaace2e67a42535b29
BLAKE2b-256 6966b45da598cfad91ff9f8505920a8afdf903d9ef5d4e5af7e9ebdc5e3f7f45

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bc2876748605d3d50e6213b62f390e1905373adff6e8510c74f5efee37622378
MD5 f299216ee7751c07785866aac83c304a
BLAKE2b-256 1ebe4ee3764791ab1c2a9375019a44f611233f163429be331df1c9d0eb53d62c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 a2e897f8506bc5da246cf63977cd247d08e53ee1d66ba5cf549f5a2c717ef682
MD5 3e33130791100f55c689fedea65ae14c
BLAKE2b-256 98934072f389520d7fee5cd321db3cf75cb081f507dcfef489b5c5671fa66592

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 b1c1032b9fa3c5feb7e40e005ab97bcdeb16f17112c2ebe7ae81ce0cc6c96604
MD5 25bbd29f73a76cab97dd27467c613df8
BLAKE2b-256 925b9ae1bc511599be2c3a430af445f5a0f92692bdbec745ef8f5910fd579a5d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.6.0b1-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 1612d6bfc224073a5db3545a4dc4c973ec21b58493c7007d1c3e0911fce949a5
MD5 59e898008064f2787271a0cd2f944b55
BLAKE2b-256 83610a15b9963f5cd8697b3c420d1c72d06db8543899fc6e908dc5ed6bc5d279

See more details on using hashes here.

Provenance

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