예제 #1
0
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
예제 #2
0
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})