apexdevkit 1.18.6__tar.gz → 1.18.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/PKG-INFO +1 -1
  2. apexdevkit-1.18.7/apexdevkit/id.py +54 -0
  3. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/pyproject.toml +1 -1
  4. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/LICENSE +0 -0
  5. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/README.md +0 -0
  6. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/__init__.py +0 -0
  7. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/annotation/__init__.py +0 -0
  8. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/annotation/deprecate.py +0 -0
  9. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/environment.py +0 -0
  10. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/error.py +0 -0
  11. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/__init__.py +0 -0
  12. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/builder.py +0 -0
  13. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/dependable.py +0 -0
  14. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/docs.py +0 -0
  15. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/name.py +0 -0
  16. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/request.py +0 -0
  17. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/resource.py +0 -0
  18. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/response.py +0 -0
  19. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/router.py +0 -0
  20. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/schema.py +0 -0
  21. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fastapi/service.py +0 -0
  22. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/fluent.py +0 -0
  23. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/formatter.py +0 -0
  24. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/http/__init__.py +0 -0
  25. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/http/fake.py +0 -0
  26. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/http/fluent.py +0 -0
  27. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/http/httpx.py +0 -0
  28. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/http/json.py +0 -0
  29. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/http/url.py +0 -0
  30. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/key_fn.py +0 -0
  31. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/py.typed +0 -0
  32. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/query/__init__.py +0 -0
  33. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/query/generator.py +0 -0
  34. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/query/query.py +0 -0
  35. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/__init__.py +0 -0
  36. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/base.py +0 -0
  37. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/connector.py +0 -0
  38. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/database.py +0 -0
  39. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/decorator.py +0 -0
  40. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/in_memory.py +0 -0
  41. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/interface.py +0 -0
  42. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/mongo.py +0 -0
  43. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/mssql.py +0 -0
  44. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/sql.py +0 -0
  45. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/repository/sqlite.py +0 -0
  46. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/server.py +0 -0
  47. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/synchronization.py +0 -0
  48. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/testing/__init__.py +0 -0
  49. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/testing/database.py +0 -0
  50. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/testing/fake.py +0 -0
  51. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/testing/rest.py +0 -0
  52. {apexdevkit-1.18.6 → apexdevkit-1.18.7}/apexdevkit/value.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apexdevkit
3
- Version: 1.18.6
3
+ Version: 1.18.7
4
4
  Summary: Apex Development Tools for python.
5
5
  Author: Apex Dev
6
6
  Author-email: dev@apex.ge
@@ -0,0 +1,54 @@
1
+ import os
2
+ from threading import Lock
3
+ from time import time
4
+
5
+
6
+ class ApexID:
7
+ last_timestamp: int = -1
8
+ sequence: int = 0
9
+ lock: Lock = Lock()
10
+
11
+ _metadata_bitmask: int = 0x0FFF
12
+ _sequence_bitmask: int = 0x03FF
13
+ _timestamp_bitmask: int = 0x03FFFFFFFFFF
14
+
15
+ @classmethod
16
+ def id(cls) -> int:
17
+ """
18
+ Generates a unique identifier with the following structure
19
+ from most significant to least significant:
20
+ 1 bit reserved
21
+ 41 bits for unix timestamp (millisecond precision)
22
+ 12 bits for metadata
23
+ 10 bits for sequence
24
+ """
25
+ with cls.lock:
26
+ current_timestamp = cls._get_timestamp()
27
+ if cls.last_timestamp == current_timestamp:
28
+ cls.sequence += 1
29
+ else:
30
+ cls.sequence = 0
31
+
32
+ if cls.sequence > cls._sequence_bitmask:
33
+ raise DuplicateIDException("Duplicate ID Generated")
34
+
35
+ cls.last_timestamp = current_timestamp
36
+
37
+ return (
38
+ (0 << 63)
39
+ | ((cls.last_timestamp & cls._timestamp_bitmask) << 22)
40
+ | ((cls._metadata() & cls._metadata_bitmask) << 10)
41
+ | (cls.sequence & cls._sequence_bitmask)
42
+ )
43
+
44
+ @classmethod
45
+ def _get_timestamp(cls) -> int:
46
+ return int(time() * 1000)
47
+
48
+ @classmethod
49
+ def _metadata(cls) -> int:
50
+ return int(os.getenv("APEX_ID_METADATA", "0"))
51
+
52
+
53
+ class DuplicateIDException(Exception):
54
+ pass
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "apexdevkit"
3
- version = "1.18.6"
3
+ version = "1.18.7"
4
4
  description = "Apex Development Tools for python."
5
5
  authors = ["Apex Dev <dev@apex.ge>"]
6
6
  readme = "README.md"
File without changes
File without changes