diff options
| author | Frederick Muriuki Muriithi | 2025-10-13 13:13:02 -0500 |
|---|---|---|
| committer | Frederick Muriuki Muriithi | 2025-10-13 13:13:58 -0500 |
| commit | f2d21da16508d1859d0e2aeac63ccb5709540aab (patch) | |
| tree | 516751554c970da86d5a8f2a8aadcdb93b8e3b31 /uploader/publications/models.py | |
| parent | eecc17d9c7b79a31eed40ed72df9dc06eec9056d (diff) | |
| download | gn-uploader-f2d21da16508d1859d0e2aeac63ccb5709540aab.tar.gz | |
Publications: Enable deletion of unlinked publications.
Diffstat (limited to 'uploader/publications/models.py')
| -rw-r--r-- | uploader/publications/models.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/uploader/publications/models.py b/uploader/publications/models.py index f83be58..ba8f026 100644 --- a/uploader/publications/models.py +++ b/uploader/publications/models.py @@ -71,6 +71,27 @@ def update_publications(conn: Connection , publications: tuple[dict, ...]) -> tu return tuple() +def delete_publications(conn: Connection , publications: tuple[dict, ...]): + """Delete multiple publications""" + publications = tuple(pub for pub in publications if bool(pub)) + if len(publications) > 0: + _pub_ids = tuple(pub["Id"] for pub in publications) + _paramstr = ", ".join(["%s"] * len(_pub_ids)) + _phenos_query = ( + "SELECT PublicationId, COUNT(PhenotypeId) FROM PublishXRef " + f"WHERE PublicationId IN ({_paramstr}) GROUP BY PublicationId;") + + with conn.cursor(cursorclass=DictCursor) as cursor: + cursor.execute(_phenos_query, _pub_ids) + _linked_phenos = cursor.fetchall() + if len(_linked_phenos) > 0: + raise Exception( + "Cannot delete publications with linked phenotypes.") + + cursor.execute( + f"DELETE FROM Publication WHERE Id IN ({_paramstr})", _pub_ids) + + def fetch_publication_by_id(conn: Connection, publication_id: int) -> dict: """Fetch a specific publication from the database.""" with conn.cursor(cursorclass=DictCursor) as cursor: |
