class Object(Declared): action = pascalcase_var(str, as_xml_attr=True) code = pascalcase_var(str, as_xml_attr=True) id_ = var(str, field_name="ID", as_xml_attr=True) element_type = pascalcase_var(str, as_xml_attr=True) properties = var(new_list_type(Property), field_name="Property")
class Mapping(Declared): element_code = pascalcase_var(str, as_xml_attr=True) element_id = var(str, as_xml_attr=True, field_name="ElementID") element_type = pascalcase_var(str, as_xml_attr=True) parent_type = pascalcase_var(str, as_xml_attr=True) parent_code = pascalcase_var(str, as_xml_attr=True) parent_id = var(str, as_xml_attr=True, field_name="ParentID") action = pascalcase_var(str, as_xml_attr=True) properties = var(new_list_type(Property), field_name="Property")
def test_simple_use(self): xml_string = """ <?xml version="1.0" encoding="utf-8"?> <data> <country name="Liechtenstein"> <rank>1</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> </country> <country name="Singapore"> <rank>4</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank>68</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> </country> </data> """.strip() class Neighbor(Declared): name = var(str, as_xml_attr=True) direction = var(str, as_xml_attr=True) class Country(Declared): rank = var(str) year = var(int) gdppc = var(int) name = var(str, as_xml_attr=True) neighbor = var(Neighbor) Data = new_list_type(Country) data = Data.from_xml_string(xml_string) self.assertEqual( data.to_xml_bytes(skip_none_field=True).decode(), '<data><country name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor direction="E" name="Austria" /></country><country name="Singapore"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor direction="N" name="Malaysia" /></country><country name="Panama"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor direction="W" name="Costa Rica" /></country></data>' ) self.assertEqual( data.to_json(), '[{"rank": "1", "year": 2008, "gdppc": 141100, "name": "Liechtenstein", "neighbor": {"name": "Austria", "direction": "E"}}, {"rank": "4", "year": 2011, "gdppc": 59900, "name": "Singapore", "neighbor": {"name": "Malaysia", "direction": "N"}}, {"rank": "68", "year": 2011, "gdppc": 13600, "name": "Panama", "neighbor": {"name": "Costa Rica", "direction": "W"}}]' )
def test_other_simple_use(self): xml_string = """ <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> <style name="ratingBarStyle" parent="@android:style/Widget.RatingBar"> <item name="android:progressDrawable">@drawable/ratingbar_drawable</item> <item name="android:minHeight">48dip</item> <item name="android:maxHeight">48dip</item> </style> </resources> """.strip() class Item(Declared): name = var(str, as_xml_attr=True) text = var(str, as_xml_text=True) class Style(Declared): name = var(str, as_xml_attr=True) parent = var(str, as_xml_attr=True, default=None) items = var(new_list_type(Item), field_name="item") Resource = new_list_type(Style) data = Resource.from_xml_string(xml_string) self.assertEqual( data.to_xml_bytes(skip_none_field=True).decode(), '<resources><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style><style name="AppTheme.NoActionBar"><item name="windowActionBar">false</item><item name="windowNoTitle">true</item></style><style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /><style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /><style name="ratingBarStyle" parent="@android:style/Widget.RatingBar"><item name="android:progressDrawable">@drawable/ratingbar_drawable</item><item name="android:minHeight">48dip</item><item name="android:maxHeight">48dip</item></style></resources>' ) self.assertEqual( data.to_json(), '[{"name": "AppTheme", "parent": "Theme.AppCompat.Light.DarkActionBar", "item": [{"name": "colorPrimary", "text": "@color/colorPrimary"}, {"name": "colorPrimaryDark", "text": "@color/colorPrimaryDark"}, {"name": "colorAccent", "text": "@color/colorAccent"}]}, {"name": "AppTheme.NoActionBar", "parent": null, "item": [{"name": "windowActionBar", "text": "false"}, {"name": "windowNoTitle", "text": "true"}]}, {"name": "AppTheme.AppBarOverlay", "parent": "ThemeOverlay.AppCompat.Dark.ActionBar", "item": []}, {"name": "AppTheme.PopupOverlay", "parent": "ThemeOverlay.AppCompat.Light", "item": []}, {"name": "ratingBarStyle", "parent": "@android:style/Widget.RatingBar", "item": [{"name": "android:progressDrawable", "text": "@drawable/ratingbar_drawable"}, {"name": "android:minHeight", "text": "48dip"}, {"name": "android:maxHeight", "text": "48dip"}]}]' )
class Mappings(Declared): mapping = var(new_list_type(Mapping), field_name="Mapping")
class Objects(Declared): object_ = var(new_list_type(Object), field_name="Object")
class Style(Declared): name = var(str, as_xml_attr=True) parent = var(str, as_xml_attr=True, default=None) items = var(new_list_type(Item), field_name="item")