def create_order_from(payload): # validate payload validate(payload, Orders().schema) payload["status"] = Orders().created payload["tasks"] = {} payload["statuses"] = [{ "status": Orders().created, "on": datetime.datetime.now(), "payload": None }] # actually create Order order_id = Orders().insert_one(payload).inserted_id # define and record fname for this order if "fname" not in payload: fname = f"{order_id}.img" else: short_id = str(order_id)[:10] if "{rand}" in payload["fname"]: fname = payload["fname"].replace("{rand}", short_id) else: stem, ext = os.path.splitext(payload["fname"]) fname = "".join((stem + f"_{short_id}", ext)) Orders.update(order_id, {"fname": fname}) # send email about new order send_order_created_email(order_id) # create creation task Orders.create_creator_task(order_id) return order_id
def collection(user: dict): """ List or create orders """ if request.method == "GET": # unpack url parameters skip = request.args.get("skip", default=0, type=int) limit = request.args.get("limit", default=20, type=int) skip = 0 if skip < 0 else skip limit = 20 if limit <= 0 else limit orders = [ Orders.get(order.get("_id")) for order in Orders().find({}, {"_id": 1}) ] return jsonify({"meta": {"skip": skip, "limit": limit}, "items": orders}) elif request.method == "POST": # validate request json try: request_json = request.get_json() validate(request_json, Orders().schema) except ValidationError as error: raise errors.BadRequest(error.message) request_json["status"] = Orders().created request_json["tasks"] = {} request_json["statuses"] = [ {"status": Orders().created, "on": datetime.datetime.now(), "payload": None} ] # actually create Ordr order_id = Orders().insert_one(request_json).inserted_id print("ORDER_ID", order_id) # send email about new order send_order_created_email(order_id) # create creation task Orders.create_creator_task(order_id) return jsonify({"_id": order_id})