Beispiel #1
0
    def testTooMany(self):
        class A(Object):
            m = List.T(Int.T())
            xmltagname = 'a'

        a = A(m=[1, 2, 3])

        class A(Object):
            m = Int.T()
            xmltagname = 'a'

        with self.assertRaises(ArgumentError):
            load_xml_string(a.dump_xml())
Beispiel #2
0
    def testTooMany(self):

        class A(Object):
            m = List.T(Int.T())
            xmltagname = 'a'

        a = A(m=[1, 2, 3])

        class A(Object):
            m = Int.T()
            xmltagname = 'a'

        with self.assertRaises(ArgumentError):
            load_xml_string(a.dump_xml())
Beispiel #3
0
    def testSObject(self):

        class DotName(SObject):
            network = String.T()
            station = String.T()

            def __init__(self, s=None, **kwargs):
                if s is not None:
                    network, station = s.split('.')
                    kwargs = dict(network=network, station=station)

                SObject.__init__(self, **kwargs)

            def __str__(self):
                return '.'.join((self.network, self.station))

        class X(Object):
            xmltagname = 'root'
            dn = DotName.T()

        x = X(dn=DotName(network='abc', station='def'))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_string(dump(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_xml_string(dump_xml(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
Beispiel #4
0
    def testSObject(self):

        class DotName(SObject):
            network = String.T()
            station = String.T()

            def __init__(self, s=None, **kwargs):
                if s is not None:
                    network, station = s.split('.')
                    kwargs = dict(network=network, station=station)

                SObject.__init__(self, **kwargs)

            def __str__(self):
                return '.'.join((self.network, self.station))

        class X(Object):
            xmltagname = 'root'
            dn = DotName.T()

        x = X(dn=DotName(network='abc', station='def'))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_string(dump(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
        x = load_xml_string(dump_xml(x))
        self.assertEqual(x.dn.network, 'abc')
        self.assertEqual(x.dn.station, 'def')
Beispiel #5
0
    def testArray(self):
        from pyrocko.guts_array import Array
        import numpy as num

        shapes = [(None,), (1,), (10,), (1000,)]
        for shape in shapes:
            for serialize_as in ('base64', 'table', 'npy', 'base64+meta'):
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=shape,
                        dtype=num.int,
                        serialize_as=serialize_as,
                        serialize_dtype='>i8')

                n = shape[0] or 10
                a = A(arr=num.arange(n, dtype=num.int))
                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                if serialize_as != 'base64+meta':
                    b = load_xml_string(a.dump_xml())
                    self.assertTrue(num.all(a.arr == b.arr))

                if shape[0] is not None:
                    with self.assertRaises(ValidationError):
                        a = A(arr=num.arange(n+10, dtype=num.int))
                        a.validate()

        for s0 in [None, 2, 10]:
            for s1 in [None, 2, 10]:
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=(s0, s1),
                        dtype=num.int)

                n0 = s0 or 100
                n1 = s1 or 100
                a = A(arr=num.arange(n0*n1, dtype=num.int).reshape((n0, n1)))
                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                b = load_xml_string(a.dump_xml())
                self.assertTrue(num.all(a.arr == b.arr))
Beispiel #6
0
    def testArray(self):
        from pyrocko.guts_array import Array
        import numpy as num

        shapes = [(None,), (1,), (10,), (1000,)]
        for shape in shapes:
            for serialize_as in ('base64', 'table'):
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=shape,
                        dtype=num.int,
                        serialize_as=serialize_as,
                        serialize_dtype='>i8')

                n = shape[0] or 1000
                a = A(arr=num.arange(n, dtype=num.int))

                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                b = load_xml_string(a.dump_xml())
                self.assertTrue(num.all(a.arr == b.arr))

                if shape[0] is not None:
                    with self.assertRaises(ValidationError):
                        a = A(arr=num.arange(n+10, dtype=num.int))
                        a.validate()

        for s0 in [None, 2, 10]:
            for s1 in [None, 2, 10]:
                class A(Object):
                    xmltagname = 'aroot'
                    arr = Array.T(
                        shape=(s0, s1),
                        dtype=num.int)

                n0 = s0 or 100
                n1 = s1 or 100
                a = A(arr=num.arange(n0*n1, dtype=num.int).reshape((n0, n1)))
                b = load_string(a.dump())
                self.assertTrue(num.all(a.arr == b.arr))

                b = load_xml_string(a.dump_xml())
                self.assertTrue(num.all(a.arr == b.arr))
Beispiel #7
0
    def testContentStyleXML(self):
        class Duration(Object):
            unit = String.T(optional=True, xmlstyle='attribute')
            uncertainty = Float.T(optional=True)
            value = Float.T(optional=True, xmlstyle='content')

            xmltagname = 'duration'

        s = '<duration unit="s"><uncertainty>1.0</uncertainty>10.5</duration>'
        dur = load_xml_string(s)
        self.assertEqual(dur.value, float('10.5'))
        self.assertEqual(dur.unit, 's')
        self.assertEqual(dur.uncertainty, float('1.0'))
        self.assertEqual(re.sub(r'\n\s*', '', dur.dump_xml()), s)
Beispiel #8
0
    def testContentStyleXML(self):

        class Duration(Object):
            unit = String.T(optional=True, xmlstyle='attribute')
            uncertainty = Float.T(optional=True)
            value = Float.T(optional=True, xmlstyle='content')

            xmltagname = 'duration'

        s = '<duration unit="s"><uncertainty>1.0</uncertainty>10.5</duration>'
        dur = load_xml_string(s)
        self.assertEqual(dur.value, float('10.5'))
        self.assertEqual(dur.unit, 's')
        self.assertEqual(dur.uncertainty, float('1.0'))
        self.assertEqual(re.sub(r'\n\s*', '', dur.dump_xml()), s)
Beispiel #9
0
    def basicTypeTest(self):

        class X(Object):
            a = Type.T()
            b = Type.T(optional=True)
            c = Type.T(default=sample)
            d = List.T(Type.T())
            e = Tuple.T(1, Type.T())
            xmltagname = 'x'

        x = X(a=sample_in, e=(sample_in,))
        x.d.append(sample_in)
        if sample_in is not sample:
            with self.assertRaises(ValidationError):
                x.validate()

        x.validate(regularize=sample_in is not sample)
        self.assertEqualNanAware(sample, x.a)

        if not xml:
            x2 = load_string(x.dump())

        else:
            x2 = load_xml_string(x.dump_xml())

        self.assertEqualNanAware(x.a, x2.a)
        self.assertIsNone(x.b)
        self.assertIsNone(x2.b)
        self.assertEqualNanAware(sample, x.c)
        self.assertEqualNanAware(sample, x2.c)
        self.assertTrue(isinstance(x.d, list))
        self.assertTrue(isinstance(x2.d, list))
        self.assertEqualNanAware(x.d[0], sample)
        self.assertEqualNanAware(x2.d[0], sample)
        self.assertEqual(len(x.d), 1)
        self.assertEqual(len(x2.d), 1)
        self.assertTrue(isinstance(x.e, tuple))
        self.assertTrue(isinstance(x2.e, tuple))
        self.assertEqualNanAware(x.e[0], sample)
        self.assertEqualNanAware(x2.e[0], sample)
        self.assertEqual(len(x.e), 1)
        self.assertEqual(len(x2.e), 1)
Beispiel #10
0
    def basicTypeTest(self):

        class X(Object):
            a = Type.T()
            b = Type.T(optional=True)
            c = Type.T(default=sample)
            d = List.T(Type.T())
            e = Tuple.T(1, Type.T())
            xmltagname = 'x'

        x = X(a=sample_in, e=(sample_in,))
        x.d.append(sample_in)
        if sample_in is not sample:
            with self.assertRaises(ValidationError):
                x.validate()

        x.validate(regularize=sample_in is not sample)
        self.assertEqualNanAware(sample, x.a)

        if not xml:
            x2 = load_string(x.dump())

        else:
            x2 = load_xml_string(x.dump_xml())

        self.assertEqualNanAware(x.a, x2.a)
        self.assertIsNone(x.b)
        self.assertIsNone(x2.b)
        self.assertEqualNanAware(sample, x.c)
        self.assertEqualNanAware(sample, x2.c)
        self.assertTrue(isinstance(x.d, list))
        self.assertTrue(isinstance(x2.d, list))
        self.assertEqualNanAware(x.d[0], sample)
        self.assertEqualNanAware(x2.d[0], sample)
        self.assertEqual(len(x.d), 1)
        self.assertEqual(len(x2.d), 1)
        self.assertTrue(isinstance(x.e, tuple))
        self.assertTrue(isinstance(x2.e, tuple))
        self.assertEqualNanAware(x.e[0], sample)
        self.assertEqualNanAware(x2.e[0], sample)
        self.assertEqual(len(x.e), 1)
        self.assertEqual(len(x2.e), 1)
Beispiel #11
0
    def testUnion(self):

        class X1(Object):
            xmltagname = 'root'
            m = Union.T(members=[Int.T(), StringChoice.T(['small', 'large'])])

        class U(Union):
            members = [Int.T(), StringChoice.T(['small', 'large'])]

        class X2(Object):
            xmltagname = 'root'
            m = U.T()

        for X in [X1, X2]:
            X = X1
            x1 = X(m='1')
            with self.assertRaises(ValidationError):
                x1.validate()

            x1.validate(regularize=True)
            self.assertEqual(x1.m, 1)

            x2 = X(m='small')
            x2.validate()
            x3 = X(m='fail!')
            with self.assertRaises(ValidationError):
                x3.validate()
            with self.assertRaises(ValidationError):
                x3.validate(regularize=True)

            for x in [x1, x2]:
                y = load_string(x.dump())
                self.assertEqual(x.m, y.m)

            for x in [x1, x2]:
                y = load_xml_string(x.dump_xml())
                self.assertEqual(x.m, y.m)
Beispiel #12
0
    def testUnion(self):

        class X1(Object):
            xmltagname = 'root'
            m = Union.T(members=[Int.T(), StringChoice.T(['small', 'large'])])

        class U(Union):
            members = [Int.T(), StringChoice.T(['small', 'large'])]

        class X2(Object):
            xmltagname = 'root'
            m = U.T()

        for X in [X1, X2]:
            X = X1
            x1 = X(m='1')
            with self.assertRaises(ValidationError):
                x1.validate()

            x1.validate(regularize=True)
            self.assertEqual(x1.m, 1)

            x2 = X(m='small')
            x2.validate()
            x3 = X(m='fail!')
            with self.assertRaises(ValidationError):
                x3.validate()
            with self.assertRaises(ValidationError):
                x3.validate(regularize=True)

            for x in [x1, x2]:
                y = load_string(x.dump())
                self.assertEqual(x.m, y.m)

            for x in [x1, x2]:
                y = load_xml_string(x.dump_xml())
                self.assertEqual(x.m, y.m)
Beispiel #13
0
    def testPO(self):
        class SKU(StringPattern):
            pattern = '\\d{3}-[A-Z]{2}'

        class Comment(String):
            xmltagname = 'comment'

        class Quantity(Int):
            pass

        class USAddress(Object):
            country = String.T(
                default='US', optional=True, xmlstyle='attribute')
            name = String.T()
            street = String.T()
            city = String.T()
            state = String.T()
            zip = Float.T()

        class Item(Object):
            part_num = SKU.T(xmlstyle='attribute')
            product_name = String.T()
            quantity = Quantity.T()
            us_price = Float.T(xmltagname='USPrice')
            comment = Comment.T(optional=True)
            ship_date = DateTimestamp.T(optional=True)

        class Items(Object):
            item_list = List.T(Item.T())

        class PurchaseOrderType(Object):
            order_date = DateTimestamp.T(optional=True, xmlstyle='attribute')
            ship_to = USAddress.T()
            bill_to = USAddress.T()
            comment = Comment.T(optional=True)
            items = Items.T()

        class PurchaseOrder(PurchaseOrderType):
            xmltagname = 'purchaseOrder'

        xml = '''<?xml version="1.0"?>
<purchaseOrder orderDate="1999-10-20">
   <shipTo country="US">
      <name>Alice Smith</name>
      <street>123 Maple Street</street>
      <city>Mill Valley</city>
      <state>CA</state>
      <zip>90952</zip>
   </shipTo>
   <billTo country="US">
      <name>Robert Smith</name>
      <street>8 Oak Avenue</street>
      <city>Old Town</city>
      <state>PA</state>
      <zip>95819</zip>
   </billTo>
   <comment>Hurry, my lawn is going wild</comment>
   <items>
      <item partNum="872-AA">
         <productName>Lawnmower</productName>
         <quantity>1</quantity>
         <USPrice>148.95</USPrice>
         <comment>Confirm this is electric</comment>
      </item>
      <item partNum="926-AA">
         <productName>Baby Monitor</productName>
         <quantity>1</quantity>
         <USPrice>39.98</USPrice>
         <shipDate>1999-05-21</shipDate>
      </item>
   </items>
</purchaseOrder>
'''
        po1 = load_xml_string(xml)
        po2 = load_xml_string(po1.dump_xml())

        for (path1, obj1), (path2, obj2) in zip(walk(po1), walk(po2)):
            assert path1 == path2
            assert path_to_str(path1) == path_to_str(path2)
            assert type(obj1) is type(obj2)
            if not isinstance(obj1, Object):
                assert obj1 == obj2

        for _ in zip_walk(po1):
            pass

        self.assertEqual(po1.dump(), po2.dump())
Beispiel #14
0
    def testPO(self):
        class SKU(StringPattern):
            pattern = '\\d{3}-[A-Z]{2}'

        class Comment(String):
            xmltagname = 'comment'

        class Quantity(Int):
            pass

        class USAddress(Object):
            country = String.T(
                default='US', optional=True, xmlstyle='attribute')
            name = String.T()
            street = String.T()
            city = String.T()
            state = String.T()
            zip = Float.T()

        class Item(Object):
            part_num = SKU.T(xmlstyle='attribute')
            product_name = String.T()
            quantity = Quantity.T()
            us_price = Float.T(xmltagname='USPrice')
            comment = Comment.T(optional=True)
            ship_date = DateTimestamp.T(optional=True)

        class Items(Object):
            item_list = List.T(Item.T())

        class PurchaseOrderType(Object):
            order_date = DateTimestamp.T(optional=True, xmlstyle='attribute')
            ship_to = USAddress.T()
            bill_to = USAddress.T()
            comment = Comment.T(optional=True)
            items = Items.T()

        class PurchaseOrder(PurchaseOrderType):
            xmltagname = 'purchaseOrder'

        xml = '''<?xml version="1.0"?>
<purchaseOrder orderDate="1999-10-20">
   <shipTo country="US">
      <name>Alice Smith</name>
      <street>123 Maple Street</street>
      <city>Mill Valley</city>
      <state>CA</state>
      <zip>90952</zip>
   </shipTo>
   <billTo country="US">
      <name>Robert Smith</name>
      <street>8 Oak Avenue</street>
      <city>Old Town</city>
      <state>PA</state>
      <zip>95819</zip>
   </billTo>
   <comment>Hurry, my lawn is going wild</comment>
   <items>
      <item partNum="872-AA">
         <productName>Lawnmower</productName>
         <quantity>1</quantity>
         <USPrice>148.95</USPrice>
         <comment>Confirm this is electric</comment>
      </item>
      <item partNum="926-AA">
         <productName>Baby Monitor</productName>
         <quantity>1</quantity>
         <USPrice>39.98</USPrice>
         <shipDate>1999-05-21</shipDate>
      </item>
   </items>
</purchaseOrder>
'''
        po1 = load_xml_string(xml)
        po2 = load_xml_string(po1.dump_xml())

        self.assertEqual(po1.dump(), po2.dump())