113 lines
2.8 KiB
Python
113 lines
2.8 KiB
Python
import logging
|
|
from uuid import uuid4
|
|
|
|
import connexion
|
|
import six
|
|
|
|
from openapi_server import util
|
|
from pymongo import MongoClient
|
|
from flask import Response
|
|
|
|
from kubernetes import client, config
|
|
|
|
logging.basicConfig(format='[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s')
|
|
logger = logging.getLogger("API")
|
|
logger.setLevel(logging.INFO)
|
|
logger.info("Hello there")
|
|
|
|
config.load_incluster_config() # or config.load_kube_config()
|
|
collection = MongoClient("mongo").get_database("stadtmg").get_collection("predictions")
|
|
|
|
with client.ApiClient() as api_client:
|
|
app_api_instance = client.AppsV1Api(api_client)
|
|
core_api_instance = client.CoreV1Api(api_client)
|
|
|
|
|
|
def detect_post(body=None): # noqa: E501
|
|
"""detect_post
|
|
|
|
# noqa: E501
|
|
|
|
:param body:
|
|
:type body: str
|
|
|
|
:rtype: str
|
|
"""
|
|
image_id = str(uuid4())
|
|
logger.debug(f"Processing image '{image_id}'")
|
|
while collection.find_one({"id": image_id}) is not None:
|
|
image_id = str(uuid4())
|
|
|
|
collection.insert_one({
|
|
"id": image_id,
|
|
"input": body,
|
|
})
|
|
|
|
job_name = f"bodenerkennung-{image_id}"
|
|
metadata = client.V1ObjectMeta(
|
|
name=job_name,
|
|
labels={
|
|
"io.kompose.service": job_name,
|
|
},
|
|
namespace="stadtmg",
|
|
)
|
|
spec = client.V1JobSpec(
|
|
backoff_limit=0,
|
|
ttl_seconds_after_finished=500,
|
|
template=dict(
|
|
spec=dict(
|
|
containers=[
|
|
dict(
|
|
name="bodenerkennung",
|
|
image="masasana.azurecr.io/stadt_mg_bodenerkennung:1.1.1",
|
|
imagePullPolicy="Always",
|
|
command=["python", "predict.py"],
|
|
args=[
|
|
"--source", "mongo://mongo",
|
|
"--image_id", image_id,
|
|
"--category_json", "",
|
|
]
|
|
)
|
|
],
|
|
imagePullSecrets=[{"name": "acr-secret"}],
|
|
restartPolicy="Never",
|
|
)
|
|
),
|
|
)
|
|
logger.debug(metadata)
|
|
logger.debug(spec)
|
|
|
|
job = client.V1Job(
|
|
api_version="batch/v1",
|
|
kind="Job",
|
|
metadata=metadata,
|
|
spec=spec,
|
|
)
|
|
logger.debug(job)
|
|
|
|
batch_api = client.BatchV1Api()
|
|
batch_api.create_namespaced_job("stadtmg", job)
|
|
|
|
return Response(image_id, status=200)
|
|
|
|
|
|
def image_image_id_get(image_id): # noqa: E501
|
|
"""image_image_id_get
|
|
|
|
# noqa: E501
|
|
|
|
:param image_id:
|
|
:type image_id:
|
|
|
|
:rtype: file
|
|
"""
|
|
db_object = collection.find_one({"id": image_id})
|
|
if db_object is None:
|
|
return Response(f"Image with id '{image_id}' not found", status=404)
|
|
|
|
image = db_object.get("output")
|
|
if image is None:
|
|
return Response(status=204)
|
|
|
|
return Response(image, status=200, mimetype="image/png")
|