def get(self, project_name=None): """ Get Project(s) info :param project_name: """ if project_name is None: project_name = "" get_request = dict() if len(project_name) > 0: get_request["name"] = project_name res = [] cursor = self.db.test_projects.find(get_request) while (yield cursor.fetch_next): test_project = TestProject.testproject_from_dict(cursor.next_object()) res.append(test_project.format_http()) meta = dict() meta["total"] = len(res) meta["success"] = True if len(res) > 0 else False answer = dict() answer["test_projects"] = res answer["meta"] = meta self.finish_request(answer)
def delete(self, project_name): """ Remove a test project""" print "DELETE request for : {}".format(project_name) # check for an existing project to be deleted mongo_dict = yield self.db.test_projects.find_one({"name": project_name}) test_project = TestProject.testproject_from_dict(mongo_dict) if test_project is None: raise HTTPError(HTTP_NOT_FOUND, "{} could not be found as a project to be deleted".format(project_name)) # just delete it, or maybe save it elsewhere in a future res = yield self.db.test_projects.remove({"name": project_name}) print res self.finish_request({"message": "success"})
def post(self): """ Create a test project""" if self.json_args is None: raise HTTPError(HTTP_BAD_REQUEST) query = {"name": self.json_args.get("name")} # check for name in db mongo_dict = yield self.db.test_projects.find_one(query) if mongo_dict is not None: raise HTTPError(HTTP_FORBIDDEN, "{} already exists as a project".format(self.json_args.get("name"))) test_project = TestProject.testproject_from_dict(self.json_args) test_project.creation_date = datetime.now() future = self.db.test_projects.insert(test_project.format()) result = yield future test_project._id = result self.finish_request(test_project.format_http())
def put(self, project_name): """ Updates the name and description of a test project""" print "PUT request for : {}".format(project_name) query = {"name": project_name} mongo_dict = yield self.db.test_projects.find_one(query) test_project = TestProject.testproject_from_dict(mongo_dict) if test_project is None: raise HTTPError(HTTP_NOT_FOUND, "{} could not be found".format(project_name)) new_name = self.json_args.get("name") new_description = self.json_args.get("description") # check for payload name parameter in db # avoid a request if the project name has not changed in the payload if new_name != test_project.name: mongo_dict = yield self.db.test_projects.find_one({"name": new_name}) if mongo_dict is not None: raise HTTPError(HTTP_FORBIDDEN, "{} already exists as a project".format(new_name)) # new dict for changes request = dict() request = prepare_put_request(request, "name", new_name, test_project.name) request = prepare_put_request(request, "description", new_description, test_project.description) """ raise exception if there isn't a change """ if not request: raise HTTPError(HTTP_FORBIDDEN, "Nothing to update") """ we merge the whole document """ edit_request = test_project.format() edit_request.update(request) """ Updating the DB """ res = yield self.db.test_projects.update({"name": project_name}, edit_request) print res edit_request["_id"] = str(test_project._id) self.finish_request({"message": "success", "content": edit_request})