def test_get_or_run(self, resolwe_mock, data_mock): resolwe_mock.api = MagicMock( **{'process.get.return_value': self.process_mock}) Resolwe.get_or_run(resolwe_mock) self.assertEqual(resolwe_mock.api.data.get_or_create.post.call_count, 1)
def test_get_or_run(self, resolwe_mock, data_mock): resolwe_mock.api = MagicMock(**{'process.get.return_value': self.process_mock}) Resolwe.get_or_run(resolwe_mock) self.assertEqual(resolwe_mock.api.data.get_or_create.post.call_count, 1)
class ResolweHelper: def __init__(self): self.url = environ.get('RESOLWE_HOST_URL', DEFAULT_URL) self.username = environ.get('RESOLWE_API_USERNAME', DEFAULT_USERNAME) self.password = environ.get('RESOLWE_API_PASSWORD', DEFAULT_PASSWORD) try: self.res = Resolwe(self.username, self.password, self.url) except Exception: # TODO: raise proper exceptions and handle in GUI raise @staticmethod async def check_object_status(data_object): while True: data_object.update() if data_object.status == 'OK' or data_object.status == 'ER': return True await asyncio.sleep(0.5) def run_process(self, slug, **kwargs): process = self.res.get_or_run(slug, input={**kwargs}) if process.status == 'OK': return process # wait till task is finished loop = asyncio.new_event_loop() try: loop.run_until_complete( asyncio.wait_for(self.check_object_status(process), timeout=60)) finally: loop.close() return process def get_json(self, data_object, output_field, json_field=None): storage_data = self.res.api.storage( data_object.output[output_field]).get() if json_field: return storage_data['json'][json_field] else: return storage_data['json'] def get_object(self, *args, **kwargs): return self.res.data.get(*args, **kwargs) def list_data_objects(self, data_type): return self.res.data.filter(type='data:table:{}'.format(data_type)) def get_descriptor_schema(self, slug): return self.res.descriptor_schema.get(slug) def upload_data_table(self, data_table): if not data_table and isinstance(data_table, Table): # raise proper warning return # create temp dir and pickle data.Table object with tempfile.TemporaryDirectory() as temp_dir: # TODO: What to do if Table is not named? file_name = data_table.name + '.pickle' file_path = os.path.join(temp_dir, file_name) # save Table as pickled object data_table.save(file_path) # run resolwe upload process self.res.run('data-table-upload', input={'src': file_path}) @staticmethod def download_data_table(data_table_object): with tempfile.TemporaryDirectory() as temp_dir: data_table_object.download(download_dir=temp_dir) return Table(os.path.join(temp_dir, data_table_object.name))