def test_prepare_node_with_valid_datafile(self): with mock.patch.object(FileStoreItem, 'get_datafile_url', return_value='/media/file_store/test_file.txt'): self._assert_node_index_prepared_correctly( self._prepare_node_index(self.node), expected_download_url=build_absolute_url( self.file_store_item.get_datafile_url()), expected_datafile=self.file_store_item.datafile)
def test_prepare_node_with_exposed_output_node_connection_isnt_skipped( self): with mock.patch.object(FileStoreItem, 'get_datafile_url', return_value='/media/file_store/test_file.txt'): self._create_analysis_node_connection(OUTPUT_CONNECTION, True) self._assert_node_index_prepared_correctly( self._prepare_node_index(self.node), expected_download_url=build_absolute_url( self.file_store_item.get_datafile_url()), expected_datafile=self.file_store_item.datafile)
def test_prepare_node_s3_file_store_item_source_with_datafile(self): self.file_store_item.source = 's3://test/test.txt' self.file_store_item.save() with mock.patch.object(FileStoreItem, 'get_datafile_url', return_value='/media/file_store/test.txt'): self._assert_node_index_prepared_correctly( self._prepare_node_index(self.node), expected_download_url=build_absolute_url( self.file_store_item.get_datafile_url()), expected_filetype=self.file_store_item.filetype, expected_datafile=self.file_store_item.datafile)
def _get_download_url_or_import_state(file_store_item): """ Discerns the download url or file import state for a given FileStoreItem :param file_store_item: A FileStoreItem instance :returns <String>: - a valid url pointing to the FileStoreItem's datafile - constants.NOT_AVAILABLE - celery.states.PENDING """ if file_store_item is None: return constants.NOT_AVAILABLE download_url = file_store_item.get_datafile_url() if download_url: try: absolute_download_url = build_absolute_url(download_url) return absolute_download_url except ValueError: logger.error('{} is not a valid relative url'.format( str(download_url) ) ) return None except RuntimeError: logger.error('Could not fetch full absolute url for {}'.format( str(download_url) ) ) return None # "PENDING" if an import_task_id doesn't exist and # there is no valid download_url if not file_store_item.import_task_id: return celery.states.PENDING # "N/A" if the import_state is in a "READY_STATE" or "PENDING" with an # import_task_id and without a valid download_url import_state = file_store_item.get_import_status() if import_state in {celery.states.PENDING} | celery.states.READY_STATES: return constants.NOT_AVAILABLE