Esempio n. 1
0
    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
Esempio n. 2
0
    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