def test_dump_namedtuple(self):
        dumper = datadumper.Dumper()
        assert dumper.dump(NamedA(1, 'a')) == {'a': 1, 'b': 'a'}
        assert dumper.dump(NamedA(1, 'a', 'yes')) == {'a': 1, 'b': 'a', 'c': 'yes'}

        dumper.hidedefault = False
        assert dumper.dump(NamedA(1, 'a')) == {'a': 1, 'b': 'a', 'c': 'no'}
 def test_broken_handler(self):
     dumper = datadumper.Dumper()
     dumper.handlers.insert(0, (lambda v: 'a' + v is None, lambda l, v: None))
     with self.assertRaises(TypeError):
         dumper.dump(1)
     dumper.raiseconditionerrors = False
     assert dumper.dump(1) == 1
Beispiel #3
0
def get_dumper(platform_type: PlatformType):

    def _attrdump(d, value) -> Dict[str, Any]:
        r = {}
        for attr in value.__attrs_attrs__:
            attrval = getattr(value, attr.name)
            read_only = attr.metadata.get('readOnly', False)
            name = attr.metadata.get('name', attr.name)
            if platform_type == PlatformType.DIFF and not attr.eq:
                # DIFF mode we only dump eq fields
                continue
            elif not platform_type == PlatformType.DIFF:
                if not attr.repr:
                    continue
                if name == APPGATE_METADATA_ATTRIB_NAME and platform_type == PlatformType.APPGATE:
                    continue
                if read_only:
                    continue
            if d.hidedefault:
                if attrval == attr.default:
                    continue
                elif hasattr(attr.default, 'factory') and attrval == attr.default.factory():
                    continue
            d_val = d.dump(attrval)
            if isinstance(d_val, dict) and not d_val:
                continue
            name = attr.metadata.get('name', attr.name)
            r[name] = d_val

        return r

    dumper = datadumper.Dumper(**{})  # type: ignore
    dumper.handlers.insert(0, (datadumper.is_attrs, _attrdump))
    dumper.handlers.insert(0, (is_datetime_dumper, lambda _a, v: dump_datetime(v)))
    return dumper
Beispiel #4
0
    def test_custom_handler(self):
        class Q:
            def __eq__(self, other):
                return isinstance(other, Q)

        dumper = datadumper.Dumper()
        dumper.handlers.append((lambda v: isinstance(v, Q), lambda l, v: 12))
        assert dumper.dump(Q()) == 12
    def test_dump_strconstructed(self):
        dumper = datadumper.Dumper()
        class Q:
            def __str__(self):
                return '42'

        dumper.strconstructed.add(Q)
        assert dumper.dump(Q()) == '42'
Beispiel #6
0
 def test_basic_types(self):
     # Casting enabled, by default
     dumper = datadumper.Dumper()
     assert dumper.dump(1) == 1
     assert dumper.dump('1') == '1'
     assert dumper.dump(None) == None
     dumper.basictypes = {int, str}
     assert dumper.dump('1') == '1'
     assert dumper.dump(1) == 1
     with self.assertRaises(ValueError):
         assert dumper.dump(None) == None
         assert dumper.dump(True) == True
Beispiel #7
0
 def test_dumpdefault(self):
     dumper = datadumper.Dumper()
     dumper.hidedefault = False
     assert dumper.dump(Person()) == {'name': 'Turiddu', 'address': None}
Beispiel #8
0
 def test_datetime(self):
     dumper = datadumper.Dumper()
     assert dumper.dump(datetime.date(2011, 12, 12)) == [2011, 12, 12]
     assert dumper.dump(datetime.time(15, 41)) == [15, 41, 0, 0]
     assert dumper.dump(datetime.datetime(
         2019, 5, 31, 12, 44, 22)) == [2019, 5, 31, 12, 44, 22, 0]
Beispiel #9
0
 def test_dump_iterables(self):
     dumper = datadumper.Dumper()
     assert dumper.dump([1]) == [1]
     assert dumper.dump((1, 2)) == [1, 2]
     assert dumper.dump([(1, 1), (0, 0)]) == [[1, 1], [0, 0]]
     assert dumper.dump({1, 2}) == [1, 2]
Beispiel #10
0
 def test_dump_enums(self):
     dumper = datadumper.Dumper()
     assert dumper.dump(EnumA.A) == 1
     assert dumper.dump(EnumA.B) == '2'
     assert dumper.dump(EnumA.C) == [1, 2]
Beispiel #11
0
 def test_dump_set(self):
     dumper = datadumper.Dumper()
     assert dumper.dump(set(range(3))) == [0, 1, 2]
     assert dumper.dump(frozenset(range(3))) == [0, 1, 2]
Beispiel #12
0
 def test_dump_dict(self):
     dumper = datadumper.Dumper()
     assert dumper.dump({EnumA.B: 'ciao'}) == {'2': 'ciao'}
Beispiel #13
0
 def test_replace_handler(self):
     dumper = datadumper.Dumper()
     index = dumper.index([])
     assert dumper.dump([11]) == [11]
     dumper.handlers[index] = (dumper.handlers[index][0], lambda *args: 3)
     assert dumper.dump([11]) == 3