Add TID stuff

Changed files
+90
src
atpasser
+90
src/atpasser/tid/__init__.py
···
+
import datetime, random
+
+
+
class TID:
+
"""
+
A class representing a TID.
+
+
Attributes:
+
time (datetime.datetime): The time of a TID.
+
clockIdentifier (int): what it said.
+
"""
+
+
def __init__(
+
self, time: datetime.datetime | None = None, clockIdentifier: int | None = None
+
) -> None:
+
"""
+
Initalizes an TID object.
+
+
Parameters:
+
time (datetime.datetime): The time of a TID.
+
clockIdentifier (int): what it said.
+
"""
+
if time == None:
+
self.timestamp = datetime.datetime.now()
+
else:
+
self.timestamp = time
+
if clockIdentifier == None:
+
self.clockIdentifier = random.randrange(0, 1024)
+
else:
+
self.clockIdentifier = clockIdentifier
+
+
def __int__(self):
+
"""
+
Convert the TID to integer.
+
"""
+
timestamp = int(self.timestamp.timestamp() * 1000000)
+
return timestamp * 1024 + self.clockIdentifier
+
+
def __str__(self):
+
"""
+
Convert the TID to base32-sortable integer.
+
"""
+
integer = int(self)
+
binary = f"{integer:065b}"
+
return "".join(
+
[
+
"234567abcdefghijklmnopqrstuvwxyz"[int(binary[i : i + 5], base=2)]
+
for i in range(0, len(binary), 5)
+
]
+
)
+
+
+
def importTIDfromInteger(value: int | None = None):
+
"""
+
This function imports from Integer to TID.
+
+
Parameters:
+
value (int): The integer.
+
+
Returns:
+
TID: The TID of given integer.
+
"""
+
if value == None:
+
value = int(TID())
+
clockIdentifier = value % 1024
+
timestamp = (value >> 10) / 1000000
+
return TID(datetime.datetime.fromtimestamp(timestamp), clockIdentifier)
+
+
+
def importTIDfromBase32(value: str | None = None):
+
"""
+
This function imports from Integer to TID.
+
+
Parameters:
+
value (int): The integer.
+
+
Returns:
+
TID: The TID of given integer.
+
"""
+
if value == None:
+
value = str(TID())
+
b32s = "234567abcdefghijklmnopqrstuvwxyz"
+
return importTIDfromInteger(
+
sum(
+
[
+
b32s.find(value[i]) * (32 ** (len(value) - i - 1))
+
for i in range(len(value))
+
]
+
)
+
)