Source code for aiida_restapi.routers.users

# -*- 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 aiida.orm.querybuilder import QueryBuilder
from fastapi import APIRouter, Depends

from aiida_restapi.models import User

from .auth import get_current_active_user

router = APIRouter()


[docs]@router.get("/users", response_model=List[User]) @with_dbenv() async def read_users() -> List[User]: """Get list of all users""" return User.get_entities()
[docs]@router.get("/users/projectable_properties", response_model=List[str]) async def get_users_projectable_properties() -> List[str]: """Get projectable properties for users endpoint""" return User.get_projectable_properties()
[docs]@router.get("/users/{user_id}", response_model=User) @with_dbenv() async def read_user(user_id: int) -> Optional[User]: """Get user by id.""" qbobj = QueryBuilder() qbobj.append(orm.User, filters={"id": user_id}, project=["**"], tag="user").limit(1) return qbobj.dict()[0]["user"]
[docs]@router.post("/users", response_model=User) async def create_user( user: User, current_user: User = Depends( get_current_active_user ), # pylint: disable=unused-argument ) -> User: """Create new AiiDA user.""" orm_user = orm.User(**user.dict(exclude_unset=True)).store() return User.from_orm(orm_user)