Complete CRUD UserView
This commit is contained in:
parent
297b31ab90
commit
7201d9a529
|
@ -1,27 +1,131 @@
|
|||
from aiohttp.web import json_response, View
|
||||
from aiohttp.web import HTTPNotFound, HTTPUnprocessableEntity
|
||||
from aiohttp.web import (
|
||||
HTTPNotFound,
|
||||
HTTPUnprocessableEntity,
|
||||
HTTPServerError,
|
||||
HTTPNoContent,
|
||||
HTTPBadRequest,
|
||||
HTTPCreated,
|
||||
)
|
||||
|
||||
from phi.logging import get_logger
|
||||
from phi.api.utils import serialize
|
||||
from phi.async_ldap.model import Hackers
|
||||
from phi.async_ldap.model import Hackers, User
|
||||
from phi.exceptions import (
|
||||
PhiEntryDoesNotExist,
|
||||
PhiUnexpectedRuntimeValue,
|
||||
PhiCannotExecute,
|
||||
)
|
||||
|
||||
log = get_logger(__name__)
|
||||
|
||||
|
||||
class UserView(View):
|
||||
def get_log(self):
|
||||
return self.request.app["log"]
|
||||
|
||||
def get_uid(self):
|
||||
try:
|
||||
return self.request.match_info["uid"]
|
||||
except KeyError:
|
||||
raise HTTPUnprocessableEntity
|
||||
|
||||
async def find_user(self, uid):
|
||||
log = self.get_log()
|
||||
|
||||
try:
|
||||
user = await self.request.app["users"].search(uid)
|
||||
log.info("Found user %s", user)
|
||||
except PhiEntryDoesNotExist as e:
|
||||
log.info(e)
|
||||
raise HTTPNotFound
|
||||
|
||||
return user
|
||||
|
||||
async def get(self):
|
||||
uid = self.request.match_info.get("uid", None)
|
||||
log = self.get_log()
|
||||
log.debug(f"{self.__class__.__name__}.get")
|
||||
uid = self.get_uid()
|
||||
|
||||
if uid is None:
|
||||
return HTTPUnprocessableEntity()
|
||||
|
||||
user = await self.request.app["users"].get_by_uid(uid)
|
||||
self.request.app["alog"].info("Found user %s", user)
|
||||
|
||||
if not user:
|
||||
return HTTPNotFound()
|
||||
user = await self.find_user(uid)
|
||||
|
||||
result = await user.describe()
|
||||
self.request.app["alog"].debug("Returning result %s", result)
|
||||
log.debug("Returning result %s", result)
|
||||
|
||||
return json_response(result)
|
||||
|
||||
async def post(self):
|
||||
log = self.get_log()
|
||||
log.debug(f"{self.__class__.__name__}.post")
|
||||
uid = self.get_uid()
|
||||
|
||||
user = await self.find_user(uid)
|
||||
|
||||
try:
|
||||
user = await self.request.app["users"].search(uid)
|
||||
log.info("Found user %s", user)
|
||||
except PhiEntryDoesNotExist as e:
|
||||
log.debug(e)
|
||||
raise HTTPNotFound(text=str(e))
|
||||
except PhiUnexpectedRuntimeValue as e:
|
||||
log.error("Exception: %s", e)
|
||||
raise HTTPServerError
|
||||
|
||||
body = await self.request.json()
|
||||
|
||||
for k, v in body.items():
|
||||
try:
|
||||
user[k] = v
|
||||
except PhiCannotExecute as e:
|
||||
err = str(e)
|
||||
log.error(err)
|
||||
raise HTTPBadRequest(text=err)
|
||||
|
||||
try:
|
||||
await user.modify()
|
||||
except Exception as e:
|
||||
log.error("Exception: %s", e)
|
||||
|
||||
raise HTTPNoContent
|
||||
|
||||
async def put(self):
|
||||
log = self.get_log()
|
||||
log.debug(f"{self.__class__.__name__}.put")
|
||||
uid = self.get_uid()
|
||||
|
||||
user = User(self.request.app["ldap_client"], uid)
|
||||
|
||||
body = await self.request.json()
|
||||
|
||||
try:
|
||||
for k, v in body.items():
|
||||
user[k] = v
|
||||
|
||||
log.debug(f"Saving: {user}")
|
||||
await user.save()
|
||||
except PhiCannotExecute as e:
|
||||
err = str(e)
|
||||
log.error(err)
|
||||
raise HTTPBadRequest(text=err)
|
||||
|
||||
log.info(f"New user saved: {user}")
|
||||
|
||||
raise HTTPCreated
|
||||
|
||||
async def delete(self):
|
||||
log = self.get_log()
|
||||
log.debug(f"{self.__class__.__name__}.delete")
|
||||
uid = self.get_uid()
|
||||
|
||||
try:
|
||||
user = await self.request.app["users"].search(uid)
|
||||
log.info("Found user %s", user)
|
||||
await user.delete()
|
||||
except PhiEntryDoesNotExist as e:
|
||||
log.debug(e)
|
||||
raise HTTPNotFound(text=str(e))
|
||||
except PhiUnexpectedRuntimeValue as e:
|
||||
log.error("Exception: %s", e)
|
||||
raise HTTPServerError
|
||||
|
||||
raise HTTPNoContent
|
||||
|
|
Loading…
Reference in New Issue
Block a user