X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=id_generator.py;h=dc2ac9cc810a4e1d588d60231371e873d9d31966;hb=f2600f30801c849fc1d139386e3ddc3c9eb43e30;hp=4e650dca9f13662a1ace7013d4f00bcd3a0082e2;hpb=709370b2198e09f1dbe195fe8813602a3125b7f6;p=python_utils.git diff --git a/id_generator.py b/id_generator.py index 4e650dc..dc2ac9c 100644 --- a/id_generator.py +++ b/id_generator.py @@ -1,5 +1,8 @@ #!/usr/bin/env python3 +"""A helper class for generating thread safe monotonically increasing +id numbers.""" + import itertools import logging @@ -10,7 +13,7 @@ logger = logging.getLogger(__name__) generators = {} -def get(name: str) -> int: +def get(name: str, *, start=0) -> int: """ Returns a thread safe monotonically increasing id suitable for use as a globally unique identifier. @@ -20,14 +23,19 @@ def get(name: str) -> int: 0 >>> id_generator.get('student_id') 1 + >>> id_generator.get('employee_id', start=10000) + 10000 + >>> id_generator.get('employee_id', start=10000) + 10001 """ if name not in generators: - generators[name] = itertools.count() + generators[name] = itertools.count(start, 1) x = next(generators[name]) - logger.debug(f"Generated next id {x}") + logger.debug("Generated next id %d", x) return x if __name__ == '__main__': import doctest + doctest.testmod()