from pyramid.httpexceptions import HTTPBadRequest
from planio.lib.views import RESTView
from . import schemes
from planio.serializers import set_serializer_schema, serialize
class Checks(RESTView):
"""Check list view
"""
def get(self):
"""
items := {plans, checklists, tasks}
.. http:get:: /items/:id/checks
Get checks list
:statuscode 200: OK
"""
objs = self.context.list()
return self.serialize(schemes.check_strict, objs)
def post(self):
"""
.. http:post:: /items/:id/checks
Create new check
:statuscode 200: OK
"""
if 'check_id' in self.request.json_body:
raise HTTPBadRequest
data = self.request.json_body.copy()
obj = self.context.create(**data)
return self.serialize(schemes.check_strict, obj)
def serialize(self, schema, objs):
if not isinstance(objs, list):
return Check.serialize(schema, objs)
result = []
for obj in objs:
result.append(Check.serialize(schema, obj))
return result
class Check(RESTView):
"""Check view
"""
def get(self):
"""
items := {plans, checklists, tasks}
.. http:get:: /items/:id/checks/:id
Get check
:statuscode 200: OK
"""
obj = self.context.get()
return Check.serialize(schemes.check_strict, obj)
def delete(self):
"""
.. items/:id/checks/:id
Delete check
:statuscode 200: OK
"""
return self.context.remove()
def patch(self):
"""
.. items/:id/checks/:id
Update check
:statuscode 200: OK
"""
if 'check_id' in self.request.json_body:
raise HTTPBadRequest
check = self.context.update(**self.request.json_body)
return Check.serialize(schemes.check_strict, check)
def put(self):
"""
.. http:put:: items/:id/checks/:id
Resave check
:statuscode 200: OK
"""
if 'check_id' in self.request.json_body:
raise HTTPBadRequest
check = self.context.save(**self.request.json_body)
return Check.serialize(schemes.check_strict, check)
@set_serializer_schema(schemes.check_info)
def start_get(self):
"""
.. http:get:: /items/:id/checks/:id/start
start check
(копируем, заполняя user и id)
Вернётся новый id теста {'id': '8734ad2312515'}.
:statuscode 200: OK
"""
return self.context.start()
@staticmethod
def serialize(schema, obj):
questions = []
for question in obj.questions:
questions.append(question.serialize())
del obj.questions
result = serialize(schema, obj)
result['questions'] = questions
return result
class ChecksInfo(RESTView):
"""Check list view which user started
"""
serializer_schema = [schemes.check_info]
def get(self):
"""
.. http:get:: /checks
Get list of tests which began user
:statuscode 200: OK
"""
return self.context.list()
class CheckInfo(RESTView):
"""view for info about one test
which user started
"""
serializer_schema = schemes.check_info
def get(self):
"""
.. http:get:: /checks/:id
Get check test which began user
:statuscode 200: OK
"""
return self.context.get()
class Question(RESTView):
"""
"""
def get(self):
"""
.. http:get:: /checks/:id/questions/:id
Get question from test
:statuscode 200: OK
"""
return self.context.get().serialize()
def patch(self):
"""
.. /checks/:id/questions/:id
Update question from test
:statuscode 200: OK
"""
question = self.context.update(**self.request.json_body)
return question.serialize()