Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/keri/core/coring.py
Original file line number Diff line number Diff line change
Expand Up @@ -1772,7 +1772,7 @@ class Number(Matter):


def __init__(self, raw=None, qb64b=None, qb64=None, qb2=None,
code=None, num=None, numh=None, **kwa):
code=None, num=None, numh=None, sn=None, snh=None, **kwa):
"""
Inherited Parameters: (see Matter)
raw (bytes): unqualified crypto material usable for crypto operations
Expand All @@ -1790,12 +1790,16 @@ def __init__(self, raw=None, qb64b=None, qb64=None, qb2=None,
num (int | str | None): non-negative int number or hex str of int
number or 0 if None
numh (str): hex string equivalent of non-negative int number
sn (int | str | None): alias of num for backwards compat with Seqner
snh (str): alias of numh for backwards compat with Seqner

Note: int("0xab", 16) is also valid since int recognizes 0x hex prefix

"""
if raw is None and qb64b is None and qb64 is None and qb2 is None:
try:
num = num if num is not None else sn
numh = numh if numh is not None else snh
if num is None:
if numh is None or numh == '':
num = 0
Expand Down
10 changes: 5 additions & 5 deletions src/keri/db/subing.py
Original file line number Diff line number Diff line change
Expand Up @@ -820,11 +820,11 @@ def __init__(self, *pa, **kwa):


class CesrSuberBase(SuberBase):
"""
Sub class of SuberBase where data is CESR encode/decode ducktyped subclass
"""Sub class of SuberBase where data is CESR encode/decode ducktyped subclass
instance such as Matter, Indexer, Counter with .qb64b property when provided
as fully qualified serialization
Automatically serializes and deserializes from qb64b to/from CESR instance
._ser override .put .set input value to be instance that is serialized

"""

Expand Down Expand Up @@ -926,12 +926,12 @@ def __init__(self, *pa, **kwa):


class CatCesrSuberBase(CesrSuberBase):
"""
Base Class whose values stored in db are a concatenation of the .qb64b property
"""Base Class whose values stored in db are a concatenation of the .qb64b property
from one or more subclass instances (qb64b is bytes of fully qualified
serialization) that support CESR encode/decode ducktyped subclass instance
such as Matter, Indexer, Counter
Automatically serializes and deserializes from qb64b to/from CESR instances
Automatically serializes and deserializes iterable of qb64b to/from CESR instances
._ser override .put .set input value to be instance that is serialized

Attributes:
db (dbing.LMDBer): base LMDB db
Expand Down
51 changes: 49 additions & 2 deletions tests/core/test_coring.py
Original file line number Diff line number Diff line change
Expand Up @@ -2739,8 +2739,32 @@ def test_number():
assert number.qb64 == nqb64
assert number.qb64b == nqb64.encode("utf-8")
assert number.qb2 == nqb2
assert number.num == num
assert number.numh == numh
assert number.num == num == number.sn
assert number.numh == numh == number.snh
assert number.positive
bs = ceil((len(number.code) * 3) / 4)
assert number.qb2[bs:] == number.raw

number = Number(sn=num)
assert number.code == code
assert number.raw == raw
assert number.qb64 == nqb64
assert number.qb64b == nqb64.encode("utf-8")
assert number.qb2 == nqb2
assert number.num == num == number.sn
assert number.numh == numh == number.snh
assert number.positive
bs = ceil((len(number.code) * 3) / 4)
assert number.qb2[bs:] == number.raw

number = Number(num=num, sn=0)
assert number.code == code
assert number.raw == raw
assert number.qb64 == nqb64
assert number.qb64b == nqb64.encode("utf-8")
assert number.qb2 == nqb2
assert number.num == num == number.sn
assert number.numh == numh == number.snh
assert number.positive
bs = ceil((len(number.code) * 3) / 4)
assert number.qb2[bs:] == number.raw
Expand All @@ -2757,6 +2781,29 @@ def test_number():
bs = ceil((len(number.code) * 3) / 4)
assert number.qb2[bs:] == number.raw

number = Number(snh=numh) # num can be hext str too
assert number.code == code
assert number.raw == raw
assert number.qb64 == nqb64
assert number.qb64b == nqb64.encode("utf-8")
assert number.qb2 == nqb2
assert number.num == num == number.sn
assert number.numh == numh == number.snh
assert number.positive
bs = ceil((len(number.code) * 3) / 4)
assert number.qb2[bs:] == number.raw

number = Number(numh=numh, snh="0") # num can be hext str too
assert number.code == code
assert number.raw == raw
assert number.qb64 == nqb64
assert number.qb64b == nqb64.encode("utf-8")
assert number.qb2 == nqb2
assert number.num == num == number.sn
assert number.numh == numh == number.snh
assert number.positive
bs = ceil((len(number.code) * 3) / 4)
assert number.qb2[bs:] == number.raw

number = Number(numh=numh)
assert number.code == code
Expand Down
Loading