68 lines
2.8 KiB
Python
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)
|