Fix versionstamp ordering in Python3
This commit is contained in:
parent
bb92b5a46a
commit
a84b6b8570
|
@ -25,6 +25,7 @@ import uuid
|
||||||
import struct
|
import struct
|
||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
|
import functools
|
||||||
from bisect import bisect_left
|
from bisect import bisect_left
|
||||||
|
|
||||||
from fdb import six
|
from fdb import six
|
||||||
|
@ -72,6 +73,7 @@ def _float_adjust(v, encode):
|
||||||
return six.int2byte(six.indexbytes(v, 0) ^ 0x80) + v[1:]
|
return six.int2byte(six.indexbytes(v, 0) ^ 0x80) + v[1:]
|
||||||
|
|
||||||
|
|
||||||
|
@functools.total_ordering
|
||||||
class SingleFloat(object):
|
class SingleFloat(object):
|
||||||
def __init__(self, value):
|
def __init__(self, value):
|
||||||
if isinstance(value, float):
|
if isinstance(value, float):
|
||||||
|
@ -91,21 +93,9 @@ class SingleFloat(object):
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
return not (self == other)
|
|
||||||
|
|
||||||
def __lt__(self, other):
|
def __lt__(self, other):
|
||||||
return _compare_floats(self.value, other.value) < 0
|
return _compare_floats(self.value, other.value) < 0
|
||||||
|
|
||||||
def __le__(self, other):
|
|
||||||
return _compare_floats(self.value, other.value) <= 0
|
|
||||||
|
|
||||||
def __gt__(self, other):
|
|
||||||
return not (self <= other)
|
|
||||||
|
|
||||||
def __ge__(self, other):
|
|
||||||
return not (self < other)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.value)
|
return str(self.value)
|
||||||
|
|
||||||
|
@ -124,6 +114,7 @@ class SingleFloat(object):
|
||||||
return bool(self.value)
|
return bool(self.value)
|
||||||
|
|
||||||
|
|
||||||
|
@functools.total_ordering
|
||||||
class Versionstamp(object):
|
class Versionstamp(object):
|
||||||
LENGTH = 12
|
LENGTH = 12
|
||||||
_TR_VERSION_LEN = 10
|
_TR_VERSION_LEN = 10
|
||||||
|
@ -200,25 +191,22 @@ class Versionstamp(object):
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __ne__(self, other):
|
def __lt__(self, other):
|
||||||
return not (self == other)
|
|
||||||
|
|
||||||
def __cmp__(self, other):
|
|
||||||
if self.is_complete():
|
if self.is_complete():
|
||||||
if other.is_complete():
|
if other.is_complete():
|
||||||
if self.tr_version == other.tr_version:
|
if self.tr_version == other.tr_version:
|
||||||
return cmp(self.user_version, other.user_version)
|
return self.user_version < other.user_version
|
||||||
else:
|
else:
|
||||||
return cmp(self.tr_version, other.tr_version)
|
return self.tr_version < other.tr_version
|
||||||
else:
|
else:
|
||||||
# All complete are less than all incomplete.
|
# All complete are less than all incomplete.
|
||||||
return -1
|
return True
|
||||||
else:
|
else:
|
||||||
if other.is_complete():
|
if other.is_complete():
|
||||||
# All incomplete are greater than all complete
|
# All incomplete are greater than all complete
|
||||||
return 1
|
return False
|
||||||
else:
|
else:
|
||||||
return cmp(self.user_version, other.user_version)
|
return self.user_version < other.user_version
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
if self.tr_version is None:
|
if self.tr_version is None:
|
||||||
|
|
Loading…
Reference in New Issue