complete easy endpoints
This commit is contained in:
112
src/resources.py
112
src/resources.py
@@ -0,0 +1,112 @@
|
||||
"""
|
||||
Endpoinds to serve location API
|
||||
"""
|
||||
|
||||
__author__ = '@tormakris'
|
||||
__copyright__ = "Copyright 2021, KMLabz Team"
|
||||
__module_name__ = "resources"
|
||||
__version__text__ = "1"
|
||||
|
||||
import json
|
||||
import random
|
||||
|
||||
from flask import request, current_app, abort
|
||||
from flask_restful import Resource
|
||||
|
||||
from redis_client import redis_client
|
||||
from schemas import ServiceLocatorSchema, ServiceDirectorySchema
|
||||
|
||||
|
||||
class ServiceDiscoveryResource(Resource):
|
||||
"""
|
||||
Service Discovery endpoint
|
||||
"""
|
||||
servicedirectoryschema = ServiceDirectorySchema(many=True)
|
||||
|
||||
def get(self):
|
||||
try:
|
||||
servicelist = self.servicedirectoryschema.load(json.load(redis_client.get('servicelist').decode('UTF-8')))
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(404, "not found")
|
||||
return self.servicedirectoryschema.dump(servicelist), 200
|
||||
|
||||
|
||||
class ServiceLocationResource(Resource):
|
||||
"""
|
||||
Service location endpoint
|
||||
"""
|
||||
servicelocatorschema = ServiceLocatorSchema(many=False)
|
||||
|
||||
def get(self, serviceid: str):
|
||||
try:
|
||||
serviceobject: dict = self.servicelocatorschema.load(json.load(redis_client.get(serviceid).decode('UTF-8')))
|
||||
servicelocation: str = random.choice(serviceobject['servicearray'])['location']
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(404, "not found")
|
||||
return {"location": servicelocation}, 200
|
||||
|
||||
|
||||
class ServiceDatabaseResource(Resource):
|
||||
"""
|
||||
Service database endpoint
|
||||
"""
|
||||
servicelocatorschema = ServiceLocatorSchema(many=False)
|
||||
servicedirectoryschema = ServiceDirectorySchema(many=True)
|
||||
|
||||
def post(self):
|
||||
try:
|
||||
body = request.get_json()
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(400, "JSON parse error")
|
||||
try:
|
||||
servicelocation = self.servicelocatorschema.load(body)
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(417, "invalid JSON schema")
|
||||
try:
|
||||
redis_client.set(servicelocation['id'], self.servicelocatorschema.dump(servicelocation).encode('UTF-8'))
|
||||
servicelist = self.servicedirectoryschema.load(json.load(redis_client.get('servicelist').decode('UTF-8')))
|
||||
servicelist.append({"name": servicelocation['name'], "id": servicelocation['id']})
|
||||
redis_client.set('servicelist', self.servicedirectoryschema.dump(servicelist).encode('UTF-8'))
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(404, "not found")
|
||||
return 200
|
||||
|
||||
|
||||
class ServiceDatabaseItemResource(Resource):
|
||||
"""
|
||||
Service database endpoint interacting with individual items
|
||||
"""
|
||||
servicelocatorschema = ServiceLocatorSchema(many=False)
|
||||
servicedirectoryschema = ServiceDirectorySchema(many=True)
|
||||
|
||||
def put(self, serviceid: str):
|
||||
try:
|
||||
body = request.get_json()
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(400, "JSON parse error")
|
||||
try:
|
||||
servicelocation = self.servicelocatorschema.load(body)
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(417, "invalid JSON schema")
|
||||
try:
|
||||
redis_client.get(serviceid)
|
||||
redis_client.set(serviceid, self.servicelocatorschema.dump(servicelocation).encode('UTF-8'))
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(404, "not found")
|
||||
return 200
|
||||
|
||||
def get(self, serviceid: str):
|
||||
try:
|
||||
servicelocation = self.servicelocatorschema.load(json.load(redis_client.get(serviceid).decode('UTF-8')))
|
||||
except Exception as e:
|
||||
current_app.logger.info(e)
|
||||
abort(404, "not found")
|
||||
return servicelocation, 200
|
||||
|
||||
Reference in New Issue
Block a user