Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for pyechonext.apidoc_ui.api_documentation
from pyechonext.app import EchoNext
[docs]
class APIDocumentation :
"""
This class describes an API documentation.
"""
[docs]
def __init__ ( self , app : EchoNext ):
"""Constructs a new instance
Args:
app (Optional[EchoNext]): echonext WSGI app. Defaults to None.
"""
self . _app : EchoNext = app
[docs]
def init_app ( self , app : EchoNext ):
"""Initialize application
Args:
app (EchoNext): echonext WSGI app
"""
self . _app = app
[docs]
def generate_spec ( self ) -> dict :
"""Generate simple OpenAPI configuration from routes
Returns:
dict: openapi configuration
"""
if not isinstance ( self . _app , EchoNext ):
raise AttributeError ( f "Unknown application type: { type ( self . _app ) } " )
spec = {
"openapi" : "3.0.0" ,
"info" : {
"title" : self . _app . app_name ,
"version" : self . _app . settings . VERSION ,
"description" : self . _app . settings . DESCRIPTION ,
},
"paths" : {},
}
for url in self . _app . urls :
spec [ "paths" ][ url . path ] = {
"get" : {
"summary" : str (
f " { url . controller . __doc__ } : { url . controller . get . __doc__ } "
if url . summary is None
else url . summary
)
. replace ( " \n " , "<br>" )
. strip (),
"responses" : {
"200" : { "description" : "Successful response" },
"405" : { "description" : "Method not allow" },
},
},
"post" : {
"summary" : str (
f " { url . controller . __doc__ } : { url . controller . post . __doc__ } "
if url . summary is None
else url . summary
) . replace ( " \n " , "<br>" ),
"responses" : {
"200" : { "description" : "Successful response" },
"405" : { "description" : "Method not allow" },
},
},
}
for path , router in self . _app . router . routes . items ():
spec [ "paths" ][ path ] = {
"get" : {
"summary" : (
str (
router . handler . get . __doc__
if not callable ( router . handler )
else router . handler . __doc__
)
if router . summary is None
else router . summary
),
"responses" : {
"200" : { "description" : "Successful response" },
"405" : { "description" : "Method not allow" },
},
},
"post" : {
"summary" : (
str (
router . handler . post . __doc__
if not callable ( router . handler )
else router . handler . __doc__
)
if router . summary is None
else router . summary
),
"responses" : {
"200" : { "description" : "Successful response" },
"405" : { "description" : "Method not allow" },
},
},
}
return spec