def generate_and_store_file_objects(self, file_paths: List[Path], extractor_dir: str, parent: FileObject): extracted_files = {} for item in file_paths: if not file_is_empty(item): current_file = FileObject(file_path=str(item)) current_virtual_path = '{}|{}|{}'.format( parent.get_base_of_virtual_path( parent.get_virtual_file_paths()[ parent.get_root_uid()][0]), parent.get_uid(), get_object_path_excluding_fact_dirs( make_unicode_string(str(item)), str(Path(extractor_dir, 'files')))) current_file.temporary_data[ 'parent_fo_type'] = get_file_type_from_path( parent.file_path)['mime'] if current_file.get_uid( ) in extracted_files: # the same file is extracted multiple times from one archive extracted_files[current_file.get_uid()].virtual_file_path[ parent.get_root_uid()].append(current_virtual_path) else: self.db_interface.set_unpacking_lock(current_file.uid) self.file_storage_system.store_file(current_file) current_file.virtual_file_path = { parent.get_root_uid(): [current_virtual_path] } current_file.parent_firmware_uids.add( parent.get_root_uid()) extracted_files[current_file.get_uid()] = current_file return extracted_files
def generate_and_store_file_objects(self, file_paths: List[Path], extraction_dir: Path, parent: FileObject): extracted_files = {} for item in file_paths: if not file_is_empty(item): current_file = FileObject(file_path=str(item)) base = get_base_of_virtual_path( parent.get_virtual_file_paths()[parent.get_root_uid()][0]) current_virtual_path = join_virtual_path( base, parent.uid, get_relative_object_path(item, extraction_dir)) current_file.temporary_data[ 'parent_fo_type'] = get_file_type_from_path( parent.file_path)['mime'] if current_file.uid in extracted_files: # the same file is extracted multiple times from one archive extracted_files[current_file.uid].virtual_file_path[ parent.get_root_uid()].append(current_virtual_path) else: self.db_interface.set_unpacking_lock(current_file.uid) self.file_storage_system.store_file(current_file) current_file.virtual_file_path = { parent.get_root_uid(): [current_virtual_path] } current_file.parent_firmware_uids.add( parent.get_root_uid()) extracted_files[current_file.uid] = current_file return extracted_files
def setUpClass(cls): test_init_dir = os.path.join(get_dir_of_file(__file__), 'data') test_files = { 'systemd': 'etc/systemd/system/foobar', 'inittab': 'etc/inittab', 'rclocal': 'etc/rc.local', 'upstart': 'etc/init/baz.conf', 'runit': 'etc/service/lighttpd/run', 'runit_symlink': 'etc/service/example/run', 'runit_origin': 'etc/sv/example/run', 'only_comments': 'etc/inittab.invalid', 'initd': 'etc/init.d/skeleton', 'README': 'etc/init.d/README', 'initscript': 'etc/initscript' } for test_file, path in test_files.items(): test_fo = FileObject(file_path=os.path.join(test_init_dir, path)) setattr(cls, 'test_file_{}'.format(test_file), test_fo) test_fo.processed_analysis['file_type'] = {'mime': 'text/plain'} test_fo.root_uid = test_fo.uid test_fo.virtual_file_path = {test_fo.get_root_uid(): [path]} cls.test_file_not_text = FileObject( file_path='{}etc/systemd/system/foobar'.format(test_init_dir)) cls.test_file_not_text.processed_analysis['file_type'] = { 'mime': 'application/zip' }
def test_get_root_uid(self): fo = FileObject(binary=b'file_object') fo.virtual_file_path = { 'root_uid_1': 'virtual_file_path', 'root_uid_2': 'virtual_file_path' } assert fo.get_root_uid() in ['root_uid_1', 'root_uid_2']