github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/clients/python-wrapper/tests/utests/test_namedtuple.py (about) 1 from tests.utests.common import expect_exception_context 2 from lakefs.namedtuple import LenientNamedTuple 3 4 5 class NamedTupleTest(LenientNamedTuple): 6 field1: str 7 field2: int 8 field3: bool 9 10 11 def test_namedtuple(): 12 nt = NamedTupleTest( 13 field1="1", 14 field2=1, 15 field3=True) 16 assert nt.field1 == "1" 17 assert nt.field2 == 1 18 assert nt.field3 19 20 # try to modify value 21 with expect_exception_context(AttributeError): 22 nt.field1 = "2" 23 24 # Create named tuple with unknown args 25 kwargs = { 26 "field1": "test", 27 "field2": 2, 28 "field3": False, 29 "field4": "something", 30 "field5": None, 31 } 32 nt2 = NamedTupleTest(**kwargs) 33 assert nt.field1 != nt2.field1 34 assert nt2.field1 == "test" 35 assert nt2.field2 == 2 36 assert not nt2.field3 37 38 with expect_exception_context(AttributeError): 39 nt2.field4 # pylint: disable=pointless-statement 40 41 with expect_exception_context(AttributeError): 42 nt2.field5 # pylint: disable=pointless-statement 43 44 # Verify extra kwargs are in 'unknown' dict 45 assert nt2.unknown['field4'] == "something" 46 assert nt2.unknown['field5'] is None 47 48 # Missing args 49 with expect_exception_context(TypeError): 50 NamedTupleTest(field2=1) 51 52 # Verify comparison works with different unknown fields 53 kwargs["field5"] = "something" 54 nt3 = NamedTupleTest(**kwargs) 55 assert nt2 == nt3