"""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)