Skip to main content

Thread-safe singleton and multiton pattern decorators.

Project description

philiprehberger-singleton

Tests PyPI version Last updated

Thread-safe singleton and multiton pattern decorators.

Installation

pip install philiprehberger-singleton

Usage

Singleton

The @singleton decorator ensures only one instance of a class exists:

from philiprehberger_singleton import singleton

@singleton
class Database:
    def __init__(self, url: str) -> None:
        self.url = url

db1 = Database("postgres://localhost/mydb")
db2 = Database("postgres://localhost/other")

assert db1 is db2  # same instance
assert db1.url == "postgres://localhost/mydb"

Reset

Use reset() to discard the cached instance (useful in tests):

Database.reset()
db3 = Database("postgres://localhost/new")
assert db3.url == "postgres://localhost/new"

Multiton

The @multiton(key=...) decorator maintains one instance per unique key value:

from philiprehberger_singleton import multiton

@multiton(key="name")
class Connection:
    def __init__(self, name: str, timeout: int = 30) -> None:
        self.name = name
        self.timeout = timeout

cache = Connection("cache", timeout=10)
db = Connection("db", timeout=60)
cache2 = Connection("cache")

assert cache is cache2       # same key -> same instance
assert cache is not db        # different key -> different instance

Reset

Use reset() to discard all cached instances:

Connection.reset()

API

Function / Class Description
@singleton Thread-safe singleton decorator. Returns the same instance on every call.
@multiton(key) Thread-safe multiton decorator factory. One instance per unique value of the named parameter.
cls.reset() Discards cached instance(s), added by both decorators.

Development

pip install -e .
python -m pytest tests/ -v

Support

If you find this project useful:

Star the repo

🐛 Report issues

💡 Suggest features

❤️ Sponsor development

🌐 All Open Source Projects

💻 GitHub Profile

🔗 LinkedIn Profile

License

MIT

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

philiprehberger_singleton-0.2.0.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

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

philiprehberger_singleton-0.2.0-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_singleton-0.2.0.tar.gz.

File metadata

File hashes

Hashes for philiprehberger_singleton-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ec6451639baf21febefa93c2f1cc066bf87351c6df7399c19ec2727032de2a72
MD5 17b95ca35aa81ca873d1b38068c533ea
BLAKE2b-256 c0e9d1c15475130cfa69cc44b58151d0040a6e8169c45b665400161bc383830a

See more details on using hashes here.

File details

Details for the file philiprehberger_singleton-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_singleton-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 abc5e6ba1e7a1c0444c32b94cb464959f116ca3b962ba72823d948db64ea1c36
MD5 ddd649e3ac63426968744b0bee29791f
BLAKE2b-256 b05d54b878976fb692b756a7be888a0c48f1de882b34120450e0c8085c7f458c

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