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

add export route wip

parent 2f0e6ef1
No related branches found
No related tags found
1 merge request!45Master
Pipeline #1495 canceled
import json
from typing import TYPE_CHECKING
import tempfile
import csv
from fastapi import APIRouter, Depends, Query
from fastapi.responses import PlainTextResponse
......@@ -9,10 +7,8 @@ from nacsos_data.db.schemas import AcademicItem, Project, ItemType, TwitterItem
from nacsos_data.util.annotations.export import prepare_export_table, LabelSelector
from server.util.security import \
UserPermissionChecker, \
InsufficientPermissions
UserPermissionChecker
from nacsos_data.util.annotations import export as anno_export
from nacsos_data.util.auth import UserPermissions
from server.data import db_engine
......@@ -25,30 +21,34 @@ router = APIRouter()
@router.get('/annotations/csv', response_class=PlainTextResponse)
async def get_annotations_csv(labels: list[LabelSelector],
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),
item_fields: list[str] | None = Query(default=None),
permissions: UserPermissions = Depends(UserPermissionChecker('annotations_read'))) \
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),
item_fields: list[str] | None = Query(default=None),
permissions: UserPermissions = Depends(UserPermissionChecker('annotations_read'))) \
-> str:
async with db_engine.session() as session: # type: AsyncSession
project = await session.get(Project, permissions.permissions.project_id)
if project is None:
raise RuntimeError('This should not happen!')
if project.type == ItemType.academic:
item_type = AcademicItem
item_type = AcademicItem # type: ignore[assignment]
elif project.type == ItemType.twitter:
item_type = TwitterItem
item_type = TwitterItem # type: ignore[assignment]
labels = await prepare_export_table(bot_annotation_metadata_ids=bot_annotation_metadata_ids,
result = await prepare_export_table(bot_annotation_metadata_ids=bot_annotation_metadata_ids,
assignment_scope_ids=assignment_scope_ids,
user_ids=user_ids,
labels=labels,
item_fields=[AcademicItem.text, AcademicItem.title],
item_type=item_type,
item_fields=[AcademicItem.text, AcademicItem.title], # type: ignore[list-item]
item_type=item_type, # type: ignore[type-var]
db_engine=db_engine)
ret = ''
for l in labels[:10]:
ret += json.dumps(l) + '\n'
for lab in result[:10]:
ret += json.dumps(lab) + '\n'
return ret
# with tempfile.TemporaryFile() as fp:
......
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