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()