def duplicate(self): """ Duplicate an expense line to an existing ExpenseSheet """ logger.info(u"Duplicate ExpenseKmLine") sheet_id = self.request.json_body.get('sheet_id') sheet = ExpenseSheet.get(sheet_id) if sheet is None: return RestError(["Wrong sheet_id"]) if not self.request.has_permission('edit.expensesheet'): logger.error(u"Unauthorized action : possible break in attempt") raise HTTPForbidden() new_line = self.context.duplicate(sheet=sheet) if new_line.type_object is None: return RestError([ u"Aucun type de frais kilométriques correspondant n'a pu être " u"retrouvé sur l'année {0}".format(sheet.year) ], code=403) new_line.sheet_id = sheet.id self.request.dbsession.add(new_line) self.request.dbsession.flush() return new_line
def getOne(self): """ get an expense line """ lid = self.request.matchdict.get('lid') for line in getattr(self.request.context, self.key): if line.id == int(lid): return line raise RestError({}, 404)
def getOne(self): """ get an holiday entry """ lid = self.request.matchdict.get('lid') for holiday in self.request.context.holidays: if holiday.id == int(lid): return holiday raise RestError({}, 404)
def __call__(self): """ Main entry for this view object """ logger.debug("# Entering the status view") if self.request.is_xhr: params = self.request.json_body else: params = self.request.POST if "submit" in params: try: status = self._get_status(params) logger.debug(u"New status : %s " % status) self.set_status(status, params) self.context = self.request.dbsession.merge(self.context) self.notify(status) if not self.request.is_xhr: self.session.flash(self.valid_msg) logger.debug(u" + The status has been set to {0}".format( status)) except Forbidden, e: logger.exception(u" !! Unauthorized action by : {0}".format( self.request.user.login )) if self.request.is_xhr: raise RestError(e.message, code=403) else: self.session.pop_flash("") self.session.flash(e.message, queue='error') except (colander.Invalid, BadRequest), e: logger.exception("Invalid datas") if self.request.is_xhr: raise RestError(e.asdict(translate=colander._)) else: for message in e.messages(): self.session.flash(message, 'error')
def post(self): """ Rest post method : add a line """ logger.debug("In the post method") appstruct = self.request.json_body try: appstruct = self.schema.deserialize(appstruct) except colander.Invalid, err: traceback.print_exc() logger.exception(" - Erreur") logger.exception(appstruct) raise RestError(err.asdict(), 400)
def post(self): """ Rest POST method : add """ logger.debug(u"In the bookmark edition") appstruct = self.request.json_body try: bookmark = self.schema.deserialize(appstruct) except colander.Invalid, err: traceback.print_exc() logger.exception(" - Error in posting bookmark") logger.exception(appstruct) raise RestError(err.asdict(), 400)
def put(self): """ Rest put method : update a line """ log.debug("In the put method") line = self.getOne() appstruct = self.request.json_body try: appstruct = self.schema.deserialize(appstruct) except colander.Invalid, err: import traceback traceback.print_exc() log.exception(" - Erreur") raise RestError(err.asdict(), 400)
def api_login_post_view(request): """ A Json login view expect a login and a password element (in json format) returns a json dict : success : {'status':'success'} error : {'status':'error', 'errors':{'field':'error message'}} """ schema = get_json_auth_schema() appstruct = request.json_body try: appstruct = schema.deserialize(appstruct) except colander.Invalid, err: log.exception(" - Erreur") raise RestError(err.asdict(), 400)
def delete(self): """ Removes a bookmark """ logger.debug(u"In the bookmark deletion view") handler = BookMarkHandler(self.request) # Retrieving the id from the request id_ = self.request.matchdict.get('id') bookmark = handler.delete(id_) # if None is returned => there was no bookmark with this id if bookmark is None: raise RestError({}, 404) else: return dict(status="success")
def duplicate(self): """ Duplicate an expense line to an existing ExpenseSheet """ logger.info(u"Duplicate ExpenseLine") sheet_id = self.request.json_body.get('sheet_id') sheet = ExpenseSheet.get(sheet_id) if sheet is None: return RestError(["Wrong sheet_id"]) if not self.request.has_permission('edit.expensesheet'): logger.error(u"Unauthorized action : possible break in attempt") raise HTTPForbidden() new_line = self.context.duplicate(sheet=sheet) new_line.sheet_id = sheet.id self.request.dbsession.add(new_line) self.request.dbsession.flush() return new_line
self.session.flash(e.message, queue='error') except (colander.Invalid, BadRequest), e: logger.exception("Invalid datas") if self.request.is_xhr: raise RestError(e.asdict(translate=colander._)) else: for message in e.messages(): self.session.flash(message, 'error') return self.redirect() if self.request.is_xhr: raise RestError( [ u'Il manque des arguments pour changer le statut ' u'du document' ]) else: self.session.flash( u"Il manque des arguments pour changer le statut du document", "error" ) return self.redirect() class TaskStatusView(StatusView): """ View handling base status for tasks (estimation/invoice/cancelinvoice) Status related views should implement the validate function to ensure data
def validation_status(self): validation_status = self.request.json_body.get('validation_status') if validation_status in self.context.VALIDATION_STATUS: return self.context.set_validation_status(validation_status) else: return RestError(['Statut inconnu'])
def test_it(config): err = RestError({}, 151) assert (err.status == u"151 Continue") assert (err.content_type == 'application/json')