def test_event_export(db, dummy_event, monkeypatch): monkeypatch.setattr('indico.modules.events.export.now_utc', lambda: as_utc(datetime(2017, 8, 24, 9, 0, 0))) f = BytesIO() dummy_event.created_dt = as_utc(datetime(2017, 8, 24, 0, 0, 0)) dummy_event.start_dt = as_utc(datetime(2017, 8, 24, 10, 0, 0)) dummy_event.end_dt = as_utc(datetime(2017, 8, 24, 12, 0, 0)) s = Session(event=dummy_event, title='sd', is_deleted=True) Contribution(event=dummy_event, title='c1', duration=timedelta(minutes=30)) Contribution(event=dummy_event, title='c2', session=s, duration=timedelta(minutes=30), is_deleted=True) db.session.flush() export_event(dummy_event, f) f.seek(0) with open(os.path.join(os.path.dirname(__file__), 'export_test_1.yaml'), 'r') as ref_file: data_yaml_content = ref_file.read() # check composition of tarfile and data.yaml content with tarfile.open(fileobj=f) as tarf: assert tarf.getnames() == ['data.yaml'] assert tarf.extractfile('data.yaml').read() == data_yaml_content
def export(event_id, target_file): """Export all data associated with an event. This exports the whole event as an archive which can be imported on another other Indico instance. Importing an event is only guaranteed to work if it was exported on the same Indico version. """ event = Event.get(event_id) if event is None: click.secho('This event does not exist', fg='red') sys.exit(1) elif event.is_deleted: click.secho('This event has been deleted', fg='yellow') click.confirm('Export it anyway?', abort=True) export_event(event, target_file)
def export(event_id, target_file): """Exports all data associated with an event. This exports the whole event as an archive which can be imported on another other Indico instance. Importing an event is only guaranteed to work if it was exported on the same Indico version. """ event = Event.get(event_id) if event is None: click.secho('This event does not exist', fg='red') sys.exit(1) elif event.is_deleted: click.secho('This event has been deleted', fg='yellow') click.confirm('Export it anyway?', abort=True) export_event(event, target_file)
def test_event_attachment_export(db, dummy_event, dummy_attachment): s = Session(event=dummy_event, title='sd', is_deleted=True) Contribution(event=dummy_event, title='c1', duration=timedelta(minutes=30)) Contribution(event=dummy_event, title='c2', session=s, duration=timedelta(minutes=30), is_deleted=True) dummy_attachment.folder.event = dummy_event dummy_attachment.folder.linked_event = dummy_event dummy_attachment.folder.link_type = LinkType.event dummy_attachment.file.save(BytesIO(b'hello world')) db.session.flush() f = BytesIO() export_event(dummy_event, f) f.seek(0) with tarfile.open(fileobj=f) as tarf: data_file = tarf.extractfile('data.yaml') data = yaml.unsafe_load(data_file) objs = data['objects'] event_uid = objs[0][1]['id'][1] # check that the exported metadata contains all the right objects assert [obj[0] for obj in objs] == [ u'events.events', u'events.sessions', u'events.contributions', u'events.contributions', u'attachments.folders', u'attachments.attachments', u'attachments.files' ] # check that the attached file's metadata is included assert objs[5][1]['title'] == 'dummy_attachment' assert objs[5][1]['folder_id'] is not None assert objs[4][1]['title'] == 'dummy_folder' assert objs[4][1]['linked_event_id'][1] == event_uid file_ = objs[6][1]['__file__'][1] assert file_['filename'] == 'dummy_file.txt' assert file_['content_type'] == 'text/plain' assert file_['size'] == 11 assert file_['md5'] == '5eb63bbbe01eeed093cb22bb8f5acdc3' # check that the file itself was included (and verify content) assert tarf.getnames() == [ '00000000-0000-4000-8000-000000000013', 'data.yaml' ] assert tarf.extractfile( '00000000-0000-4000-8000-000000000013').read() == 'hello world'
def test_event_attachment_export(db, dummy_event, dummy_attachment): s = Session(event=dummy_event, title='sd', is_deleted=True) Contribution(event=dummy_event, title='c1', duration=timedelta(minutes=30)) Contribution(event=dummy_event, title='c2', session=s, duration=timedelta(minutes=30), is_deleted=True) dummy_attachment.folder.event = dummy_event dummy_attachment.folder.linked_event = dummy_event dummy_attachment.folder.link_type = LinkType.event dummy_attachment.file.save(BytesIO(b'hello world')) db.session.flush() f = BytesIO() export_event(dummy_event, f) f.seek(0) with tarfile.open(fileobj=f) as tarf: data_file = tarf.extractfile('data.yaml') data = yaml.load(data_file) objs = data['objects'] event_uid = objs[0][1]['id'][1] # check that the exported metadata contains all the right objects assert [obj[0] for obj in objs] == [u'events.events', u'events.sessions', u'events.contributions', u'events.contributions', u'attachments.folders', u'attachments.attachments', u'attachments.files'] # check that the attached file's metadata is included assert objs[5][1]['title'] == 'dummy_attachment' assert objs[5][1]['folder_id'] is not None assert objs[4][1]['title'] == 'dummy_folder' assert objs[4][1]['linked_event_id'][1] == event_uid file_ = objs[6][1]['__file__'][1] assert file_['filename'] == 'dummy_file.txt' assert file_['content_type'] == 'text/plain' assert file_['size'] == 11 assert file_['md5'] == '5eb63bbbe01eeed093cb22bb8f5acdc3' # check that the file itself was included (and verify content) assert tarf.getnames() == ['00000000-0000-4000-8000-000000000013', 'data.yaml'] assert tarf.extractfile('00000000-0000-4000-8000-000000000013').read() == 'hello world'