from flask import Blueprint from flask_apispec import doc, marshal_with, use_kwargs from flask_sqlalchemy_replication import ReplicaType, set_replica from http import HTTPStatus import src.schemas.values as serializers from src.db.values import get_value, set_value blueprint = Blueprint("values", __name__) @blueprint.route("/values/", methods=["GET"]) @doc("Get value by key.") @use_kwargs(serializers.Values.Get.Request, location="query") @marshal_with(serializers.Values.Response, code=HTTPStatus.OK, description="Key and value", apply=True) def get_values(**data): return {"value": get_value(**data), **data} @blueprint.route("/values/", methods=["PUT"]) @doc("Set value for a specified key.") @use_kwargs(serializers.Values.Put.Request, location="json_or_query") @marshal_with(serializers.Values.Response, code=HTTPStatus.OK, description="Key and value", apply=True) @set_replica(ReplicaType.MASTER) def put_values(**data): set_value(**data) return data