mazash/src/api_spec.py

68 lines
2.8 KiB
Python

"""OpenAPI v3 Specification"""
# apispec via OpenAPI
from apispec import APISpec
from apispec.ext.marshmallow import MarshmallowPlugin
from apispec_webframeworks.flask import FlaskPlugin
from marshmallow import Schema, fields
# Create an APISpec
spec = APISpec(
title="My App",
version="1.0.0",
openapi_version="3.0.2",
plugins=[FlaskPlugin(), MarshmallowPlugin()],
)
# Define schemas
class FingerprintOuputSchema(Schema):
response = fields.String(description="A message.", required=True)
class FingerprintInputSchema(Schema):
cid = fields.String(description="IPFS cid", required=True)
song = fields.String(description="song name", required=True)
extension = fields.String(description="extension of file", required=True)
class RecognizeResultSchema(Schema):
file_sha1 = fields.String(description="hash of file", required=True)
fingerprinted_confidence = fields.Int(description="", required=True)
fingerprinted_hashes_in_db = fields.Int(description="fingerprinted hashes into database", required=True)
hashes_matched_in_input = fields.Int(description="hashes matched into database", required=True)
input_confidence = fields.Int(description="input confidence", required=True)
input_total_hashes = fields.Int(description="input total hashes", required=True)
offset = fields.Int(description="offset", required=True)
offset_seconds = fields.Int(description="seconds offset", required=True)
song_id = fields.Int(description="song id", required=True)
song_name = fields.String(description="song name", required=True)
class RecognizeOuputSchema(Schema):
align_time = fields.Float(description="", required=True)
fingerprint_time = fields.Float(description="Fingerprinted time", required=True)
query_time = fields.Float(description="query time", required=True)
results = fields.List(fields.Nested(RecognizeResultSchema))
total_time = fields.Float(description="total time of execution", required=True)
class RecognizeInputSchema(Schema):
cid = fields.String(description="IPFS cid", required=True)
extension = fields.String(description="extension of file", required=True)
# register schemas with spec
spec.components.schema("FingerprintOutputResponse", schema=FingerprintOuputSchema)
spec.components.schema("FingerprintInputResponse", schema=FingerprintInputSchema)
spec.components.schema("RecognizeOutputResponse", schema=RecognizeOuputSchema)
spec.components.schema("RecognizeInputResponse", schema=RecognizeInputSchema)
#spec.components.schema("RecognizeResult", schema=RecognizeResultSchema)
# add swagger tags that are used for endpoint annotation
tags = [
{'name': 'mazash',
'description': 'Mazash API'
}
]
for tag in tags:
print(f"Adding tag: {tag['name']}")
spec.tag(tag)