def delete_object(query_info: Dict[str, str], session: scoped_session, collection: bool = False) -> None: """ Delete the object from the database :param query_info: Dict containing the id and @type of object that has to retrieved :param session: sqlalchemy session :param collection: True if the type_ is of a collection, False for any other class """ type_ = query_info["@type"] id_ = query_info["id_"] database_class = get_database_class(type_) if collection: try: objects = session.query(database_class).filter_by( collection_id=id_).delete() except NoResultFound: raise InstanceNotFound(type_=type_, id_=id_) try: session.commit() except InvalidRequestError: session.rollback() return id_ else: try: object_ = (session.query(database_class).filter( database_class.id == id_).one()) except NoResultFound: raise InstanceNotFound(type_=type_, id_=id_) session.delete(object_) try: session.commit() except InvalidRequestError: session.rollback()
def delete_multiple(id_: List[int], type_: str, session: scoped_session) -> None: """ To delete multiple rows in a single request :param id_: list of ids for objects to be deleted\ :param type_: type of object to be deleted :param session: sqlalchemy scoped session Raises: ClassNotFound: If `type_` does not represent a valid/defined RDFClass. InstanceNotFound: If any instance with type 'type_' and any id in 'id_' list does not exist. """ id_ = id_.split(',') try: rdf_class = session.query(RDFClass).filter( RDFClass.name == type_).one() except NoResultFound: raise ClassNotFound(type_=type_) instances = list() data_III = list() data_IAC = list() data_IIT = list() for index in id_: try: instance = session.query(Instance).filter( Instance.id == index and type_ == rdf_class.id).one() instances.append(instance) except NoResultFound: raise InstanceNotFound(type_=rdf_class.name, id_=index) data_IIT += session.query(triples).filter( triples.GraphIIT.subject == index).all() data_IAC += session.query(triples).filter( triples.GraphIAC.subject == index).all() data_III += session.query(triples).filter( triples.GraphIII.subject == index).all() data = data_III + data_IIT + data_IAC for item in data: session.delete(item) for data in data_IIT: terminal = session.query(Terminal).filter( Terminal.id == data.object_).one() session.delete(terminal) for data in data_III: III_instance = session.query(Instance).filter( Instance.id == data.object_).one() III_instance_type = session.query(RDFClass).filter( RDFClass.id == III_instance.type_).one() # Get the III object type_ delete(III_instance.id, III_instance_type.name, session=session) for instance in instances: session.delete(instance) session.commit()
def delete(id_: str, type_: str, session: scoped_session) -> None: """Delete an Instance and all its relations from DB given id [DELETE]. :param id_: id of object to be deleted :param type_: type of object to be deleted :param session: sqlalchemy scoped session Raises: ClassNotFound: If `type_` does not represent a valid/defined RDFClass. InstanceNotFound: If no instace of type `type_` with id `id_` exists. """ try: rdf_class = session.query(RDFClass).filter( RDFClass.name == type_).one() except NoResultFound: raise ClassNotFound(type_=type_) try: instance = session.query(Instance).filter( Instance.id == id_ and type_ == rdf_class.id).one() except NoResultFound: raise InstanceNotFound(type_=rdf_class.name, id_=id_) data_IIT = session.query(triples).filter( triples.GraphIIT.subject == id_).all() data_IAC = session.query(triples).filter( triples.GraphIAC.subject == id_).all() data_III = session.query(triples).filter( triples.GraphIII.subject == id_).all() data = data_III + data_IIT + data_IAC for item in data: session.delete(item) for data in data_IIT: terminal = session.query(Terminal).filter( Terminal.id == data.object_).one() session.delete(terminal) for data in data_III: III_instance = session.query(Instance).filter( Instance.id == data.object_).one() III_instance_type = session.query(RDFClass).filter( RDFClass.id == III_instance.type_).one() # Get the III object type_ delete(III_instance.id, III_instance_type.name, session=session) session.delete(instance) session.commit()
def delete(id_: int, type_: str, session: scoped_session) -> None: """Delete an Instance and all its relations from DB given id [DELETE].""" try: rdf_class = session.query(RDFClass).filter( RDFClass.name == type_).one() except NoResultFound: print(type_) raise ClassNotFound(type_=type_) try: instance = session.query(Instance).filter( Instance.id == id_ and type_ == rdf_class.id).one() except NoResultFound: raise InstanceNotFound(type_=rdf_class.name, id_=id_) data_IIT = session.query(triples).filter( triples.GraphIIT.subject == id_).all() data_IAC = session.query(triples).filter( triples.GraphIAC.subject == id_).all() data_III = session.query(triples).filter( triples.GraphIII.subject == id_).all() data = data_III + data_IIT + data_IAC for item in data: session.delete(item) for data in data_IIT: terminal = session.query(Terminal).filter( Terminal.id == data.object_).one() session.delete(terminal) for data in data_III: III_instance = session.query(Instance).filter( Instance.id == data.object_).one() III_instance_type = session.query(RDFClass).filter( RDFClass.id == III_instance.type_).one() # Get the III object type_ delete(III_instance.id, III_instance_type.name, session=session) session.delete(instance) session.commit()