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

Uploaded CPython 3.13Windows x86-64

bosa_core_binary-0.8.1-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.1-cp313-cp313-macosx_13_0_x86_64.whl (829.5 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

bosa_core_binary-0.8.1-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl (694.1 kB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64macOS 15.0+ ARM64

bosa_core_binary-0.8.1-cp312-cp312-win_amd64.whl (690.3 kB view details)

Uploaded CPython 3.12Windows x86-64

bosa_core_binary-0.8.1-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.1-cp312-cp312-macosx_13_0_x86_64.whl (827.3 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

bosa_core_binary-0.8.1-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl (692.2 kB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64macOS 15.0+ ARM64

bosa_core_binary-0.8.1-cp311-cp311-win_amd64.whl (694.3 kB view details)

Uploaded CPython 3.11Windows x86-64

bosa_core_binary-0.8.1-cp311-cp311-manylinux_2_31_x86_64.whl (929.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bosa_core_binary-0.8.1-cp311-cp311-macosx_13_0_x86_64.whl (808.6 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

bosa_core_binary-0.8.1-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl (674.8 kB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64macOS 15.0+ ARM64

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e6c0ae919daa7043f96968fe9af35373175d5b636c03b075c8c8bf8f26381828
MD5 6d346c4748ffe68c5eca162a8c361e36
BLAKE2b-256 e0b90be53bb92af5c6dbf7ec0946ab2e7f1b8337444cc79c25ef47a41b366b83

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp313-cp313-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 c72176f4ec711d85c70951211245306f7b55a4cf3f8abb9bc03f6fc2fbded73a
MD5 58e45333f126fb998e52a88b5ff41100
BLAKE2b-256 a37c7d6390b5192f412d09758c2e1d231dce61f35cb582f4541b2d375a936417

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f931bedda37637ac6f30f450cdee1b4f2804656a77ea5d76fa249ecd36580e1f
MD5 0ead819401c37342ebca3b9929fc121b
BLAKE2b-256 fe4b87c88a635ba4a402244cfbcf4b3088d587c60cd1ebb908114bd5fd9f7f10

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp313-cp313-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0287994e13363e5e3874f3e1b46bc2d9f23261c08fc5ddffd268973f9ae5f099
MD5 e219a1501c0af582bf5ecd4277b2e438
BLAKE2b-256 d54bb377c54e1d79b7ec262b94d8a046d1d7a94c72235e4403be8ecf4cf05325

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6026882e447cd30dc727848d170a49491290d5571d2157c54c7b136dd0ead062
MD5 d7ff766dc3629eec324bdb0cc1db5cde
BLAKE2b-256 a205c01c7c00aa6514286deeb6cf49aa38b34fd2c927cb1bcb874bd60c3ef63e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 272270cbdb1b71292c13a2b1ec6852e916d0e09006f7c29619b9e0a99dcbb6f7
MD5 13aff936b577508efed89a38f87f114a
BLAKE2b-256 1da473f17b4f198fd9700cd24ed625e9b66b293341acf33881f1432cec65048f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 4852fd7d089efe8141c7e98708cfbfb3d2005d0835ea74f2536e05adae6bcd04
MD5 e86d25c82c49e0de35f39cfd61e275b1
BLAKE2b-256 b8bc15db79616644c4f72f3244f09866d738a68cc57b1eed934e212a9d0d0710

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp312-cp312-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 defd5c54d4887768b2d6d50aa7a1ed1ce9e2d7ed0c37c301069e2e02496e7626
MD5 cea756d407c2a89db8e292f0a5233816
BLAKE2b-256 c5ec6e32b3203eea2a53fe6da0fd5fe6ee811ede7d254e0033802b0dc6931bd3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d7c3353b9a82121280582701fe6a1ccf16fddca5e8e66b67bcf966da6e7dcbf3
MD5 0d4a44d6eab07e774c0c42d1baecefcf
BLAKE2b-256 bd6ca94ed067a5b1784ea4227ec6cf3f6ad1984e31dcfb449892f02cd862ad43

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 0453236e53f427897d306a48e6aabf93233a657d29dfc3f7b2fe32c28a8c0947
MD5 68bb7280f727818ecfc482fa768bd7df
BLAKE2b-256 1c24b2e7ed54268fb7945fbebde76c42584d3197f3870b12874d7a932415d478

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 2c971193d974aa5368ff546334e48af1d7d456abf376b1be22bbda466ccd9b18
MD5 b841a17d207cebade58e245b7a7623a5
BLAKE2b-256 35ce8d33025d6aa1059041122295643561302596a765842fdf40226f4935e762

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for bosa_core_binary-0.8.1-cp311-cp311-macosx_13_0_arm64.macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 505359c30cdfd646bbbd72b8761d2123f291f050d5ee40b12ced311d931dbe62
MD5 4cea07781adeb58c8e501a8c0e133847
BLAKE2b-256 ec04c4a270efcddc07b0a9426f16ea0ade14fbf97d815f0d434ee6431270b78a

See more details on using hashes here.

Provenance

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