P5-4697 add bernard integration and send order row endpoint
This commit is contained in:
+2
-1
@@ -1,5 +1,5 @@
|
||||
from flask import Flask, jsonify, Response, request
|
||||
from api.extensions import db, esales
|
||||
from api.extensions import db, esales, bernard
|
||||
from api.validators import ValidationError
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ def create_app(config_name="config"):
|
||||
|
||||
db.init_app(app)
|
||||
esales.init_app(app)
|
||||
bernard.init_app(app)
|
||||
|
||||
# register errors handlers
|
||||
@app.errorhandler(404)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from esales.flask_esales import Esales
|
||||
from api.lib.bernard import Bernard
|
||||
|
||||
|
||||
db = SQLAlchemy()
|
||||
esales = Esales()
|
||||
bernard = Bernard()
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
import boto3
|
||||
import time
|
||||
import json
|
||||
|
||||
|
||||
class Bernard(object):
|
||||
def __init__(self, app=None):
|
||||
self.sqs = boto3.client("sqs")
|
||||
if app:
|
||||
self.init_app(app)
|
||||
|
||||
def init_app(self, app):
|
||||
if not "BERNARD_QUEUE_URL" in app.config:
|
||||
raise Exception("BERNARD_QUEUE_URL missing in config")
|
||||
self.queue_url = app.config.get("BERNARD_QUEUE_URL")
|
||||
|
||||
def produce(self, task, args={}, retries=0):
|
||||
args["name"] = task
|
||||
|
||||
if retries > 0:
|
||||
args["retries"] = retries
|
||||
|
||||
message = {
|
||||
"args": args,
|
||||
"class": "Bernard:Message:DefaultMessage",
|
||||
"timestamp": time.time(),
|
||||
}
|
||||
|
||||
response = self.sqs.send_message(
|
||||
QueueUrl=self.queue_url, MessageBody=json.dumps(message)
|
||||
)
|
||||
|
||||
# if the response contains a MD5OfMessageBody we assume the message was successfully delivered to the queue
|
||||
if "MD5OfMessageBody" in response:
|
||||
return True
|
||||
|
||||
return False
|
||||
@@ -1,5 +1,5 @@
|
||||
from flask import Blueprint, jsonify, abort, request
|
||||
from api import db
|
||||
from api import db, bernard
|
||||
from api.helpers import check_api_key
|
||||
from api.models import OrderRow, OrderRowField, OrderRowDetail
|
||||
|
||||
@@ -22,3 +22,14 @@ def save_pwinty_image_id(row_id):
|
||||
db.session.commit()
|
||||
|
||||
return jsonify(detail.to_json())
|
||||
|
||||
|
||||
@mod.route("/<int:row_id>/send", methods=["POST"])
|
||||
def send_order_row(row_id):
|
||||
success = bernard.produce("SendOrderRow", {"row_id": row_id})
|
||||
if success:
|
||||
return jsonify({"status": "ok"})
|
||||
else:
|
||||
return jsonify(
|
||||
{"status": "err", "message": "Message not delivered to Bernard queue"}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user