about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/dns/serial.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/dns/serial.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are here HEAD master
Diffstat (limited to '.venv/lib/python3.12/site-packages/dns/serial.py')
-rw-r--r--.venv/lib/python3.12/site-packages/dns/serial.py118
1 files changed, 118 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/dns/serial.py b/.venv/lib/python3.12/site-packages/dns/serial.py
new file mode 100644
index 00000000..3417299b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/dns/serial.py
@@ -0,0 +1,118 @@
+# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license
+
+"""Serial Number Arthimetic from RFC 1982"""
+
+
+class Serial:
+    def __init__(self, value: int, bits: int = 32):
+        self.value = value % 2**bits
+        self.bits = bits
+
+    def __repr__(self):
+        return f"dns.serial.Serial({self.value}, {self.bits})"
+
+    def __eq__(self, other):
+        if isinstance(other, int):
+            other = Serial(other, self.bits)
+        elif not isinstance(other, Serial) or other.bits != self.bits:
+            return NotImplemented
+        return self.value == other.value
+
+    def __ne__(self, other):
+        if isinstance(other, int):
+            other = Serial(other, self.bits)
+        elif not isinstance(other, Serial) or other.bits != self.bits:
+            return NotImplemented
+        return self.value != other.value
+
+    def __lt__(self, other):
+        if isinstance(other, int):
+            other = Serial(other, self.bits)
+        elif not isinstance(other, Serial) or other.bits != self.bits:
+            return NotImplemented
+        if self.value < other.value and other.value - self.value < 2 ** (self.bits - 1):
+            return True
+        elif self.value > other.value and self.value - other.value > 2 ** (
+            self.bits - 1
+        ):
+            return True
+        else:
+            return False
+
+    def __le__(self, other):
+        return self == other or self < other
+
+    def __gt__(self, other):
+        if isinstance(other, int):
+            other = Serial(other, self.bits)
+        elif not isinstance(other, Serial) or other.bits != self.bits:
+            return NotImplemented
+        if self.value < other.value and other.value - self.value > 2 ** (self.bits - 1):
+            return True
+        elif self.value > other.value and self.value - other.value < 2 ** (
+            self.bits - 1
+        ):
+            return True
+        else:
+            return False
+
+    def __ge__(self, other):
+        return self == other or self > other
+
+    def __add__(self, other):
+        v = self.value
+        if isinstance(other, Serial):
+            delta = other.value
+        elif isinstance(other, int):
+            delta = other
+        else:
+            raise ValueError
+        if abs(delta) > (2 ** (self.bits - 1) - 1):
+            raise ValueError
+        v += delta
+        v = v % 2**self.bits
+        return Serial(v, self.bits)
+
+    def __iadd__(self, other):
+        v = self.value
+        if isinstance(other, Serial):
+            delta = other.value
+        elif isinstance(other, int):
+            delta = other
+        else:
+            raise ValueError
+        if abs(delta) > (2 ** (self.bits - 1) - 1):
+            raise ValueError
+        v += delta
+        v = v % 2**self.bits
+        self.value = v
+        return self
+
+    def __sub__(self, other):
+        v = self.value
+        if isinstance(other, Serial):
+            delta = other.value
+        elif isinstance(other, int):
+            delta = other
+        else:
+            raise ValueError
+        if abs(delta) > (2 ** (self.bits - 1) - 1):
+            raise ValueError
+        v -= delta
+        v = v % 2**self.bits
+        return Serial(v, self.bits)
+
+    def __isub__(self, other):
+        v = self.value
+        if isinstance(other, Serial):
+            delta = other.value
+        elif isinstance(other, int):
+            delta = other
+        else:
+            raise ValueError
+        if abs(delta) > (2 ** (self.bits - 1) - 1):
+            raise ValueError
+        v -= delta
+        v = v % 2**self.bits
+        self.value = v
+        return self