mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-16 02:02:58 -07:00
Update dnspython-2.2.0
This commit is contained in:
parent
4b28040d59
commit
4d62245cf5
111 changed files with 9077 additions and 5877 deletions
117
lib/dns/serial.py
Normal file
117
lib/dns/serial.py
Normal file
|
@ -0,0 +1,117 @@
|
|||
# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license
|
||||
|
||||
"""Serial Number Arthimetic from RFC 1982"""
|
||||
|
||||
class Serial:
|
||||
def __init__(self, value, bits=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
|
Loading…
Add table
Add a link
Reference in a new issue