示例#1
0
    def get_change_dump_xml(self, from_date):
        """
        Get change dump xml.

        :return: Updated Change List info
        """
        if not self._validation():
            return None
        change_dump = ChangeDump()
        change_dump.up = '{}resync/capability.xml'.format(request.url_root)
        change_dump.index = '{}resync/{}/changedump.xml'.format(
            request.url_root, self.repository_id)

        record_changes = self._get_record_changes_with_interval(from_date)

        for data in record_changes:
            try:
                next_ch = self._next_change(data, record_changes)
                if data.get('status') == 'deleted':
                    continue
                loc = '{}resync/{}/{}/change_dump_content.zip'.format(
                    request.url_root, self.repository_id,
                    '{}.{}'.format(data.get('record_id'),
                                   data.get('record_version')))

                rc = Resource(loc,
                              lastmod=data.get("updated"),
                              mime_type='application/zip',
                              md_from=data.get('updated'),
                              md_until=datetime.datetime.utcnow().replace(
                                  tzinfo=datetime.timezone.utc).isoformat(),
                              ln=[])
                if next_ch and next_ch.get('updated'):
                    rc.md_until = next_ch.get('updated')
                if self.change_dump_manifest:
                    ln = {
                        'rel':
                        'contents',
                        'href':
                        '{}resync/{}/{}/changedump_manifest.xml'.format(
                            request.url_root, self.repository_id,
                            '{}.{}'.format(data.get('record_id'),
                                           data.get('record_version'))),
                        'type':
                        'application/xml'
                    }
                    rc.ln.append(ln)
                change_dump.add(rc)
            except Exception:
                current_app.logger.error('-' * 60)
                traceback.print_exc(file=sys.stdout)
                current_app.logger.error('-' * 60)
                continue

        return change_dump.as_xml()