Merge pull request #311 from prebuilder/fingerprint_class
Fingerprint class
This commit is contained in:
@@ -674,11 +674,11 @@ class Fingerprint(str):
|
|||||||
"""
|
"""
|
||||||
@property
|
@property
|
||||||
def keyid(self):
|
def keyid(self):
|
||||||
return str(self).replace(' ', '')[-16:]
|
return self[-16:]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def shortid(self):
|
def shortid(self):
|
||||||
return str(self).replace(' ', '')[-8:]
|
return self[-8:]
|
||||||
|
|
||||||
def __new__(cls, content):
|
def __new__(cls, content):
|
||||||
if isinstance(content, Fingerprint):
|
if isinstance(content, Fingerprint):
|
||||||
@@ -686,15 +686,6 @@ class Fingerprint(str):
|
|||||||
|
|
||||||
# validate input before continuing: this should be a string of 40 hex digits
|
# validate input before continuing: this should be a string of 40 hex digits
|
||||||
content = content.upper().replace(' ', '')
|
content = content.upper().replace(' ', '')
|
||||||
if not bool(re.match(r'^[A-F0-9]{40}$', content)):
|
|
||||||
raise ValueError("Expected: String of 40 hex digits")
|
|
||||||
|
|
||||||
# store in the format: "AAAA BBBB CCCC DDDD EEEE FFFF 0000 1111 2222 3333"
|
|
||||||
# ^^ note 2 spaces here
|
|
||||||
spaces = [ ' ' if i != 4 else ' ' for i in range(10) ]
|
|
||||||
chunks = [ ''.join(g) for g in six.moves.zip_longest(*[iter(content)] * 4) ]
|
|
||||||
content = ''.join(j for i in six.moves.zip_longest(chunks, spaces, fillvalue='') for j in i).strip()
|
|
||||||
|
|
||||||
return str.__new__(cls, content)
|
return str.__new__(cls, content)
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
@@ -713,13 +704,29 @@ class Fingerprint(str):
|
|||||||
return False # pragma: no cover
|
return False # pragma: no cover
|
||||||
|
|
||||||
def __ne__(self, other):
|
def __ne__(self, other):
|
||||||
return not (self == other)
|
return str(self) != str(other)
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return hash(str(self.replace(' ', '')))
|
return hash(str(self))
|
||||||
|
|
||||||
def __bytes__(self):
|
def __bytes__(self):
|
||||||
return binascii.unhexlify(six.b(self.replace(' ', '')))
|
return binascii.unhexlify(six.b(self))
|
||||||
|
|
||||||
|
def __pretty__(self):
|
||||||
|
content = self
|
||||||
|
if not bool(re.match(r'^[A-F0-9]{40}$', content)):
|
||||||
|
raise ValueError("Expected: String of 40 hex digits")
|
||||||
|
|
||||||
|
# store in the format: "AAAA BBBB CCCC DDDD EEEE FFFF 0000 1111 2222 3333"
|
||||||
|
# ^^ note 2 spaces here
|
||||||
|
spaces = [ ' ' if i != 4 else ' ' for i in range(10) ]
|
||||||
|
chunks = [ ''.join(g) for g in six.moves.zip_longest(*[iter(content)] * 4) ]
|
||||||
|
content = ''.join(j for i in six.moves.zip_longest(chunks, spaces, fillvalue='') for j in i).strip()
|
||||||
|
return content
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return self.__class__.__name__+"("+repr(self.__pretty__())+")"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SorteDeque(collections.deque):
|
class SorteDeque(collections.deque):
|
||||||
|
|||||||
Reference in New Issue
Block a user