forked from enviPath/enviPy
## Major Changes - Implement a REST style API app in epapi - Currently implements a GET method for all entity types in the browse menu (both package level and global) - Provides paginated results per default with query style filtering for reviewed vs unreviewed. - Provides new paginated templates with thin wrappers per entity types for easier maintainability - Implements e2e tests for the API ## Minor changes - Added more comprehensive gitignore to cover coverage reports and other test/node.js etc. data. - Add additional CI file for API tests that only gets triggered on API relevant changes. ## ⚠️ Currently only works with session-based authentication. Token based will be added in new PR. Co-authored-by: Tim Lorsbach <tim@lorsba.ch> Co-authored-by: jebus <lorsbach@envipath.com> Reviewed-on: enviPath/enviPy#243 Co-authored-by: Tobias O <tobias.olenyi@envipath.com> Co-committed-by: Tobias O <tobias.olenyi@envipath.com>
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
from django.conf import settings as s
|
|
from ninja import Router
|
|
from ninja_extra.pagination import paginate
|
|
from uuid import UUID
|
|
|
|
from ..pagination import EnhancedPageNumberPagination
|
|
from ..schemas import CompoundStructureOutSchema, StructureReviewStatusFilter
|
|
from ..dal import (
|
|
get_user_structures_qs,
|
|
get_package_compound_scoped_structure_qs,
|
|
)
|
|
|
|
router = Router()
|
|
|
|
|
|
@router.get(
|
|
"/structures/", response=EnhancedPageNumberPagination.Output[CompoundStructureOutSchema]
|
|
)
|
|
@paginate(
|
|
EnhancedPageNumberPagination,
|
|
page_size=s.API_PAGINATION_DEFAULT_PAGE_SIZE,
|
|
filter_schema=StructureReviewStatusFilter,
|
|
)
|
|
def list_all_structures(request):
|
|
"""
|
|
List all structures from all packages.
|
|
"""
|
|
user = request.user
|
|
return get_user_structures_qs(user).order_by("name").all()
|
|
|
|
|
|
@router.get(
|
|
"/package/{uuid:package_uuid}/compound/{uuid:compound_uuid}/structure/",
|
|
response=EnhancedPageNumberPagination.Output[CompoundStructureOutSchema],
|
|
)
|
|
@paginate(
|
|
EnhancedPageNumberPagination,
|
|
page_size=s.API_PAGINATION_DEFAULT_PAGE_SIZE,
|
|
filter_schema=StructureReviewStatusFilter,
|
|
)
|
|
def list_package_structures(request, package_uuid: UUID, compound_uuid: UUID):
|
|
"""
|
|
List all structures for a specific package and compound.
|
|
"""
|
|
user = request.user
|
|
return (
|
|
get_package_compound_scoped_structure_qs(package_uuid, compound_uuid, user)
|
|
.order_by("name")
|
|
.all()
|
|
)
|