You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.4 KiB
44 lines
1.4 KiB
import json |
|
from flask import Flask, request |
|
from flask_restful import Resource, Api |
|
from config import etcd_client as client, logging |
|
|
|
app = Flask(__name__) |
|
api = Api(app) |
|
|
|
|
|
class ListProducts(Resource): |
|
@staticmethod |
|
def get(): |
|
products = client.get_prefix("/v1/products/", value_in_json=False) |
|
prod_dict = {} |
|
for p in products: |
|
prod_dict[p.key] = json.loads(p.value) |
|
logging.debug(f"Products = {prod_dict}") |
|
return prod_dict, 200 |
|
|
|
class AddProduct(Resource): |
|
@staticmethod |
|
def post(): |
|
data = request.json |
|
logging.debug(f"Got data: {str(data)}") |
|
# TODO: Add validation |
|
|
|
product_key = "/v1/products/" |
|
product_value = { |
|
"name": data["product_name"], |
|
"description": data["product_description"], |
|
"type": data["product_type"], |
|
"price": data["product_price"], |
|
"recurring_duration": data["product_recurring_duration"], |
|
"recurring_duration_units": data["product_recurring_duration_units"] |
|
} |
|
logging.debug(f"Adding product data: {str(product_value)}") |
|
client.put(product_key, product_value, value_in_json=True) |
|
return {"message": f"Product {data['product_name']} created"}, 200 |
|
|
|
api.add_resource(ListProducts, "/product/list") |
|
api.add_resource(AddProduct, "/product/add") |
|
|
|
if __name__ == '__main__': |
|
app.run(host="::", debug=True)
|
|
|