def delete(self, **kwargs): """Delete Document record.""" loan_search_res = search_by_pid( document_pid=self["pid"], filter_states=['PENDING'] + current_app.config['CIRCULATION_STATES_LOAN_ACTIVE'], ) if loan_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="Loan", ref_ids=sorted([res["pid"] for res in loan_search_res.scan()]), ) item_search = ItemSearch() item_search_res = item_search.search_by_document_pid( document_pid=self["pid"]) if item_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="Item", ref_ids=sorted([res["pid"] for res in item_search_res.scan()]), ) return super(Document, self).delete(**kwargs)
def test_record_has_references_error(app): """Test RecordHasReferencesError.""" record_type = "Item" record_id = "item-1" ref_type = "RecordType" ref_ids = ["1", "2", "3"] msg = ( "Cannot delete the {record_type} {record_id} record because it has " "references from {ref_type} records with ids: {ref_ids}." ).format( record_type=record_type, record_id=record_id, ref_type=ref_type, ref_ids=ref_ids, ) with pytest.raises(RecordHasReferencesError) as ex: raise RecordHasReferencesError( record_type=record_type, record_id=record_id, ref_type=ref_type, ref_ids=ref_ids, ) assert ex.value.code == RecordHasReferencesError.code assert ex.value.description == msg
def preview_delete_document(self, document): """Delete Document record.""" loan_search_res = document.search_loan_references() item_search_res = document.search_item_references() req_search_res = document.search_doc_req_references() orders_refs_search = document.search_order_references() brw_req_refs_search = document.search_brw_req_references() if loan_search_res.count(): raise DocumentHasReferencesError( document=document, ref_type="Loan", refs=loan_search_res, ) if item_search_res.count(): raise DocumentHasReferencesError( document=document, ref_type="Item", refs=item_search_res, ) if req_search_res.count(): raise DocumentHasReferencesError( document=document, ref_type="DocumentRequest", refs=req_search_res, ) if orders_refs_search.count(): raise DocumentHasReferencesError( document=document, ref_type="AcquisitionOrder", refs=orders_refs_search, ) if brw_req_refs_search.count(): raise DocumentHasReferencesError( document=document, ref_type="BorrowingRequest", refs=brw_req_refs_search, ) related_refs = set() for _, related_objects in document.relations.items(): for obj in related_objects: if not obj["record_metadata"].get("mode_of_issuance") \ == "SERIAL": related_refs.add("{pid_value}:{pid_type}".format(**obj)) if related_refs: raise RecordHasReferencesError( record_type=document.__class__.__name__, record_id=document["pid"], ref_type="related", ref_ids=sorted(ref for ref in related_refs), )
def delete(self, **kwargs): """Delete Keyword record.""" doc_search = DocumentSearch() doc_search_res = doc_search.search_by_keyword_pid( keyword_pid=self["pid"]) if doc_search_res.count(): raise RecordHasReferencesError( record_type='Keyword', record_id=self["pid"], ref_type='Document', ref_ids=sorted([res["pid"] for res in doc_search_res.scan()])) return super(Keyword, self).delete(**kwargs)
def delete(self, **kwargs): """Delete Item record.""" loan_search_res = search_by_pid( item_pid=self["pid"], filter_states=current_app.config['CIRCULATION_STATES_LOAN_ACTIVE']) if loan_search_res.count(): raise RecordHasReferencesError( record_type='Item', record_id=self["pid"], ref_type='Loan', ref_ids=sorted([res["pid"] for res in loan_search_res.scan()])) return super(Item, self).delete(**kwargs)
def delete(self, **kwargs): """Delete Tag record.""" doc_search = DocumentSearch() doc_search_res = doc_search.search_by_tag_pid(tag_pid=self["pid"]) if doc_search_res.count(): raise RecordHasReferencesError( record_type="Tag", record_id=self["pid"], ref_type="Document", ref_ids=sorted([res["pid"] for res in doc_search_res.scan()]), ) return super(Tag, self).delete(**kwargs)
def delete(self, **kwargs): """Delete record with relations.""" related_refs = set() for name, related_objects in self.relations.items(): for obj in related_objects: related_refs.add("{pid_value}:{pid_type}".format(**obj)) if related_refs: raise RecordHasReferencesError( record_type=self.__class__.__name__, record_id=self["pid"], ref_type="related", ref_ids=sorted(ref for ref in related_refs), )
def delete(self, **kwargs): """Delete Location record.""" iloc_search = InternalLocationSearch() iloc_search_res = iloc_search.search_by_location_pid( location_pid=self["pid"]) if iloc_search_res.count(): raise RecordHasReferencesError( record_type="Location", record_id=self["pid"], ref_type="Internal Location", ref_ids=sorted([res["pid"] for res in iloc_search_res.scan()]), ) return super().delete(**kwargs)
def delete(self, **kwargs): """Delete record.""" search_cls = current_ils_ill.borrowing_request_search_cls requests_search_res = search_cls().search_by_library_pid(self["pid"]) if requests_search_res.count(): raise RecordHasReferencesError( record_type="Library", record_id=self["pid"], ref_type="BorrowingRequest", ref_ids=sorted( [res["pid"] for res in requests_search_res.scan()]), ) return super().delete(**kwargs)
def delete(self, **kwargs): """Delete Location record.""" item_search = ItemSearch() item_search_res = item_search.search_by_internal_location_pid( internal_location_pid=self["pid"]) if item_search_res.count(): raise RecordHasReferencesError( record_type='Internal Location', record_id=self["pid"], ref_type='Item', ref_ids=sorted([res["pid"] for res in item_search_res.scan()])) return super(InternalLocation, self).delete(**kwargs)
def delete(self, **kwargs): """Delete record.""" search_cls = current_ils_acq.order_search_cls order_search_res = search_cls().search_by_vendor_pid(self["pid"]) if order_search_res.count(): raise RecordHasReferencesError( record_type="Vendor", record_id=self["pid"], ref_type="Order", ref_ids=sorted([res["pid"] for res in order_search_res.scan()]), ) return super().delete(**kwargs)
def delete(self, **kwargs): """Delete Document record.""" loan_search_res = search_by_pid( document_pid=self["pid"], filter_states=["PENDING"] + current_app.config["CIRCULATION_STATES_LOAN_ACTIVE"], ) if loan_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="Loan", ref_ids=sorted([res["pid"] for res in loan_search_res.scan()]), ) item_search = current_app_ils.item_search_cls() item_search_res = item_search.search_by_document_pid( document_pid=self["pid"]) if item_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="Item", ref_ids=sorted([res["pid"] for res in item_search_res.scan()]), ) req_search = current_app_ils.document_request_search_cls() req_search_res = req_search.search_by_document_pid( document_pid=self["pid"]) if req_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="DocumentRequest", ref_ids=sorted([res["pid"] for res in req_search_res.scan()]), ) return super().delete(**kwargs)
def delete(self, **kwargs): """Delete Location record.""" item_search = current_app_ils.item_search_cls() item_search_res = item_search.search_by_internal_location_pid( internal_location_pid=self["pid"]) if item_search_res.count(): raise RecordHasReferencesError( record_type="Internal Location", record_id=self["pid"], ref_type="Item", ref_ids=sorted([res["pid"] for res in item_search_res.scan()]), ) return super().delete(**kwargs)
def delete(self, **kwargs): """Delete Item record.""" item_pid = dict(type=ITEM_PID_TYPE, value=self["pid"]) loan_search_res = search_by_pid( item_pid=item_pid, filter_states=current_app.config["CIRCULATION_STATES_LOAN_ACTIVE"], ) if loan_search_res.count(): raise RecordHasReferencesError( record_type="Item", record_id=self["pid"], ref_type="Loan", ref_ids=sorted([res["pid"] for res in loan_search_res.scan()]), ) return super().delete(**kwargs)
def test_record_has_references_error(app): """Test RecordHasReferencesError.""" record_type = 'Item' record_id = 'item-1' ref_type = 'RecordType' ref_ids = ['1', '2', '3'] msg = ("Cannot delete the {record_type} {record_id} record because it has " "references from {ref_type} records with ids: {ref_ids}.").format( record_type=record_type, record_id=record_id, ref_type=ref_type, ref_ids=ref_ids) with pytest.raises(RecordHasReferencesError) as ex: raise RecordHasReferencesError(record_type=record_type, record_id=record_id, ref_type=ref_type, ref_ids=ref_ids) assert ex.value.code == RecordHasReferencesError.code assert ex.value.description == msg
def delete(self, **kwargs): """Delete record.""" order_search_cls = current_ils_acq.order_search_cls search_order_res = order_search_cls().search_by_provider_pid( self["pid"]) brwreq_search_cls = current_ils_ill.borrowing_request_search_cls search_brwreq_res = brwreq_search_cls().search_by_provider_pid( self["pid"]) if search_order_res.count() or search_brwreq_res.count(): order_ref_ids = [res["pid"] for res in search_order_res.scan()] brwreq_ref_ids = [res["pid"] for res in search_brwreq_res.scan()] raise RecordHasReferencesError( record_type="Provider", record_id=self["pid"], ref_type="Order/BorrowingRequest", ref_ids=sorted(order_ref_ids + brwreq_ref_ids), ) return super().delete(**kwargs)
def delete(self, **kwargs): """Delete Location record.""" iloc_search = current_app_ils.internal_location_search_cls() iloc_search_res = iloc_search.search_by_location_pid( location_pid=self["pid"] ) if iloc_search_res.count(): raise RecordHasReferencesError( record_type="Location", record_id=self["pid"], ref_type="Internal Location", ref_ids=sorted([res["pid"] for res in iloc_search_res.scan()]), ) rec = super().delete(**kwargs) try: # invalidate cached property del current_app_ils.get_default_location_pid except AttributeError: pass return rec
def delete(self, **kwargs): """Delete Document record.""" loan_search_res = search_by_pid( document_pid=self["pid"], filter_states=["PENDING"] + current_app.config["CIRCULATION_STATES_LOAN_ACTIVE"], ) if loan_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="Loan", ref_ids=sorted([res["pid"] for res in loan_search_res.scan()]), ) item_search = current_app_ils.item_search_cls() item_search_res = item_search.search_by_document_pid( document_pid=self["pid"]) if item_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="Item", ref_ids=sorted([res["pid"] for res in item_search_res.scan()]), ) eitem_search = current_app_ils.eitem_search_cls() eitem_search_res = eitem_search.search_by_document_pid( document_pid=self["pid"]) if eitem_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="EItem", ref_ids=sorted([res["pid"] for res in eitem_search_res.scan()]), ) req_search = current_app_ils.document_request_search_cls() req_search_res = req_search.search_by_document_pid( document_pid=self["pid"]) if req_search_res.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="DocumentRequest", ref_ids=sorted([res["pid"] for res in req_search_res.scan()]), ) order_search = current_ils_acq.order_search_cls() orders_refs_search = order_search.search_by_document_pid( document_pid=self["pid"], ) if orders_refs_search.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="AcquisitionOrder", ref_ids=sorted( [res["pid"] for res in orders_refs_search.scan()]), ) brw_req_search = current_ils_ill.borrowing_request_search_cls() brw_req_refs_search = brw_req_search.search_by_document_pid( document_pid=self["pid"], ) if brw_req_refs_search.count(): raise RecordHasReferencesError( record_type="Document", record_id=self["pid"], ref_type="BorrowingRequest", ref_ids=sorted( [res["pid"] for res in brw_req_refs_search.scan()]), ) return super().delete(**kwargs)