Skip to content

Commit

Permalink
adding a new endpoint to retrieve new references from ABC
Browse files Browse the repository at this point in the history
  • Loading branch information
sweng66 committed Dec 1, 2024
1 parent 91fcc48 commit 3b1a896
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
77 changes: 77 additions & 0 deletions agr_literature_service/api/crud/reference_crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from datetime import datetime
from typing import Any, Dict, List, Optional
from os import getcwd
from datetime import datetime, date, timedelta

from fastapi.responses import FileResponse
from fastapi import HTTPException, status
Expand Down Expand Up @@ -52,6 +53,13 @@
from agr_literature_service.api.crud.cross_reference_crud import check_xref_and_generate_mod_id
from agr_literature_service.api.crud.workflow_tag_crud import transition_to_workflow_status, \
get_current_workflow_status
from agr_literature_service.lit_processing.utils.db_read_utils import \
get_cross_reference_data_for_ref_ids, get_author_data_for_ref_ids, \
get_mesh_term_data_for_ref_ids, get_mod_corpus_association_data_for_ref_ids, \
get_mod_reference_type_data_for_ref_ids, get_all_reference_relation_data, \
get_journal_by_resource_id
from agr_literature_service.lit_processing.data_export.export_single_mod_references_to_json import \
get_meta_data, get_reference_col_names, generate_json_data
from agr_literature_service.lit_processing.utils.report_utils import send_report

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -1136,3 +1144,72 @@ def add_to_corpus(db: Session, mod_abbreviation: str, reference_curie: str): #
except Exception as e:
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Error adding {reference_curie} to {mod_abbreviation} corpus: {e}")


def new_references(db: Session, mod_abbreviation, days):

datestamp = str(date.today()).replace("-", "")
metaData = get_meta_data(mod_abbreviation, datestamp)

now = datetime.now().date()
start_date = now - timedelta(days=days)
end_date = now + timedelta(days=1) # to cover timezone issue

refColNmList = ", ".join(get_reference_col_names())

sql_query = text(
f"SELECT {refColNmList} "
"FROM reference "
"WHERE reference_id IN ("
" SELECT reference_id "
" FROM mod_corpus_association "
" WHERE mod_id = ("
" SELECT mod_id "
" FROM mod "
" WHERE abbreviation = :mod_abbreviation"
" ) "
" AND corpus = :corpus "
" AND date_updated >= :start_date "
" AND date_updated < :end_date"
") "
"ORDER BY reference_id"
)

rows = db.execute(sql_query, {
"mod_abbreviation": mod_abbreviation,
"corpus": True,
"start_date": start_date,
"end_date": end_date
}).fetchall()

if len(rows) == 0:
return {
"metaData": metaData,
"data": []
}

reference_id_list = []
for x in rows:
reference_id_list.append(x[0])

ref_ids = ", ".join([str(x) for x in reference_id_list])

reference_id_to_xrefs = get_cross_reference_data_for_ref_ids(db, ref_ids)
reference_id_to_authors = get_author_data_for_ref_ids(db, ref_ids)
reference_id_to_mesh_terms = get_mesh_term_data_for_ref_ids(db, ref_ids)
reference_id_to_mod_corpus_data = get_mod_corpus_association_data_for_ref_ids(db, ref_ids)
reference_id_to_mod_reference_types = get_mod_reference_type_data_for_ref_ids(db, ref_ids)
reference_id_to_reference_relation_data = get_all_reference_relation_data(db)
resource_id_to_journal = get_journal_by_resource_id(db)

data = []
generate_json_data(rows, reference_id_to_xrefs, reference_id_to_authors,
reference_id_to_reference_relation_data,
reference_id_to_mod_reference_types,
reference_id_to_mesh_terms,
reference_id_to_mod_corpus_data,
resource_id_to_journal, data)
return {
"metaData": metaData,
"data": data
}
10 changes: 10 additions & 0 deletions agr_literature_service/api/routers/reference_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,3 +269,13 @@ def add_to_corpus(mod_abbreviation: str,

set_global_user_from_okta(db, user)
return reference_crud.add_to_corpus(db, mod_abbreviation, reference_curie)


@router.get('/new_references/{mod_abbreviation}',
status_code=status.HTTP_200_OK)
def new_references(mod_abbreviation: str,
days: int = 7,
db: Session = db_session):
references = reference_crud.new_references(db, mod_abbreviation, days)

return references

0 comments on commit 3b1a896

Please sign in to comment.