def to_xml(self): xData = ElementTree.Element(self.data_type.tag) for attribute in self.data_type.item_attributes: try: xData.attrib[attribute] = serialize(self.item_attributes[attribute]) except KeyError as e: # This should never occur, buf if it does, the OTA restore on mobile will fail and # this error would have been raised and email-logged. raise FixtureTypeCheckError( "Table with tag %s has an item with id %s that doesn't have an attribute as defined in its types definition" % (self.data_type.tag, self.get_id) ) for field in self.data_type.fields: escaped_field_name = clean_fixture_field_name(field.field_name) if not self.fields.has_key(field.field_name): xField = ElementTree.SubElement(xData, escaped_field_name) xField.text = "" else: for field_with_attr in self.fields[field.field_name].field_list: xField = ElementTree.SubElement(xData, escaped_field_name) xField.text = serialize(field_with_attr.field_value) for attribute in field_with_attr.properties: val = field_with_attr.properties[attribute] xField.attrib[attribute] = serialize(val) return xData
def _report_config_to_fixture(self, report_config, user): report_elem = ElementTree.Element('report', attrib={'id': report_config.uuid}) report = ReportConfiguration.get(report_config.report_id) report_elem.append(self._element('name', localize(report_config.header, user.language))) data_source = ReportFactory.from_spec(report) data_source.set_filter_values({ filter_slug: wrap_by_filter_type(filter).get_filter_value(user) for filter_slug, filter in report_config.filters.items() }) rows_elem = ElementTree.Element('rows') for i, row in enumerate(data_source.get_data()): row_elem = ElementTree.Element('row', attrib={'index': str(i)}) for k in sorted(row.keys()): row_elem.append(self._element('column', serialize(row[k]), attrib={'id': k})) rows_elem.append(row_elem) report_elem.append(rows_elem) return report_elem