Examples

Multi-threaded Application

from pyminideprecator import set_current_version, deprecate
import threading

@deprecate("2.0.0", "Legacy worker function")
def legacy_worker():
    pass

def worker(worker_id: int):
    set_current_version(f"1.0.{worker_id}", set_global=True)
    legacy_worker()  # Behavior depends on worker's version

set_current_version("main_app", set_global=True)

threads = []
for i in range(3):
    t = threading.Thread(target=worker, args=(i,))
    threads.append(t)
    t.start()

for t in threads:
    t.join()

Large-Scale Refactoring

# legacy.py
class LegacySystem:
    @deprecate("3.0.0", "Old authentication", error_version="2.3.0")
    async def authenticate(self, user) -> bool:
        return True

# migration.py
from pyminideprecator import set_current_version

set_current_version("2.0.0", set_global=True)
legacy = LegacySystem()

# During migration
await legacy.authenticate(user)  # Warning

# After upgrade
set_current_version("2.3.0", set_global=True)
await legacy.authenticate(user)  # Raises DeprecatedError