def _add_task(): try: data = request.form.to_dict() if 'text' not in data or len(data['text'].strip()) < 1: raise BadRequest('text is empty') if 'subject' not in data or len(data['subject'].strip()) < 1: raise BadRequest('subject is empty') subject = get_subject(data['subject']) if not subject: raise BadRequest('subject not found') if 'day' in data and not data['day'].isdigit(): raise BadRequest('day must be integer') if 'day' not in data: data['day'] = 0 task = add_task(data['subject'], data['text'], data['day']) if not task: raise BadRequest('task not found') return jsonify(task.to_json()) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def add_argument(self, name, type=str, required=False, help="Bad Request", location=('form', 'json'), default=None): """request参数验证 :param name: :param type: :param required: :param help: :param location: str or tuple. :param default: :return: """ location = self.get_location(location, help) value = location.get(name, default) if required and value is None: raise BadRequest(msg=help) try: value = type(value) except TypeError: raise BadRequest(msg=help) self._args[name] = value
async def signature_middleware(request: Request) -> None: path: str = request.path if path in settings.SIGNATURE_WHITE_LIST: return timestamp: str = request.headers.get("Timestamp") signature: str = request.headers.get("Signature") if timestamp is None or signature is None: raise BadRequest() expect_signature: str = generate_signature(timestamp) if signature != expect_signature: raise BadRequest()
def _update_task(id: int): try: if 'text' not in request.form or len(request.form['text'].strip()) < 1: raise BadRequest('text is empty') task = edit_task(id, request.form['text']) if not task: raise BadRequest('task not found') return jsonify(task.to_json()) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def _update_subject(codename: str): try: assert request.json assert request.json['name'] or request.json['aliases'] or request.json['info'] \ or request.json['teacher'] or request.json['audience'] or request.json['files'] params = {} for name in [ 'name', 'aliases', 'info', 'teacher', 'audience', 'files' ]: if name in request.json: params[name] = request.json[name] subject = edit_subject(codename, **params) if not subject: raise BadRequest('subject not found') return jsonify(subject.to_full_json()) except BadRequest as e: abort(400, description=str(e)) except AssertionError as e: abort(400, description='send at least one parameter') except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def add(request): data = json.loads(request.data) product_name = data.get("product_name") stock = data.get("stock") if product_name is None or stock is None: raise BadRequest("Product Name and Stock are required") product = Product.create(product_name=product_name, stock=stock) return 200, json.dumps(model_to_dict(product))
def _get_timetable_by_date(input_date: str): try: try: date_to_get = datetime.strptime(input_date, '%Y-%m-%d').date() except ValueError: raise BadRequest('the date must be in the format %Y-%m-%d') subjects = get_subjects_by_date(date_to_get) if not subjects: raise BadRequest('there are no subjects on this date') return jsonify(list(map(lambda s: s.to_json(), subjects))) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def edit_stock(request, pk): data = json.loads(request.data) stock = data.get("stock") if stock is None: raise BadRequest("Stock is required") Sale = Sale.update(stock=stock).where(Sale.id == pk).execute() return 200, json.dumps(model_to_dict(Sale.select().where(Sale.id == pk).get()))
def register(request, dispatcher): data = json.loads(request.data) user_name = data.get("user_name") password = data.get("password") if password is None or user_name is None: raise BadRequest("User Name and Password are required") user = User.create(password=password, user_name=user_name) dispatcher("user_created", data) return 201, json.dumps({"user_name": user.user_name})
def login(request): data = json.loads(request.data) user_name = data.get("user_name") password = data.get("password") if password is None or user_name is None: raise BadRequest("User Name and Password are required") user = User.get(User.user_name == user_name) if user is None or user.password != password: raise Unauthorized("Invalid user name or password") return 200, json.dumps({"success": True})
def post(self): auth_header = self.request.headers.get('X-Verify-Credentials-Authorization') provider = self.request.headers.get('X-Auth-Service-Provider') if (not auth_header or not provider): raise BadRequest(reason='missing auth header and provider', status_code=int(HTTPStatus.BAD_REQUEST)) try: request_body = json_decode(self.request.body) gender = request_body['gender'] push_id = request_body['push_id'] except: raise BadRequest(reason='missing required fields', status_code=400) if gender not in (0, 1): raise BadRequest(reason='invalid gender provided', status_code=400) try: digits_user = self.auth_service.fetch_digits_provider( provider_url=provider, auth_header=auth_header) user_id = digits_user['id'] phone_number = digits_user['phone_number'] except AuthError: raise AuthError(reason='invalid user provided', status_code=int(HTTPStatus.UNAUTHORIZED)) self.user_service.verify_user_resource( user_id=user_id, phone_number=phone_number, gender=gender, push_id=push_id) jwt_token = self.jwt_service.sign_jwt_token({'id': user_id, 'push_id': push_id}) response = { 'token': jwt_token } self.write(response) self.set_status(int(HTTPStatus.CREATED)) self.finish()
def _get_task(id: int): try: task = get_task(id) if not task: raise BadRequest('task not found') return jsonify(task.to_json()) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def _get_user(id: int): try: user = get_user(id) if not user: raise BadRequest('user not found') return jsonify(user.to_json()) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def _get_subject_tasks(codename: str): try: subject = get_subject(codename) if not subject: raise BadRequest('subject not found') return jsonify(list(map(lambda s: s.to_json(), subject.tasks))) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def _get_subject_timetable(codename: str): try: subject = get_subject(codename) if not subject: raise BadRequest('subject not found') subject_timetable = get_subject_timetable(codename) return jsonify(subject_timetable) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def get_location(self, locations, help='Bad Request'): location_obj = None if isinstance(locations, str): locations = (locations, ) for location in locations: if not hasattr(request, location): continue if not getattr(request, location): continue location_obj = getattr(request, location) break if location_obj is not None: return location_obj raise BadRequest(msg=help)
def _get_tasks_by_week(week: int): try: if 0 > week or week > 52: raise BadRequest('invalid week number') tasks = get_tasks_by_week(week) return jsonify( list(map(lambda day: list(map(lambda s: s.to_json(), day)), tasks))) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def _get_tasks_by_date(input_date: int): try: try: date_to_get = datetime.strptime(input_date, '%Y-%m-%d').date() except ValueError: raise BadRequest('the date must be in the format %Y-%m-%d') tasks = get_tasks_by_date(date_to_get) return jsonify(list(map(lambda s: s.to_json(), tasks))) except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def add(request, dispatcher): data = json.loads(request.data) user_id = data.get("user_id") quantity = data.get("quantity") product_id = data.get("product_id") if user_id is None or quantity is None or product_id is None: raise BadRequest("Sale Id, User Id and are Quantity required") sale = Sale.create(Sale_name=Sale_name, stock=stock) payload = { "stock": (stock - quantity), "product_id": product_id } dispatcher("update_stock", payload) return 200, json.dumps(model_to_dict(Sale))
def _delete_task(id: int): try: task = get_task(id) if not task: raise BadRequest('task not found') if delete_task(id): return jsonify('') else: abort(501, 'failed to delete task') except BadRequest as e: abort(400, description=str(e)) except Exception as e: current_app.logger.error(e) abort(500, description='Server error')
def delete(request, pk): if pk is None: raise BadRequest("Product id is required") product = Product.delete().where(Product.id == pk).execute() return 200, json.dumps({"Product Deleted": True})
# is declined: nested_metrics = set(self.nested_metrics) raise InvalidQuery(details=( f"Nested metrics - e.g. {nested_metrics} - cannot be requested " f"alongside other metrics. " f"Remove {set(self.metric) - nested_metrics} and try again." )) else: # When no nested metric is present in `self.metric`: if self.area_type == "msoa": query = const.DBQueries.nested_object else: query = const.DBQueries.main_data query = query.substitute(partition=self.partition_id, filters=filters) elif self.method == RequestMethod.Head: query = const.DBQueries.exists query = query.substitute(partition=self.partition_id, filters=filters) else: raise BadRequest() logger.info(dumps({"query": query})) self._db_query = query return self._db_query
def delete(request, pk): if pk is None: raise BadRequest("Sale id is required") Sale = Sale.delete().where(Sale.id == pk).execute() return 200, json.dumps({"Sale Deleted": True})