From 2931ae3bbeae5df2a65883159f2b4f0ac0bf13ed Mon Sep 17 00:00:00 2001 From: Tim Repke <repke@mcc-berlin.net> Date: Wed, 11 Oct 2023 18:48:58 +0200 Subject: [PATCH] include lexisnexis --- server/api/routes/export.py | 2 ++ server/api/routes/project/items.py | 14 ++++++++++++-- server/api/routes/stats.py | 20 +++++++++++++++++--- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/server/api/routes/export.py b/server/api/routes/export.py index 06dfe52..3be91c3 100644 --- a/server/api/routes/export.py +++ b/server/api/routes/export.py @@ -109,6 +109,8 @@ async def get_export_baseinfo(permissions: UserPermissions = Depends(UserPermiss fields = ['text', 'twitter_id', 'created_at', 'twitter_author_id', 'conversation_id'] elif project.type == ItemType.academic: fields = ['text', 'title', 'doi', 'wos_id', 'scopus_id', 'openalex_id', 'publication_year', 'source'] + elif project.type == ItemType.lexis: + fields = ['text', 'teaser', 'author'] # TODO: ideally we would also export the source data else: fields = ['text'] diff --git a/server/api/routes/project/items.py b/server/api/routes/project/items.py index 4e11574..e548ffb 100644 --- a/server/api/routes/project/items.py +++ b/server/api/routes/project/items.py @@ -1,7 +1,8 @@ from fastapi import APIRouter, Depends, HTTPException, status, Query -from nacsos_data.db.schemas import Project, ItemTypeLiteral, GenericItem, AcademicItem, ItemType, Item +from nacsos_data.db.schemas import Project, ItemTypeLiteral, GenericItem, AcademicItem, ItemType, Item, LexisNexisItem -from nacsos_data.models.items import AnyItemModel, GenericItemModel, AcademicItemModel, AnyItemModelList +from nacsos_data.models.items import AnyItemModel, GenericItemModel, AcademicItemModel, AnyItemModelList, \ + LexisNexisItemModel from nacsos_data.models.items.twitter import TwitterItemModel from nacsos_data.db.crud.items import \ read_item_count_for_project, \ @@ -36,6 +37,9 @@ async def list_project_data(item_type: ItemTypeLiteral, if item_type == 'academic': return await read_all_for_project(Model=AcademicItemModel, Schema=AcademicItem, project_id=project_id, engine=db_engine) + if item_type == 'lexis': + return await read_all_for_project(Model=LexisNexisItemModel, Schema=LexisNexisItem, + project_id=project_id, engine=db_engine) if item_type == 'twitter': return await read_all_twitter_items_for_project(project_id=project_id, engine=db_engine) raise HTTPException(status_code=status.HTTP_501_NOT_IMPLEMENTED, @@ -54,6 +58,10 @@ async def list_project_data_paged(item_type: ItemTypeLiteral, page: int, page_si return await read_paged_for_project(Model=AcademicItemModel, Schema=AcademicItem, page=page, page_size=page_size, project_id=project_id, engine=db_engine) + if item_type == 'lexis': + return await read_paged_for_project(Model=LexisNexisItemModel, Schema=LexisNexisItem, + page=page, page_size=page_size, + project_id=project_id, engine=db_engine) if item_type == 'twitter': return await read_all_twitter_items_for_project_paged(project_id=project_id, page=page, page_size=page_size, engine=db_engine) @@ -78,6 +86,8 @@ async def get_detail_for_item(item_id: str, result = await read_twitter_item_by_item_id(item_id=item_id, engine=db_engine) elif item_type == 'academic': result = await read_any_item_by_item_id(item_id=item_id, item_type=ItemType.academic, engine=db_engine) + elif item_type == 'lexis': + result = await read_any_item_by_item_id(item_id=item_id, item_type=ItemType.lexis, engine=db_engine) else: raise HTTPException(status_code=status.HTTP_501_NOT_IMPLEMENTED, detail=f'Detail getter for {item_type} not implemented (yet).') diff --git a/server/api/routes/stats.py b/server/api/routes/stats.py index 26aa32d..b264009 100644 --- a/server/api/routes/stats.py +++ b/server/api/routes/stats.py @@ -6,8 +6,19 @@ from pydantic import BaseModel from fastapi import APIRouter, Depends, Query from sqlalchemy import select, func as F, desc, text -from nacsos_data.db.schemas import Item, Import, AnnotationScheme, AssignmentScope, Annotation, User, Project, ItemType, \ - AcademicItem, TwitterItem +from nacsos_data.db.schemas import ( + Item, + Import, + AnnotationScheme, + AssignmentScope, + Annotation, + User, + Project, + ItemType, + AcademicItem, + TwitterItem, + LexisNexisItemSource +) from nacsos_data.util.auth import UserPermissions from server.api.errors import ProjectNotFoundError @@ -132,8 +143,11 @@ async def get_publication_year_histogram( elif project.type == ItemType.twitter: table = TwitterItem.__tablename__ column = TwitterItem.created_at.name + elif project.type == ItemType.lexis: + table = LexisNexisItemSource.__tablename__ + column = LexisNexisItemSource.published_at.name else: - raise NotImplementedError('Only available for academic and twitter projects!') + raise NotImplementedError('Only available for academic, lexisnexis, and twitter projects!') stmt = text(f''' WITH buckets as (SELECT generate_series(:from_date ::timestamp, :to_date ::timestamp, '1 year') as bucket), -- GitLab