Skip to content
Snippets Groups Projects
Commit 8dd0517e authored by Tim Repke's avatar Tim Repke
Browse files

bump nd and update export endpoint

parent 9c458782
No related branches found
No related tags found
1 merge request!88bump nd and update export endpoint
Pipeline #2999 passed
......@@ -6,21 +6,21 @@ from typing import TYPE_CHECKING
from nacsos_data.db.crud.projects import read_project_by_id
from fastapi import APIRouter, Depends, Query
from nacsos_data.db.schemas import ItemType
from nacsos_data.util.annotations.export import \
prepare_export_table, \
get_project_labels, \
get_project_scopes, \
get_project_bot_scopes, \
get_project_users, \
from fastapi import APIRouter, Depends
from nacsos_data.models.nql import NQLFilter
from nacsos_data.util.annotations.export import (
prepare_export_table,
get_project_labels,
get_project_scopes,
get_project_bot_scopes,
get_project_users,
LabelOptions
)
from pydantic import BaseModel
from starlette.background import BackgroundTask
from starlette.responses import FileResponse
from server.util.security import \
UserPermissionChecker
from server.util.security import UserPermissionChecker
from nacsos_data.util.auth import UserPermissions
......@@ -40,23 +40,27 @@ class CFR(FileResponse): # custom file response to set the media type
media_type = 'application/csv'
class ExportRequest(BaseModel):
labels: list[LabelOptions]
nql_filter: NQLFilter | None = None
bot_annotation_metadata_ids: list[str] | None = None
assignment_scope_ids: list[str] | None = None
user_ids: list[str] | None = None
ignore_hierarchy: bool = True
ignore_repeat: bool = True
@router.post('/annotations/csv', response_class=CFR)
async def get_annotations_csv(labels: list[LabelOptions],
bot_annotation_metadata_ids: list[str] | None = Query(default=None),
assignment_scope_ids: list[str] | None = Query(default=None),
user_ids: list[str] | None = Query(default=None),
ignore_hierarchy: bool = Query(default=True),
ignore_repeat: bool = Query(default=True),
item_fields: list[str] | None = Query(default=None),
async def get_annotations_csv(query: ExportRequest,
permissions: UserPermissions = Depends(UserPermissionChecker('annotations_read'))):
result = await prepare_export_table(bot_annotation_metadata_ids=bot_annotation_metadata_ids,
assignment_scope_ids=assignment_scope_ids,
user_ids=user_ids,
result = await prepare_export_table(bot_annotation_metadata_ids=query.bot_annotation_metadata_ids,
assignment_scope_ids=query.assignment_scope_ids,
user_ids=query.user_ids,
project_id=permissions.permissions.project_id,
labels=labels,
ignore_repeat=ignore_repeat,
ignore_hierarchy=ignore_hierarchy,
item_fields=item_fields,
labels=query.labels,
nql_filter=query.nql_filter,
ignore_repeat=query.ignore_repeat,
ignore_hierarchy=query.ignore_hierarchy,
db_engine=db_engine)
with tempfile.NamedTemporaryFile(suffix='.csv', mode='w', newline='', delete=False) as fp:
......@@ -87,7 +91,6 @@ class ProjectBaseInfo(BaseModel):
scopes: list[ProjectBaseInfoScopeEntry]
bot_scopes: list[ProjectBaseInfoEntry]
labels: dict[str, LabelOptions]
fields: list[str]
@router.get('/project/baseinfo', response_model=ProjectBaseInfo)
......@@ -105,17 +108,7 @@ async def get_export_baseinfo(permissions: UserPermissions = Depends(UserPermiss
if project is None:
raise RuntimeError('Invalid state!')
if project.type == ItemType.twitter:
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']
return ProjectBaseInfo(users=[ProjectBaseInfoEntry.model_validate(pu) for pu in project_users],
scopes=[ProjectBaseInfoScopeEntry.model_validate(ps) for ps in project_scopes],
bot_scopes=[ProjectBaseInfoEntry.model_validate(pbs) for pbs in project_bot_scopes],
labels=project_labels,
fields=fields)
labels=project_labels)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment