def build_batch(self, root: str) -> collection_builder.AbsPackageComponent: """Build a capture one style batch object.""" new_batch = collection.Package(root) new_batch.component_metadata[Metadata.PATH] = root files = list(self.locate_batch_files(root=root)) files.sort(key=lambda f: f.name) group_ids = set() for file_ in files: try: file_name_parts = self.identify_file_name_parts(file_.name) if file_name_parts is None: raise ValueError( f"File {file_.name} doesn't match expected pattern") group_id = file_name_parts['group'] group_ids.add(group_id) except ValueError as error: raise ValueError(f"Unable to split {file_.name}") from error for object_name in sorted(group_ids): new_object = collection.PackageObject(parent=new_batch) new_object.component_metadata[Metadata.ID] = object_name new_object.component_metadata[Metadata.PACKAGE_TYPE] = \ PackageTypes.CAPTURE_ONE_SESSION self.build_package(new_object, root) return new_batch
def test_set_title_page(self, delegate): combo_box = QtWidgets.QComboBox() files = [ "file1.jp2", "file2.jp2", "file3.jp2", ] for file_name in files: combo_box.addItem(file_name) combo_box.setCurrentText("file2.jp2") model = Mock() object_record = collection.PackageObject() item = collection.Item(object_record) instance = collection.Instantiation(parent=item, files=files) def get_data(index, role): if role == QtCore.Qt.UserRole: return object_record mock_index = MagicMock() model.data = get_data delegate.setModelData(combo_box, model, mock_index) assert \ object_record.metadata[collection.Metadata.TITLE_PAGE] == \ "file2.jp2"
def test_data_display_role(self): package = collection.PackageObject() package.component_metadata[collection.Metadata.ID] = "page1.jpg" packages = [package] model = title_page_selection.PackagesModel(packages) index = model.index(0, 0) data = model.data(index, role=QtCore.Qt.DisplayRole) assert data == "page1.jpg"
def test_builder2_build_package_files_match(capture_one_batch_with_dashes): batch_dir, source_files = capture_one_batch_with_dashes builder = capture_one_package.CaptureOneBuilder() builder.splitter = capture_one_package.dash_splitter sample_object = collection.PackageObject() sample_object.component_metadata[Metadata.ID] = "99423682912205899" builder.build_package(sample_object, batch_dir) assert len(sample_object) == len(source_files)
def get_data(role): if role == QtCore.Qt.UserRole: object_record = collection.PackageObject() item = collection.Item(object_record) instance = collection.Instantiation(parent=item, files=[ "file1.jp2", "file2.jp2", "file3.jp2", ]) return object_record
def test_title_page_flags_editable(self): package = collection.PackageObject() package.component_metadata[collection.Metadata.TITLE_PAGE] = \ "page1.jpg" packages = [package] model = title_page_selection.PackagesModel(packages) index = model.index(0, 1) res = model.flags(index) assert res == QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled
def model(self, request): marker = request.node.get_closest_marker("model_data") if marker is None: amount = 0 else: amount = marker.kwargs.get("amount", 0) packages = [] for i in range(amount): object_record = collection.PackageObject() packages.append(object_record) model = title_page_selection.PackagesModel(packages) return model
def get_data(role): if role == QtCore.Qt.UserRole: object_record = collection.PackageObject() object_record.component_metadata[ collection.Metadata.TITLE_PAGE] = "file2.jp2" item = collection.Item(object_record) instance = collection.Instantiation(parent=item, files=[ "file1.jp2", "file2.jp2", "file3.jp2", ]) return object_record
def build_object(self, parent: collection.Package, group_id: str, path: str) -> None: """Build a new object. Args: parent: group_id: path: """ new_object = collection.PackageObject(parent=parent) new_object.component_metadata[Metadata.ID] = group_id new_object.component_metadata[Metadata.PATH] = path access_path = os.path.join(path, "access") for directory_item in filter( lambda item: self.is_eas_file(pathlib.Path(item.path)), self.locate_files_access(access_path) ): regex_result = EASBuilder.grouper_regex.match(directory_item.name) if regex_result is None: raise ValueError("Unknown pattern") groups = regex_result.groupdict() if groups['group'] != group_id: continue new_item = collection.Item(parent=new_object) new_item.component_metadata[Metadata.ITEM_NAME] = \ regex_result['part'] self.build_instance( new_item, path=os.path.dirname(directory_item.path), filename=directory_item.name )
def digital_library_object(self): new_object = collection.PackageObject() new_object.component_metadata[collection.Metadata.ID] = "123" new_object.component_metadata[collection.Metadata.PACKAGE_TYPE] = \ common.PackageTypes.DIGITAL_LIBRARY_COMPOUND new_item = collection.Item(parent=new_object) new_item.component_metadata[collection.Metadata.ID] = "123" new_item.component_metadata[collection.Metadata.PATH] = "source" new_item.component_metadata[collection.Metadata.ITEM_NAME] = '00000001' collection.Instantiation( category=collection.InstantiationTypes.ACCESS, parent=new_item, files=[os.path.join("123", "access", "123-00000001.jp2")]) collection.Instantiation( category=collection.InstantiationTypes.PRESERVATION, parent=new_item, files=[os.path.join("123", "preservation", "123-00000001.tif")]) return new_object
def test_data_display_role_empty(self): packages = [collection.PackageObject()] model = title_page_selection.PackagesModel(packages) index = model.index(0, 0) data = model.data(index, role=QtCore.Qt.DisplayRole) assert data == ""
def test_data_user_role(self): packages = [collection.PackageObject()] model = title_page_selection.PackagesModel(packages) index = model.index(0, 0) data = model.data(index, role=QtCore.Qt.UserRole) assert data == packages[0]