Skip to main content

A simple Python library to manage kinds of services connections

Project description

Service Linker Library

Overview

The Service Linker library provides a unified and extensible way to manage connections to various services like databases, message brokers, and search engines. It simplifies connection management by ensuring proper lifecycle handling, thread-safety, and flexibility for different service requirements.

The core functionality includes:

  • Registering service adapters for various services.
  • Managing both thread-safe and non-thread-safe connections.
  • Providing context management for connections.

Key Features

  1. Extensibility: Easily register new services by creating adapters.
  2. Thread-Safety: Handle both thread-safe and non-thread-safe connections.
  3. Connection Lifecycle Management: Automatically close all connections at program exit.
  4. Context Management: Simplify connection handling using Python’s with statement.

Components

core.py

The core.py module provides the main ServiceManager class, which handles connection registration, retrieval, and cleanup.

Key Classes

  1. ServiceManager

    • Manages connections and ensures proper lifecycle handling.
    • Supports both global and thread-local connection storage.
    • Provides methods to register adapters, retrieve connections, and close connections.
  2. ConnectionWrapper

    • Wraps individual connections to provide additional management capabilities.
    • Delegates attribute and method access to the underlying connection object.

adapter.py

The adapter.py module defines the abstract base class ServiceAdapter, which must be implemented for each new service. It ensures consistency and enforces the implementation of methods to establish and close connections.

Key Methods

  • do_get_connection: Establishes a connection.
  • do_close: Closes a connection.

Adapters

The library includes several pre-built adapters for popular services:

  1. Elasticsearch (adapters/elasticsearch_adapter.py)

    • Adapter: ElasticSearchAdapter
    • Thread-Safe: Yes
  2. Kafka Consumer (adapters/kafka_consumer_adapter.py)

    • Adapter: KafkaConsumerAdapter
    • Thread-Safe: No
  3. Kafka Producer (adapters/kafka_producer_adapter.py)

    • Adapter: KafkaProducerAdapter
    • Thread-Safe: Yes
  4. MongoDB (adapters/mongo_adapter.py)

    • Adapter: MongoAdapter
    • Thread-Safe: Yes
  5. MySQL (Raw) (adapters/mysql_raw_adapter.py)

    • Adapter: MySQLRawAdapter
    • Thread-Safe: No

Usage

1. Registering an Adapter

Adapters are registered automatically using the @ServiceManager.register_service_adapter decorator.

2. Retrieving a Connection

from service_linker.core import ServiceManager

connection = ServiceManager.get_connection("elasticsearch", hosts=["http://localhost:9200"])

3. Using Context Management

from service_linker.core import ServiceManager

with ServiceManager.connection_context("mongo", host="localhost", port=27017) as conn:
    db = conn.my_database
    print(db.list_collection_names())

4. Closing Connections

from service_linker.core import ServiceManager

ServiceManager.close_connection("elasticsearch", hosts=["http://localhost:9200"])

5. Closing All Connections

All connections are automatically closed when the program exits, but you can manually invoke it:

from service_linker.core import ServiceManager

ServiceManager.close_all_connections()

Extending the Library

To add support for a new service, create a new adapter by subclassing ServiceAdapter:

from service_linker.adapter import ServiceAdapter
from service_linker.core import ServiceManager

@ServiceManager.register_service_adapter
class MyServiceAdapter(ServiceAdapter):
    thread_safe = True
    service_name = "my_service"

    def do_get_connection(self, **params):
        # Logic to establish a connection
        return connection

    def do_close(self, connection):
        # Logic to close the connection
        pass

Installation

Clone the repository and install dependencies:

pip install service_linker

License

This project is licensed under the MIT License. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

service_linker-0.0.1a0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

service_linker-0.0.1a0-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file service_linker-0.0.1a0.tar.gz.

File metadata

  • Download URL: service_linker-0.0.1a0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.10.9

File hashes

Hashes for service_linker-0.0.1a0.tar.gz
Algorithm Hash digest
SHA256 24888333dc365d41a9a80d09bc116a9e45047778c82d1ce846ba83fb96ed1c1c
MD5 2c33ec92f1f6796bedf19b7d487d7b97
BLAKE2b-256 f555efb566fd30a902f33f7283766814a0711e096910ca4e94ff4aaf4c8b59c3

See more details on using hashes here.

File details

Details for the file service_linker-0.0.1a0-py3-none-any.whl.

File metadata

File hashes

Hashes for service_linker-0.0.1a0-py3-none-any.whl
Algorithm Hash digest
SHA256 35aaaa3edc42ca0f0d273df7abb7829840cd3dfa398e56c8d2f168e81d5fd8c2
MD5 e5f52e0bf5fe56f011af23c395d3618e
BLAKE2b-256 e6caf2e6dc0e3b731ed321569dd9ce770c9647b416871046e308fac4fa9413be

See more details on using hashes here.

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