# -*- coding: utf-8 -*-
"""Declaration of FastAPI application."""
from typing import List, Optional
from aiida import orm
from aiida.cmdline.utils.decorators import with_dbenv
from fastapi import APIRouter, Depends
from aiida_restapi.models import Group, User
from .auth import get_current_active_user
router = APIRouter()
[docs]@router.get("/groups", response_model=List[Group])
@with_dbenv()
async def read_groups() -> List[Group]:
"""Get list of all groups"""
return Group.get_entities()
[docs]@router.get("/groups/projectable_properties", response_model=List[str])
async def get_groups_projectable_properties() -> List[str]:
"""Get projectable properties for groups endpoint"""
return Group.get_projectable_properties()
[docs]@router.get("/groups/{group_id}", response_model=Group)
@with_dbenv()
async def read_group(group_id: int) -> Optional[Group]:
"""Get group by id."""
qbobj = orm.QueryBuilder()
qbobj.append(
orm.Group, filters={"id": group_id}, project=["**"], tag="group"
).limit(1)
return qbobj.dict()[0]["group"]
[docs]@router.post("/groups", response_model=Group)
async def create_user(
group: Group,
current_user: User = Depends(
get_current_active_user
), # pylint: disable=unused-argument
) -> Group:
"""Create new AiiDA group."""
orm_group = orm.Group(**group.dict(exclude_unset=True)).store()
return Group.from_orm(orm_group)