Skip to main content

Global thread context manager

Project description

global-manager

Tests codecov Mypy pypi downloads versions

Global thread context manager.

Installation

pip install global-manager

Examples

from typing import Optional
import dataclasses
import logging
from global_manager import GlobalManager

logger = logging.getLogger('my_view')

@dataclasses.dataclass
class UserContext:
    """Some context"""
    ip: str
    profile_id: int

class UserContextManager(GlobalManager[UserContext]):
    @classmethod
    def get_current_user_context(cls) -> Optional[UserContext]:
        """a business meaning method name is a good practice"""
        return cls.get_current_context()


def my_func():
    user_context: Optional[UserContext] = UserContextManager.get_current_user_context()
    # retrieve context
    logger.debug('my_view profile_id=%s, ip=%s', user_context.profile_id, user_context.ip)
    # other logic ...


# some where in code, m.b. in web framework
def my_view(request):
    # Imagine that the data is obtained from the request
    user_context = UserContext(ip='127.0.0.1', profile_id=1)
    
    with UserContext(user_context):
        return my_func()

Context in context.

with UserContext(uc1):
    UserContext.get_current_user_context()  # uc1 context
    
    with UserContext(uc2):
        UserContext.get_current_user_context() # uc2 context

    UserContext.get_current_user_context()  # uc1 context

UserContext.get_current_user_context()  # None

Async notations is supported too.

async with UserContext(uc1):
    UserContext.get_current_user_context()  # uc1 context
    
    async with UserContext(uc2):
        UserContext.get_current_user_context() # uc2 context

    UserContext.get_current_user_context()  # uc1 context

UserContext.get_current_user_context()  # None

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

global_manager-1.0.2.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

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

global_manager-1.0.2-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file global_manager-1.0.2.tar.gz.

File metadata

  • Download URL: global_manager-1.0.2.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.20

File hashes

Hashes for global_manager-1.0.2.tar.gz
Algorithm Hash digest
SHA256 9048a3a4a4fb52590c7d73731eae5c7657a3b3143029251458d877d71c20773c
MD5 c73037c8811d5c78473e9400255a0009
BLAKE2b-256 a2eb337be4b6ded8653e33f889e7aacedf30d8d284f7ccc719dfe25d74af8a39

See more details on using hashes here.

File details

Details for the file global_manager-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: global_manager-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.20

File hashes

Hashes for global_manager-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7d8e119c08aca7242f43842bba3e76474ce1d39cce04980ae0db01ee2cc42628
MD5 7dbaf87d9ee2a2729d37e548878433ad
BLAKE2b-256 e07599a4309900cc10b7ab0b0a37b115c0ef1acc5b75019f117833ff5c26404e

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