def test_serialization(): @dataclass class Record: first: str # first name last: str # last name street: str # street address city: str # city name state: str # state code zip: int # zip code jim = Record(first="Jim", last="Black", street="100 Main Street", city="Riverton", state="UT", zip=84058) with dbing.openLMDB() as db: k = basing.Komer(db=db, schema=Record, subdb='records.') srl = k._serializer(Serials.mgpk) expected = b'\x86\xa5first\xa3Jim\xa4last\xa5Black\xa6street\xaf100 Main Street\xa4city\xa8Riverton\xa5state\xa2UT\xa3zip\xce\x00\x01HZ' assert srl(jim) == expected srl = k._serializer(Serials.cbor) expected = b'\xa6efirstcJimdlasteBlackfstreeto100 Main StreetdcityhRivertonestatebUTczip\x1a\x00\x01HZ' assert srl(jim) == expected srl = k._serializer(Serials.json) expected = b'{"first":"Jim","last":"Black","street":"100 Main Street","city":"Riverton","state":"UT","zip":84058}' assert srl(jim) == expected
def test_get_invalid_dataclass(): @dataclass class Record: first: str def __iter__(self): return iter(asdict(self)) @dataclass class AnotherClass: age: int with dbing.openLMDB() as db: mydb = basing.Komer(db=db, schema=Record, subdb='records.') sue = Record(first="Susan") keys = ("test_key", "0001") mydb.put(keys=keys, data=sue) mydb = basing.Komer(db=db, schema=AnotherClass, subdb='records.') with pytest.raises(ValueError): mydb.get(keys)
def test_not_found_entity(): @dataclass class Record: first: str def __iter__(self): return iter(asdict(self)) with dbing.openLMDB() as db: mydb = basing.Komer(db=db, schema=Record, subdb='records.') sue = Record(first="Susan") keys = ("test_key", "0001") mydb.put(keys=keys, data=sue) actual = mydb.get(("not_found", "0001")) assert actual is None
def test_deserialization(): @dataclass class Record: first: str # first name last: str # last name street: str # street address city: str # city name state: str # state code zip: int # zip code msgp = b'\x86\xa5first\xa3Jim\xa4last\xa5Black\xa6street\xaf100 Main Street\xa4city\xa8Riverton\xa5state\xa2UT\xa3zip\xce\x00\x01HZ' cbor = b'\xa6efirstcJimdlasteBlackfstreeto100 Main StreetdcityhRivertonestatebUTczip\x1a\x00\x01HZ' json = b'{"first": "Jim", "last": "Black", "street": "100 Main Street", "city": "Riverton", "state": "UT", "zip": 84058}' with dbing.openLMDB() as db: k = basing.Komer(db=db, schema=Record, subdb='records.') desrl = k._deserializer(Serials.mgpk) actual = helping.datify(Record, desrl(msgp)) assert actual.first == "Jim" assert actual.last == "Black" assert actual.street == "100 Main Street" assert actual.city == "Riverton" assert actual.state == "UT" assert actual.zip == 84058 desrl = k._deserializer(Serials.json) actual = helping.datify(Record, desrl(json)) assert actual.first == "Jim" assert actual.last == "Black" assert actual.street == "100 Main Street" assert actual.city == "Riverton" assert actual.state == "UT" assert actual.zip == 84058 desrl = k._deserializer(Serials.cbor) actual = helping.datify(Record, desrl(cbor)) assert actual.first == "Jim" assert actual.last == "Black" assert actual.street == "100 Main Street" assert actual.city == "Riverton" assert actual.state == "UT" assert actual.zip == 84058
def test_happy_path(): """ Test Komer object class """ @dataclass class Record: first: str # first name last: str # last name street: str # street address city: str # city name state: str # state code zip: int # zip code def __iter__(self): return iter(asdict(self)) jim = Record(first="Jim", last="Black", street="100 Main Street", city="Riverton", state="UT", zip=84058) jimser = json.dumps(asdict(jim)).encode("utf-8") jim = helping.datify(Record, json.loads(bytes(jimser).decode("utf-8"))) assert isinstance(jim, Record) with dbing.openLMDB() as db: assert isinstance(db, dbing.LMDBer) assert db.name == "test" assert db.opened mydb = basing.Komer(db=db, schema=Record, subdb='records.') assert isinstance(mydb, basing.Komer) sue = Record(first="Susan", last="Black", street="100 Main Street", city="Riverton", state="UT", zip=84058) keys = ("test_key", "0001") mydb.put(keys=keys, data=sue) actual = mydb.get(keys=keys) assert actual.first == "Susan" assert actual.last == "Black" assert actual.street == "100 Main Street" assert actual.city == "Riverton" assert actual.state == "UT" assert actual.zip == 84058 mydb.rem(keys) actual = mydb.get(keys=keys) assert actual is None assert not os.path.exists(db.path) assert not db.opened