1 from opnfv_testapi.common.constants import HTTP_FORBIDDEN
2 from opnfv_testapi.resources.handlers import GenericApiHandler
3 from opnfv_testapi.resources.scenario_models import Scenario
4 from opnfv_testapi.tornado_swagger import swagger
7 class GenericScenarioHandler(GenericApiHandler):
8 def __init__(self, application, request, **kwargs):
9 super(GenericScenarioHandler, self).__init__(application,
12 self.table = self.db_scenarios
13 self.table_cls = Scenario
16 class ScenariosCLHandler(GenericScenarioHandler):
17 @swagger.operation(nickname="List scenarios by queries")
20 @description: Retrieve scenario(s).
21 @notes: Retrieve scenario(s)
22 Available filters for this request are :
23 - name : scenario name
25 GET /scenarios?name=scenario_1
26 @param name: scenario name
30 @param installer: installer type
31 @type installer: L{string}
33 @required installer: False
34 @param version: version
35 @type version: L{string}
37 @required version: False
38 @param project: project name
39 @type project: L{string}
41 @required project: False
42 @return 200: all scenarios satisfy queries,
43 empty list if no scenario is found
50 for k in self.request.query_arguments.keys():
51 v = self.get_query_argument(k)
53 elem_query["installer"] = v
55 elem_query["versions.version"] = v
57 elem_query["versions.projects.project"] = v
61 query['installers'] = {'$elemMatch': elem_query}
64 self._list(_set_query())
66 @swagger.operation(nickname="Create a new scenario")
69 @description: create a new scenario by name
70 @param body: scenario to be created
71 @type body: L{ScenarioCreateRequest}
73 @rtype: L{CreateResponse}
74 @return 200: scenario is created.
75 @raise 403: scenario already exists
76 @raise 400: body or name not provided
79 return {'name': data.name}
82 message = '{} already exists as a scenario'.format(data.name)
83 return HTTP_FORBIDDEN, message
85 miss_checks = ['name']
86 db_checks = [(self.table, False, query, error)]
87 self._create(miss_checks=miss_checks, db_checks=db_checks)
90 class ScenarioGURHandler(GenericScenarioHandler):
91 @swagger.operation(nickname='Get the scenario by name')
94 @description: get a single scenario by name
96 @return 200: scenario exist
97 @raise 404: scenario not exist
99 self._get_one({'name': name})
102 @swagger.operation(nickname="Update the scenario by name")
105 @description: update a single scenario by name
106 @param body: fields to be updated
107 @type body: L{ScenarioCreateRequest}
110 @return 200: update success
111 @raise 404: scenario not exist
112 @raise 403: nothing to update