let fromorm extract the data from this model instead of converting it now to a dict otherwise there s no way to extract lazy data that requires attribute access instead of dict iteration e g lazy relationships pydantic v1 only called by getrequesthandler has been split into its own function to facilitate profiling endpoints since inner functions are harder to profile if statuscode was set use it otherwise use the default from the response class in the case of redirect it s 307 normalize enums e g http httpstatus create a clone of the field so that a pydantic submodel is not returned as is just because it s an instance of a subclass of a more limited class e g userindb containing hashedpassword could be a subclass of user that doesn t have the hashedpassword but because it s a subclass it would pass the validation and be returned as is by being a new field no inheritance will be passed as is a new model will always be created todo remove when deprecating pydantic v1 if a form feed character page break is found in the description text truncate description text to the content preceding the first form feed apirouter class used to group path operations for example to structure an app in multiple files it would then be included in the fastapi app or in another apirouter ultimately included in the app read more about it in the fastapi docs for bigger applications multiple fileshttps fastapi tiangolo comtutorialbiggerapplications example python from fastapi import apirouter fastapi app fastapi router apirouter router getusers tagsusers async def readusers return username rick username morty app includerouterrouter a list of tags to be applied to all the path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a list of dependencies using depends to be applied to all the path operations in this router read more about it in the fastapi docs for bigger applications multiple fileshttps fastapi tiangolo comtutorialbiggerapplicationsincludeanapirouterwithacustomprefixtagsresponsesanddependencies the default response class to be used read more in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponsedefaultresponseclass additional responses to be shown in openapi it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for additional responses in openapihttps fastapi tiangolo comadvancedadditionalresponses and in the fastapi docs for bigger applicationshttps fastapi tiangolo comtutorialbiggerapplicationsincludeanapirouterwithacustomprefixtagsresponsesanddependencies openapi callbacks that should apply to all path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks note you probably shouldn t use this parameter it is inherited from starlette and supported for compatibility a list of routes to serve incoming http and websocket requests you normally wouldn t use this parameter with fastapi it is inherited from starlette and supported for compatibility in fastapi you normally would use the path operation methods like router get router post etc whether to detect and redirect slashes in urls when the client doesn t use the same format default function handler for this router used to handle 404 not found errors only used internally by fastapi to handle dependency overrides you shouldn t need to use it it normally points to the fastapi app object custom route path operation class to be used by this router read more about it in the fastapi docs for custom request and apiroute classhttps fastapi tiangolo comhowtocustomrequestandroutecustomapirouteclassinarouter a list of startup event handler functions you should instead use the lifespan handlers read more in the fastapi docs for lifespanhttps fastapi tiangolo comadvancedevents a list of shutdown event handler functions you should instead use the lifespan handlers read more in the fastapi docs for lifespanhttps fastapi tiangolo comadvancedevents the generic to lifespanapptype is the type of the top level application which the router cannot know statically so we use typing any a lifespan context manager handler this replaces startup and shutdown functions with a single context manager read more in the fastapi docs for lifespanhttps fastapi tiangolo comadvancedevents mark all path operations in this router as deprecated it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration to include or not all the path operations in this router in the generated openapi this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction websocket path a name for the websocket only used internally a list of dependencies using depends to be used for this websocket read more about it in the fastapi docs for websocketshttps fastapi tiangolo comadvancedwebsockets decorate a websocket function read more about it in the fastapi docs for websocketshttps fastapi tiangolo comadvancedwebsockets example example python from fastapi import apirouter fastapi websocket app fastapi router apirouter router websocketws async def websocketendpointwebsocket websocket await websocket accept while true data await websocket receivetext await websocket sendtextfmessage text was data app includerouterrouter a list of tags to be applied to all the path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a list of dependencies using depends to be applied to all the path operations in this router read more about it in the fastapi docs for bigger applications multiple fileshttps fastapi tiangolo comtutorialbiggerapplicationsincludeanapirouterwithacustomprefixtagsresponsesanddependencies the default response class to be used read more in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponsedefaultresponseclass additional responses to be shown in openapi it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for additional responses in openapihttps fastapi tiangolo comadvancedadditionalresponses and in the fastapi docs for bigger applicationshttps fastapi tiangolo comtutorialbiggerapplicationsincludeanapirouterwithacustomprefixtagsresponsesanddependencies openapi callbacks that should apply to all path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks mark all path operations in this router as deprecated it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration include or not all the path operations in this router in the generated openapi schema this affects the generated openapi e g visible at docs customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction include another apirouter in the same current apirouter read more about it in the fastapi docs for bigger applicationshttps fastapi tiangolo comtutorialbiggerapplications example python from fastapi import apirouter fastapi app fastapi internalrouter apirouter usersrouter apirouter usersrouter getusers def readusers return name rick name morty internalrouter includerouterusersrouter app includerouterinternalrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http get operation example python from fastapi import apirouter fastapi app fastapi router apirouter router getitems def readitems return name empanada name arepa app includerouterrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http put operation example python from fastapi import apirouter fastapi from pydantic import basemodel class itembasemodel name str description str none none app fastapi router apirouter router putitemsitemid def replaceitemitemid str item item return message item replaced id itemid app includerouterrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http post operation example python from fastapi import apirouter fastapi from pydantic import basemodel class itembasemodel name str description str none none app fastapi router apirouter router postitems def createitemitem item return message item created app includerouterrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http delete operation example python from fastapi import apirouter fastapi app fastapi router apirouter router deleteitemsitemid def deleteitemitemid str return message item deleted app includerouterrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http options operation example python from fastapi import apirouter fastapi app fastapi router apirouter router optionsitems def getitemoptions return additions aji guacamole app includerouterrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http head operation example python from fastapi import apirouter fastapi from pydantic import basemodel class itembasemodel name str description str none none app fastapi router apirouter router headitems statuscode204 def getitemsheadersresponse response response headersxcatdog alone in the world app includerouterrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http patch operation example python from fastapi import apirouter fastapi from pydantic import basemodel class itembasemodel name str description str none none app fastapi router apirouter router patchitems def updateitemitem item return message item updated in place app includerouterrouter the url path to be used for this path operation for example in http example comitems the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the responsemodel would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the responsemodel if you returned an object that contains an attribute password but the responsemodel does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the responsemodel converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response modelhttps fastapi tiangolo comtutorialresponsemodel the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status codehttps fastapi tiangolo comtutorialresponsestatuscode a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfigurationtags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decoratorshttps fastapi tiangolo comtutorialdependenciesdependenciesinpathoperationdecorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configurationhttps fastapi tiangolo comtutorialpathoperationconfiguration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generateuniqueidfunction in the fastapi class read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelincludeandresponsemodelexclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from responsemodelexcludedefaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from responsemodelexcludeunset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelusetheresponsemodelexcludeunsetparameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than responsemodelexcludeunset and responsemodelexcludedefaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return typehttps fastapi tiangolo comtutorialresponsemodelresponsemodelexcludenone include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validationshttps fastapi tiangolo comtutorialqueryparamsstrvalidationsexcludefromopenapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file othershttps fastapi tiangolo comadvancedcustomresponseredirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbackshttps fastapi tiangolo comadvancedopenapicallbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configurationhttps fastapi tiangolo comadvancedpathoperationadvancedconfigurationcustomopenapipathoperationschema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clientshttps fastapi tiangolo comadvancedgenerateclientscustomgenerateuniqueidfunction add a path operation using an http trace operation example python from fastapi import apirouter fastapi from pydantic import basemodel class itembasemodel name str description str none none app fastapi router apirouter router putitemsitemid def traceitemitemid str return none app includerouterrouter onevent is deprecated use lifespan event handlers instead read more about it in the fastapi docs for lifespan eventshttps fastapi tiangolo comadvancedevents the type of event startup or shutdown add an event handler for the router onevent is deprecated use lifespan event handlers instead read more about it in the fastapi docs for lifespan eventshttps fastapi tiangolo comadvancedeventsalternativeeventsdeprecated noqa type ignore attr defined let from_orm extract the data from this model instead of converting it now to a dict otherwise there s no way to extract lazy data that requires attribute access instead of dict iteration e g lazy relationships pydantic v1 only called by get_request_handler has been split into its own function to facilitate profiling endpoints since inner functions are harder to profile if status_code was set use it otherwise use the default from the response class in the case of redirect it s 307 normalize enums e g http httpstatus create a clone of the field so that a pydantic submodel is not returned as is just because it s an instance of a subclass of a more limited class e g userindb containing hashed_password could be a subclass of user that doesn t have the hashed_password but because it s a subclass it would pass the validation and be returned as is by being a new field no inheritance will be passed as is a new model will always be created todo remove when deprecating pydantic v1 type ignore if a form feed character page break is found in the description text truncate description text to the content preceding the first form feed apirouter class used to group path operations for example to structure an app in multiple files it would then be included in the fastapi app or in another apirouter ultimately included in the app read more about it in the fastapi docs for bigger applications multiple files https fastapi tiangolo com tutorial bigger applications example python from fastapi import apirouter fastapi app fastapi router apirouter router get users tags users async def read_users return username rick username morty app include_router router a list of tags to be applied to all the path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a list of dependencies using depends to be applied to all the path operations in this router read more about it in the fastapi docs for bigger applications multiple files https fastapi tiangolo com tutorial bigger applications include an apirouter with a custom prefix tags responses and dependencies the default response class to be used read more in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response default response class additional responses to be shown in openapi it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for additional responses in openapi https fastapi tiangolo com advanced additional responses and in the fastapi docs for bigger applications https fastapi tiangolo com tutorial bigger applications include an apirouter with a custom prefix tags responses and dependencies openapi callbacks that should apply to all path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks note you probably shouldn t use this parameter it is inherited from starlette and supported for compatibility a list of routes to serve incoming http and websocket requests you normally wouldn t use this parameter with fastapi it is inherited from starlette and supported for compatibility in fastapi you normally would use the path operation methods like router get router post etc whether to detect and redirect slashes in urls when the client doesn t use the same format default function handler for this router used to handle 404 not found errors only used internally by fastapi to handle dependency overrides you shouldn t need to use it it normally points to the fastapi app object custom route path operation class to be used by this router read more about it in the fastapi docs for custom request and apiroute class https fastapi tiangolo com how to custom request and route custom apiroute class in a router a list of startup event handler functions you should instead use the lifespan handlers read more in the fastapi docs for lifespan https fastapi tiangolo com advanced events a list of shutdown event handler functions you should instead use the lifespan handlers read more in the fastapi docs for lifespan https fastapi tiangolo com advanced events the generic to lifespan apptype is the type of the top level application which the router cannot know statically so we use typing any a lifespan context manager handler this replaces startup and shutdown functions with a single context manager read more in the fastapi docs for lifespan https fastapi tiangolo com advanced events mark all path operations in this router as deprecated it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration to include or not all the path operations in this router in the generated openapi this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function websocket path a name for the websocket only used internally a list of dependencies using depends to be used for this websocket read more about it in the fastapi docs for websockets https fastapi tiangolo com advanced websockets decorate a websocket function read more about it in the fastapi docs for websockets https fastapi tiangolo com advanced websockets example example python from fastapi import apirouter fastapi websocket app fastapi router apirouter router websocket ws async def websocket_endpoint websocket websocket await websocket accept while true data await websocket receive_text await websocket send_text f message text was data app include_router router a list of tags to be applied to all the path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a list of dependencies using depends to be applied to all the path operations in this router read more about it in the fastapi docs for bigger applications multiple files https fastapi tiangolo com tutorial bigger applications include an apirouter with a custom prefix tags responses and dependencies the default response class to be used read more in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response default response class additional responses to be shown in openapi it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for additional responses in openapi https fastapi tiangolo com advanced additional responses and in the fastapi docs for bigger applications https fastapi tiangolo com tutorial bigger applications include an apirouter with a custom prefix tags responses and dependencies openapi callbacks that should apply to all path operations in this router it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks mark all path operations in this router as deprecated it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration include or not all the path operations in this router in the generated openapi schema this affects the generated openapi e g visible at docs customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function include another apirouter in the same current apirouter read more about it in the fastapi docs for bigger applications https fastapi tiangolo com tutorial bigger applications example python from fastapi import apirouter fastapi app fastapi internal_router apirouter users_router apirouter users_router get users def read_users return name rick name morty internal_router include_router users_router app include_router internal_router noqa b009 the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http get operation example python from fastapi import apirouter fastapi app fastapi router apirouter router get items def read_items return name empanada name arepa app include_router router the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http put operation example python from fastapi import apirouter fastapi from pydantic import basemodel class item basemodel name str description str none none app fastapi router apirouter router put items item_id def replace_item item_id str item item return message item replaced id item_id app include_router router the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http post operation example python from fastapi import apirouter fastapi from pydantic import basemodel class item basemodel name str description str none none app fastapi router apirouter router post items def create_item item item return message item created app include_router router the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http delete operation example python from fastapi import apirouter fastapi app fastapi router apirouter router delete items item_id def delete_item item_id str return message item deleted app include_router router the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http options operation example python from fastapi import apirouter fastapi app fastapi router apirouter router options items def get_item_options return additions aji guacamole app include_router router the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http head operation example python from fastapi import apirouter fastapi from pydantic import basemodel class item basemodel name str description str none none app fastapi router apirouter router head items status_code 204 def get_items_headers response response response headers x cat dog alone in the world app include_router router the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http patch operation example python from fastapi import apirouter fastapi from pydantic import basemodel class item basemodel name str description str none none app fastapi router apirouter router patch items def update_item item item return message item updated in place app include_router router the url path to be used for this path operation for example in http example com items the path is items the type to use for the response it could be any valid pydantic field type so it doesn t have to be a pydantic model it could be other things like a list dict etc it will be used for documentation the generated openapi and the ui at docs will show it as the response json schema serialization you could return an arbitrary object and the response_model would be used to serialize that object into the corresponding json filtering the json sent to the client will only contain the data fields defined in the response_model if you returned an object that contains an attribute password but the response_model does not include that field the json sent to the client would not have that password validation whatever you return will be serialized with the response_model converting any data as necessary to generate the corresponding json but if the data in the object returned is not valid that would mean a violation of the contract with the client so it s an error from the api developer so fastapi will raise an error and return a 500 error code internal server error read more about it in the fastapi docs for response model https fastapi tiangolo com tutorial response model the default status code to be used for the response you could override the status code by returning a response directly read more about it in the fastapi docs for response status code https fastapi tiangolo com tutorial response status code a list of tags to be applied to the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration tags a list of dependencies using depends to be applied to the path operation read more about it in the fastapi docs for dependencies in path operation decorators https fastapi tiangolo com tutorial dependencies dependencies in path operation decorators a summary for the path operation it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration a description for the path operation if not provided it will be extracted automatically from the docstring of the path operation function it can contain markdown it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for path operation configuration https fastapi tiangolo com tutorial path operation configuration the description for the default response it will be added to the generated openapi e g visible at docs additional responses that could be returned by this path operation it will be added to the generated openapi e g visible at docs mark this path operation as deprecated it will be added to the generated openapi e g visible at docs custom operation id to be used by this path operation by default it is generated automatically if you provide a custom operation id you need to make sure it is unique for the whole api you can customize the operation id generation with the parameter generate_unique_id_function in the fastapi class read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function configuration passed to pydantic to include only certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to exclude certain fields in the response data read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response model should be serialized by alias when an alias is used read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_include and response_model_exclude configuration passed to pydantic to define if the response data should have all the fields including the ones that were not set and have their default values this is different from response_model_exclude_defaults in that if the fields are set they will be included in the response even if the value is the same as the default when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should have all the fields including the ones that have the same value as the default this is different from response_model_exclude_unset in that if the fields are set but contain the same default values they will be excluded from the response when true default values are omitted from the response read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model use the response_model_exclude_unset parameter configuration passed to pydantic to define if the response data should exclude fields set to none this is much simpler less smart than response_model_exclude_unset and response_model_exclude_defaults you probably want to use one of those two instead of this one as those allow returning none values when it makes sense read more about it in the fastapi docs for response model return type https fastapi tiangolo com tutorial response model response_model_exclude_none include this path operation in the generated openapi schema this affects the generated openapi e g visible at docs read more about it in the fastapi docs for query parameters and string validations https fastapi tiangolo com tutorial query params str validations exclude from openapi response class to be used for this path operation this will not be used if you return a response directly read more about it in the fastapi docs for custom response html stream file others https fastapi tiangolo com advanced custom response redirectresponse name for this path operation only used internally list of path operations that will be used as openapi callbacks this is only for openapi documentation the callbacks won t be used directly it will be added to the generated openapi e g visible at docs read more about it in the fastapi docs for openapi callbacks https fastapi tiangolo com advanced openapi callbacks extra metadata to be included in the openapi schema for this path operation read more about it in the fastapi docs for path operation advanced configuration https fastapi tiangolo com advanced path operation advanced configuration custom openapi path operation schema customize the function used to generate unique ids for the path operations shown in the generated openapi this is particularly useful when automatically generating clients or sdks for your api read more about it in the fastapi docs about how to generate clients https fastapi tiangolo com advanced generate clients custom generate unique id function add a path operation using an http trace operation example python from fastapi import apirouter fastapi from pydantic import basemodel class item basemodel name str description str none none app fastapi router apirouter router put items item_id def trace_item item_id str return none app include_router router on_event is deprecated use lifespan event handlers instead read more about it in the fastapi docs for lifespan events https fastapi tiangolo com advanced events the type of event startup or shutdown add an event handler for the router on_event is deprecated use lifespan event handlers instead read more about it in the fastapi docs for lifespan events https fastapi tiangolo com advanced events alternative events deprecated
import asyncio
import dataclasses
import email.message
import inspect
import json
from contextlib import AsyncExitStack
from enum import Enum, IntEnum
from typing import (
    Any,
    Callable,
    Coroutine,
    Dict,
    List,
    Optional,
    Sequence,
    Set,
    Tuple,
    Type,
    Union,
)

from fastapi import params
from fastapi._compat import (
    ModelField,
    Undefined,
    _get_model_config,
    _model_dump,
    _normalize_errors,
    lenient_issubclass,
)
from fastapi.datastructures import Default, DefaultPlaceholder
from fastapi.dependencies.models import Dependant
from fastapi.dependencies.utils import (
    get_body_field,
    get_dependant,
    get_parameterless_sub_dependant,
    get_typed_return_annotation,
    solve_dependencies,
)
from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import (
    FastAPIError,
    RequestValidationError,
    ResponseValidationError,
    WebSocketRequestValidationError,
)
from fastapi.types import DecoratedCallable, IncEx
from fastapi.utils import (
    create_cloned_field,
    create_response_field,
    generate_unique_id,
    get_value_or_default,
    is_body_allowed_for_status_code,
)
from pydantic import BaseModel
from starlette import routing
from starlette.concurrency import run_in_threadpool
from starlette.exceptions import HTTPException
from starlette.requests import Request
from starlette.responses import JSONResponse, Response
from starlette.routing import (
    BaseRoute,
    Match,
    compile_path,
    get_name,
    request_response,
    websocket_session,
)
from starlette.routing import Mount as Mount  
from starlette.types import ASGIApp, Lifespan, Scope
from starlette.websockets import WebSocket
from typing_extensions import Annotated, Doc, deprecated  


def _prepare_response_content(
    res: Any,
    *,
    exclude_unset: bool,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
) -> Any:
    if isinstance(res, BaseModel):
        read_with_orm_mode = getattr(_get_model_config(res), "read_with_orm_mode", None)
        if read_with_orm_mode:
            
            
            
            
            return res
        return _model_dump(
            res,
            by_alias=True,
            exclude_unset=exclude_unset,
            exclude_defaults=exclude_defaults,
            exclude_none=exclude_none,
        )
    elif isinstance(res, list):
        return [
            _prepare_response_content(
                item,
                exclude_unset=exclude_unset,
                exclude_defaults=exclude_defaults,
                exclude_none=exclude_none,
            )
            for item in res
        ]
    elif isinstance(res, dict):
        return {
            k: _prepare_response_content(
                v,
                exclude_unset=exclude_unset,
                exclude_defaults=exclude_defaults,
                exclude_none=exclude_none,
            )
            for k, v in res.items()
        }
    elif dataclasses.is_dataclass(res):
        return dataclasses.asdict(res)
    return res


async def serialize_response(
    *,
    field: Optional[ModelField] = None,
    response_content: Any,
    include: Optional[IncEx] = None,
    exclude: Optional[IncEx] = None,
    by_alias: bool = True,
    exclude_unset: bool = False,
    exclude_defaults: bool = False,
    exclude_none: bool = False,
    is_coroutine: bool = True,
) -> Any:
    if field:
        errors = []
        if not hasattr(field, "serialize"):
            
            response_content = _prepare_response_content(
                response_content,
                exclude_unset=exclude_unset,
                exclude_defaults=exclude_defaults,
                exclude_none=exclude_none,
            )
        if is_coroutine:
            value, errors_ = field.validate(response_content, {}, loc=("response",))
        else:
            value, errors_ = await run_in_threadpool(
                field.validate, response_content, {}, loc=("response",)
            )
        if isinstance(errors_, list):
            errors.extend(errors_)
        elif errors_:
            errors.append(errors_)
        if errors:
            raise ResponseValidationError(
                errors=_normalize_errors(errors), body=response_content
            )

        if hasattr(field, "serialize"):
            return field.serialize(
                value,
                include=include,
                exclude=exclude,
                by_alias=by_alias,
                exclude_unset=exclude_unset,
                exclude_defaults=exclude_defaults,
                exclude_none=exclude_none,
            )

        return jsonable_encoder(
            value,
            include=include,
            exclude=exclude,
            by_alias=by_alias,
            exclude_unset=exclude_unset,
            exclude_defaults=exclude_defaults,
            exclude_none=exclude_none,
        )
    else:
        return jsonable_encoder(response_content)


async def run_endpoint_function(
    *, dependant: Dependant, values: Dict[str, Any], is_coroutine: bool
) -> Any:
    
    
    assert dependant.call is not None, "dependant.call must be a function"

    if is_coroutine:
        return await dependant.call(**values)
    else:
        return await run_in_threadpool(dependant.call, **values)


def get_request_handler(
    dependant: Dependant,
    body_field: Optional[ModelField] = None,
    status_code: Optional[int] = None,
    response_class: Union[Type[Response], DefaultPlaceholder] = Default(JSONResponse),
    response_field: Optional[ModelField] = None,
    response_model_include: Optional[IncEx] = None,
    response_model_exclude: Optional[IncEx] = None,
    response_model_by_alias: bool = True,
    response_model_exclude_unset: bool = False,
    response_model_exclude_defaults: bool = False,
    response_model_exclude_none: bool = False,
    dependency_overrides_provider: Optional[Any] = None,
) -> Callable[[Request], Coroutine[Any, Any, Response]]:
    assert dependant.call is not None, "dependant.call must be a function"
    is_coroutine = asyncio.iscoroutinefunction(dependant.call)
    is_body_form = body_field and isinstance(body_field.field_info, params.Form)
    if isinstance(response_class, DefaultPlaceholder):
        actual_response_class: Type[Response] = response_class.value
    else:
        actual_response_class = response_class

    async def app(request: Request) -> Response:
        try:
            body: Any = None
            if body_field:
                if is_body_form:
                    body = await request.form()
                    stack = request.scope.get("fastapi_astack")
                    assert isinstance(stack, AsyncExitStack)
                    stack.push_async_callback(body.close)
                else:
                    body_bytes = await request.body()
                    if body_bytes:
                        json_body: Any = Undefined
                        content_type_value = request.headers.get("content-type")
                        if not content_type_value:
                            json_body = await request.json()
                        else:
                            message = email.message.Message()
                            message["content-type"] = content_type_value
                            if message.get_content_maintype() == "application":
                                subtype = message.get_content_subtype()
                                if subtype == "json" or subtype.endswith("+json"):
                                    json_body = await request.json()
                        if json_body != Undefined:
                            body = json_body
                        else:
                            body = body_bytes
        except json.JSONDecodeError as e:
            raise RequestValidationError(
                [
                    {
                        "type": "json_invalid",
                        "loc": ("body", e.pos),
                        "msg": "JSON decode error",
                        "input": {},
                        "ctx": {"error": e.msg},
                    }
                ],
                body=e.doc,
            ) from e
        except HTTPException:
            raise
        except Exception as e:
            raise HTTPException(
                status_code=400, detail="There was an error parsing the body"
            ) from e
        solved_result = await solve_dependencies(
            request=request,
            dependant=dependant,
            body=body,
            dependency_overrides_provider=dependency_overrides_provider,
        )
        values, errors, background_tasks, sub_response, _ = solved_result
        if errors:
            raise RequestValidationError(_normalize_errors(errors), body=body)
        else:
            raw_response = await run_endpoint_function(
                dependant=dependant, values=values, is_coroutine=is_coroutine
            )

            if isinstance(raw_response, Response):
                if raw_response.background is None:
                    raw_response.background = background_tasks
                return raw_response
            response_args: Dict[str, Any] = {"background": background_tasks}
            
            
            current_status_code = (
                status_code if status_code else sub_response.status_code
            )
            if current_status_code is not None:
                response_args["status_code"] = current_status_code
            if sub_response.status_code:
                response_args["status_code"] = sub_response.status_code
            content = await serialize_response(
                field=response_field,
                response_content=raw_response,
                include=response_model_include,
                exclude=response_model_exclude,
                by_alias=response_model_by_alias,
                exclude_unset=response_model_exclude_unset,
                exclude_defaults=response_model_exclude_defaults,
                exclude_none=response_model_exclude_none,
                is_coroutine=is_coroutine,
            )
            response = actual_response_class(content, **response_args)
            if not is_body_allowed_for_status_code(response.status_code):
                response.body = b""
            response.headers.raw.extend(sub_response.headers.raw)
            return response

    return app


def get_websocket_app(
    dependant: Dependant, dependency_overrides_provider: Optional[Any] = None
) -> Callable[[WebSocket], Coroutine[Any, Any, Any]]:
    async def app(websocket: WebSocket) -> None:
        solved_result = await solve_dependencies(
            request=websocket,
            dependant=dependant,
            dependency_overrides_provider=dependency_overrides_provider,
        )
        values, errors, _, _2, _3 = solved_result
        if errors:
            raise WebSocketRequestValidationError(_normalize_errors(errors))
        assert dependant.call is not None, "dependant.call must be a function"
        await dependant.call(**values)

    return app


class APIWebSocketRoute(routing.WebSocketRoute):
    def __init__(
        self,
        path: str,
        endpoint: Callable[..., Any],
        *,
        name: Optional[str] = None,
        dependencies: Optional[Sequence[params.Depends]] = None,
        dependency_overrides_provider: Optional[Any] = None,
    ) -> None:
        self.path = path
        self.endpoint = endpoint
        self.name = get_name(endpoint) if name is None else name
        self.dependencies = list(dependencies or [])
        self.path_regex, self.path_format, self.param_convertors = compile_path(path)
        self.dependant = get_dependant(path=self.path_format, call=self.endpoint)
        for depends in self.dependencies[::-1]:
            self.dependant.dependencies.insert(
                0,
                get_parameterless_sub_dependant(depends=depends, path=self.path_format),
            )

        self.app = websocket_session(
            get_websocket_app(
                dependant=self.dependant,
                dependency_overrides_provider=dependency_overrides_provider,
            )
        )

    def matches(self, scope: Scope) -> Tuple[Match, Scope]:
        match, child_scope = super().matches(scope)
        if match != Match.NONE:
            child_scope["route"] = self
        return match, child_scope


class APIRoute(routing.Route):
    def __init__(
        self,
        path: str,
        endpoint: Callable[..., Any],
        *,
        response_model: Any = Default(None),
        status_code: Optional[int] = None,
        tags: Optional[List[Union[str, Enum]]] = None,
        dependencies: Optional[Sequence[params.Depends]] = None,
        summary: Optional[str] = None,
        description: Optional[str] = None,
        response_description: str = "Successful Response",
        responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
        deprecated: Optional[bool] = None,
        name: Optional[str] = None,
        methods: Optional[Union[Set[str], List[str]]] = None,
        operation_id: Optional[str] = None,
        response_model_include: Optional[IncEx] = None,
        response_model_exclude: Optional[IncEx] = None,
        response_model_by_alias: bool = True,
        response_model_exclude_unset: bool = False,
        response_model_exclude_defaults: bool = False,
        response_model_exclude_none: bool = False,
        include_in_schema: bool = True,
        response_class: Union[Type[Response], DefaultPlaceholder] = Default(
            JSONResponse
        ),
        dependency_overrides_provider: Optional[Any] = None,
        callbacks: Optional[List[BaseRoute]] = None,
        openapi_extra: Optional[Dict[str, Any]] = None,
        generate_unique_id_function: Union[
            Callable[["APIRoute"], str], DefaultPlaceholder
        ] = Default(generate_unique_id),
    ) -> None:
        self.path = path
        self.endpoint = endpoint
        if isinstance(response_model, DefaultPlaceholder):
            return_annotation = get_typed_return_annotation(endpoint)
            if lenient_issubclass(return_annotation, Response):
                response_model = None
            else:
                response_model = return_annotation
        self.response_model = response_model
        self.summary = summary
        self.response_description = response_description
        self.deprecated = deprecated
        self.operation_id = operation_id
        self.response_model_include = response_model_include
        self.response_model_exclude = response_model_exclude
        self.response_model_by_alias = response_model_by_alias
        self.response_model_exclude_unset = response_model_exclude_unset
        self.response_model_exclude_defaults = response_model_exclude_defaults
        self.response_model_exclude_none = response_model_exclude_none
        self.include_in_schema = include_in_schema
        self.response_class = response_class
        self.dependency_overrides_provider = dependency_overrides_provider
        self.callbacks = callbacks
        self.openapi_extra = openapi_extra
        self.generate_unique_id_function = generate_unique_id_function
        self.tags = tags or []
        self.responses = responses or {}
        self.name = get_name(endpoint) if name is None else name
        self.path_regex, self.path_format, self.param_convertors = compile_path(path)
        if methods is None:
            methods = ["GET"]
        self.methods: Set[str] = {method.upper() for method in methods}
        if isinstance(generate_unique_id_function, DefaultPlaceholder):
            current_generate_unique_id: Callable[
                ["APIRoute"], str
            ] = generate_unique_id_function.value
        else:
            current_generate_unique_id = generate_unique_id_function
        self.unique_id = self.operation_id or current_generate_unique_id(self)
        
        if isinstance(status_code, IntEnum):
            status_code = int(status_code)
        self.status_code = status_code
        if self.response_model:
            assert is_body_allowed_for_status_code(
                status_code
            ), f"Status code {status_code} must not have a response body"
            response_name = "Response_" + self.unique_id
            self.response_field = create_response_field(
                name=response_name,
                type_=self.response_model,
                mode="serialization",
            )
            
            
            
            
            
            
            
            
            self.secure_cloned_response_field: Optional[
                ModelField
            ] = create_cloned_field(self.response_field)
        else:
            self.response_field = None  
            self.secure_cloned_response_field = None
        self.dependencies = list(dependencies or [])
        self.description = description or inspect.cleandoc(self.endpoint.__doc__ or "")
        
        
        self.description = self.description.split("\f")[0].strip()
        response_fields = {}
        for additional_status_code, response in self.responses.items():
            assert isinstance(response, dict), "An additional response must be a dict"
            model = response.get("model")
            if model:
                assert is_body_allowed_for_status_code(
                    additional_status_code
                ), f"Status code {additional_status_code} must not have a response body"
                response_name = f"Response_{additional_status_code}_{self.unique_id}"
                response_field = create_response_field(name=response_name, type_=model)
                response_fields[additional_status_code] = response_field
        if response_fields:
            self.response_fields: Dict[Union[int, str], ModelField] = response_fields
        else:
            self.response_fields = {}

        assert callable(endpoint), "An endpoint must be a callable"
        self.dependant = get_dependant(path=self.path_format, call=self.endpoint)
        for depends in self.dependencies[::-1]:
            self.dependant.dependencies.insert(
                0,
                get_parameterless_sub_dependant(depends=depends, path=self.path_format),
            )
        self.body_field = get_body_field(dependant=self.dependant, name=self.unique_id)
        self.app = request_response(self.get_route_handler())

    def get_route_handler(self) -> Callable[[Request], Coroutine[Any, Any, Response]]:
        return get_request_handler(
            dependant=self.dependant,
            body_field=self.body_field,
            status_code=self.status_code,
            response_class=self.response_class,
            response_field=self.secure_cloned_response_field,
            response_model_include=self.response_model_include,
            response_model_exclude=self.response_model_exclude,
            response_model_by_alias=self.response_model_by_alias,
            response_model_exclude_unset=self.response_model_exclude_unset,
            response_model_exclude_defaults=self.response_model_exclude_defaults,
            response_model_exclude_none=self.response_model_exclude_none,
            dependency_overrides_provider=self.dependency_overrides_provider,
        )

    def matches(self, scope: Scope) -> Tuple[Match, Scope]:
        match, child_scope = super().matches(scope)
        if match != Match.NONE:
            child_scope["route"] = self
        return match, child_scope


class APIRouter(routing.Router):
    

    def __init__(
        self,
        *,
        prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "",
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        default_response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        routes: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
            deprecated(
                
            ),
        ] = None,
        redirect_slashes: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        default: Annotated[
            Optional[ASGIApp],
            Doc(
                
            ),
        ] = None,
        dependency_overrides_provider: Annotated[
            Optional[Any],
            Doc(
                
            ),
        ] = None,
        route_class: Annotated[
            Type[APIRoute],
            Doc(
                
            ),
        ] = APIRoute,
        on_startup: Annotated[
            Optional[Sequence[Callable[[], Any]]],
            Doc(
                
            ),
        ] = None,
        on_shutdown: Annotated[
            Optional[Sequence[Callable[[], Any]]],
            Doc(
                
            ),
        ] = None,
        
        
        lifespan: Annotated[
            Optional[Lifespan[Any]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> None:
        super().__init__(
            routes=routes,
            redirect_slashes=redirect_slashes,
            default=default,
            on_startup=on_startup,
            on_shutdown=on_shutdown,
            lifespan=lifespan,
        )
        if prefix:
            assert prefix.startswith("/"), "A path prefix must start with '/'"
            assert not prefix.endswith(
                "/"
            ), "A path prefix must not end with '/', as the routes will start with '/'"
        self.prefix = prefix
        self.tags: List[Union[str, Enum]] = tags or []
        self.dependencies = list(dependencies or [])
        self.deprecated = deprecated
        self.include_in_schema = include_in_schema
        self.responses = responses or {}
        self.callbacks = callbacks or []
        self.dependency_overrides_provider = dependency_overrides_provider
        self.route_class = route_class
        self.default_response_class = default_response_class
        self.generate_unique_id_function = generate_unique_id_function

    def route(
        self,
        path: str,
        methods: Optional[List[str]] = None,
        name: Optional[str] = None,
        include_in_schema: bool = True,
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
            self.add_route(
                path,
                func,
                methods=methods,
                name=name,
                include_in_schema=include_in_schema,
            )
            return func

        return decorator

    def add_api_route(
        self,
        path: str,
        endpoint: Callable[..., Any],
        *,
        response_model: Any = Default(None),
        status_code: Optional[int] = None,
        tags: Optional[List[Union[str, Enum]]] = None,
        dependencies: Optional[Sequence[params.Depends]] = None,
        summary: Optional[str] = None,
        description: Optional[str] = None,
        response_description: str = "Successful Response",
        responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
        deprecated: Optional[bool] = None,
        methods: Optional[Union[Set[str], List[str]]] = None,
        operation_id: Optional[str] = None,
        response_model_include: Optional[IncEx] = None,
        response_model_exclude: Optional[IncEx] = None,
        response_model_by_alias: bool = True,
        response_model_exclude_unset: bool = False,
        response_model_exclude_defaults: bool = False,
        response_model_exclude_none: bool = False,
        include_in_schema: bool = True,
        response_class: Union[Type[Response], DefaultPlaceholder] = Default(
            JSONResponse
        ),
        name: Optional[str] = None,
        route_class_override: Optional[Type[APIRoute]] = None,
        callbacks: Optional[List[BaseRoute]] = None,
        openapi_extra: Optional[Dict[str, Any]] = None,
        generate_unique_id_function: Union[
            Callable[[APIRoute], str], DefaultPlaceholder
        ] = Default(generate_unique_id),
    ) -> None:
        route_class = route_class_override or self.route_class
        responses = responses or {}
        combined_responses = {**self.responses, **responses}
        current_response_class = get_value_or_default(
            response_class, self.default_response_class
        )
        current_tags = self.tags.copy()
        if tags:
            current_tags.extend(tags)
        current_dependencies = self.dependencies.copy()
        if dependencies:
            current_dependencies.extend(dependencies)
        current_callbacks = self.callbacks.copy()
        if callbacks:
            current_callbacks.extend(callbacks)
        current_generate_unique_id = get_value_or_default(
            generate_unique_id_function, self.generate_unique_id_function
        )
        route = route_class(
            self.prefix + path,
            endpoint=endpoint,
            response_model=response_model,
            status_code=status_code,
            tags=current_tags,
            dependencies=current_dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=combined_responses,
            deprecated=deprecated or self.deprecated,
            methods=methods,
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema and self.include_in_schema,
            response_class=current_response_class,
            name=name,
            dependency_overrides_provider=self.dependency_overrides_provider,
            callbacks=current_callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=current_generate_unique_id,
        )
        self.routes.append(route)

    def api_route(
        self,
        path: str,
        *,
        response_model: Any = Default(None),
        status_code: Optional[int] = None,
        tags: Optional[List[Union[str, Enum]]] = None,
        dependencies: Optional[Sequence[params.Depends]] = None,
        summary: Optional[str] = None,
        description: Optional[str] = None,
        response_description: str = "Successful Response",
        responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
        deprecated: Optional[bool] = None,
        methods: Optional[List[str]] = None,
        operation_id: Optional[str] = None,
        response_model_include: Optional[IncEx] = None,
        response_model_exclude: Optional[IncEx] = None,
        response_model_by_alias: bool = True,
        response_model_exclude_unset: bool = False,
        response_model_exclude_defaults: bool = False,
        response_model_exclude_none: bool = False,
        include_in_schema: bool = True,
        response_class: Type[Response] = Default(JSONResponse),
        name: Optional[str] = None,
        callbacks: Optional[List[BaseRoute]] = None,
        openapi_extra: Optional[Dict[str, Any]] = None,
        generate_unique_id_function: Callable[[APIRoute], str] = Default(
            generate_unique_id
        ),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
            self.add_api_route(
                path,
                func,
                response_model=response_model,
                status_code=status_code,
                tags=tags,
                dependencies=dependencies,
                summary=summary,
                description=description,
                response_description=response_description,
                responses=responses,
                deprecated=deprecated,
                methods=methods,
                operation_id=operation_id,
                response_model_include=response_model_include,
                response_model_exclude=response_model_exclude,
                response_model_by_alias=response_model_by_alias,
                response_model_exclude_unset=response_model_exclude_unset,
                response_model_exclude_defaults=response_model_exclude_defaults,
                response_model_exclude_none=response_model_exclude_none,
                include_in_schema=include_in_schema,
                response_class=response_class,
                name=name,
                callbacks=callbacks,
                openapi_extra=openapi_extra,
                generate_unique_id_function=generate_unique_id_function,
            )
            return func

        return decorator

    def add_api_websocket_route(
        self,
        path: str,
        endpoint: Callable[..., Any],
        name: Optional[str] = None,
        *,
        dependencies: Optional[Sequence[params.Depends]] = None,
    ) -> None:
        current_dependencies = self.dependencies.copy()
        if dependencies:
            current_dependencies.extend(dependencies)

        route = APIWebSocketRoute(
            self.prefix + path,
            endpoint=endpoint,
            name=name,
            dependencies=current_dependencies,
            dependency_overrides_provider=self.dependency_overrides_provider,
        )
        self.routes.append(route)

    def websocket(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        *,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        

        def decorator(func: DecoratedCallable) -> DecoratedCallable:
            self.add_api_websocket_route(
                path, func, name=name, dependencies=dependencies
            )
            return func

        return decorator

    def websocket_route(
        self, path: str, name: Union[str, None] = None
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        def decorator(func: DecoratedCallable) -> DecoratedCallable:
            self.add_websocket_route(path, func, name=name)
            return func

        return decorator

    def include_router(
        self,
        router: Annotated["APIRouter", Doc("The `APIRouter` to include.")],
        *,
        prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "",
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        default_response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> None:
        
        if prefix:
            assert prefix.startswith("/"), "A path prefix must start with '/'"
            assert not prefix.endswith(
                "/"
            ), "A path prefix must not end with '/', as the routes will start with '/'"
        else:
            for r in router.routes:
                path = getattr(r, "path")  
                name = getattr(r, "name", "unknown")
                if path is not None and not path:
                    raise FastAPIError(
                        f"Prefix and path cannot be both empty (path operation: {name})"
                    )
        if responses is None:
            responses = {}
        for route in router.routes:
            if isinstance(route, APIRoute):
                combined_responses = {**responses, **route.responses}
                use_response_class = get_value_or_default(
                    route.response_class,
                    router.default_response_class,
                    default_response_class,
                    self.default_response_class,
                )
                current_tags = []
                if tags:
                    current_tags.extend(tags)
                if route.tags:
                    current_tags.extend(route.tags)
                current_dependencies: List[params.Depends] = []
                if dependencies:
                    current_dependencies.extend(dependencies)
                if route.dependencies:
                    current_dependencies.extend(route.dependencies)
                current_callbacks = []
                if callbacks:
                    current_callbacks.extend(callbacks)
                if route.callbacks:
                    current_callbacks.extend(route.callbacks)
                current_generate_unique_id = get_value_or_default(
                    route.generate_unique_id_function,
                    router.generate_unique_id_function,
                    generate_unique_id_function,
                    self.generate_unique_id_function,
                )
                self.add_api_route(
                    prefix + route.path,
                    route.endpoint,
                    response_model=route.response_model,
                    status_code=route.status_code,
                    tags=current_tags,
                    dependencies=current_dependencies,
                    summary=route.summary,
                    description=route.description,
                    response_description=route.response_description,
                    responses=combined_responses,
                    deprecated=route.deprecated or deprecated or self.deprecated,
                    methods=route.methods,
                    operation_id=route.operation_id,
                    response_model_include=route.response_model_include,
                    response_model_exclude=route.response_model_exclude,
                    response_model_by_alias=route.response_model_by_alias,
                    response_model_exclude_unset=route.response_model_exclude_unset,
                    response_model_exclude_defaults=route.response_model_exclude_defaults,
                    response_model_exclude_none=route.response_model_exclude_none,
                    include_in_schema=route.include_in_schema
                    and self.include_in_schema
                    and include_in_schema,
                    response_class=use_response_class,
                    name=route.name,
                    route_class_override=type(route),
                    callbacks=current_callbacks,
                    openapi_extra=route.openapi_extra,
                    generate_unique_id_function=current_generate_unique_id,
                )
            elif isinstance(route, routing.Route):
                methods = list(route.methods or [])
                self.add_route(
                    prefix + route.path,
                    route.endpoint,
                    methods=methods,
                    include_in_schema=route.include_in_schema,
                    name=route.name,
                )
            elif isinstance(route, APIWebSocketRoute):
                current_dependencies = []
                if dependencies:
                    current_dependencies.extend(dependencies)
                if route.dependencies:
                    current_dependencies.extend(route.dependencies)
                self.add_api_websocket_route(
                    prefix + route.path,
                    route.endpoint,
                    dependencies=current_dependencies,
                    name=route.name,
                )
            elif isinstance(route, routing.WebSocketRoute):
                self.add_websocket_route(
                    prefix + route.path, route.endpoint, name=route.name
                )
        for handler in router.on_startup:
            self.add_event_handler("startup", handler)
        for handler in router.on_shutdown:
            self.add_event_handler("shutdown", handler)

    def get(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["GET"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    def put(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["PUT"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    def post(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["POST"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    def delete(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["DELETE"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    def options(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["OPTIONS"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    def head(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["HEAD"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    def patch(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["PATCH"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    def trace(
        self,
        path: Annotated[
            str,
            Doc(
                
            ),
        ],
        *,
        response_model: Annotated[
            Any,
            Doc(
                
            ),
        ] = Default(None),
        status_code: Annotated[
            Optional[int],
            Doc(
                
            ),
        ] = None,
        tags: Annotated[
            Optional[List[Union[str, Enum]]],
            Doc(
                
            ),
        ] = None,
        dependencies: Annotated[
            Optional[Sequence[params.Depends]],
            Doc(
                
            ),
        ] = None,
        summary: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        description: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_description: Annotated[
            str,
            Doc(
                
            ),
        ] = "Successful Response",
        responses: Annotated[
            Optional[Dict[Union[int, str], Dict[str, Any]]],
            Doc(
                
            ),
        ] = None,
        deprecated: Annotated[
            Optional[bool],
            Doc(
                
            ),
        ] = None,
        operation_id: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        response_model_include: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_exclude: Annotated[
            Optional[IncEx],
            Doc(
                
            ),
        ] = None,
        response_model_by_alias: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_model_exclude_unset: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_defaults: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        response_model_exclude_none: Annotated[
            bool,
            Doc(
                
            ),
        ] = False,
        include_in_schema: Annotated[
            bool,
            Doc(
                
            ),
        ] = True,
        response_class: Annotated[
            Type[Response],
            Doc(
                
            ),
        ] = Default(JSONResponse),
        name: Annotated[
            Optional[str],
            Doc(
                
            ),
        ] = None,
        callbacks: Annotated[
            Optional[List[BaseRoute]],
            Doc(
                
            ),
        ] = None,
        openapi_extra: Annotated[
            Optional[Dict[str, Any]],
            Doc(
                
            ),
        ] = None,
        generate_unique_id_function: Annotated[
            Callable[[APIRoute], str],
            Doc(
                
            ),
        ] = Default(generate_unique_id),
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        
        return self.api_route(
            path=path,
            response_model=response_model,
            status_code=status_code,
            tags=tags,
            dependencies=dependencies,
            summary=summary,
            description=description,
            response_description=response_description,
            responses=responses,
            deprecated=deprecated,
            methods=["TRACE"],
            operation_id=operation_id,
            response_model_include=response_model_include,
            response_model_exclude=response_model_exclude,
            response_model_by_alias=response_model_by_alias,
            response_model_exclude_unset=response_model_exclude_unset,
            response_model_exclude_defaults=response_model_exclude_defaults,
            response_model_exclude_none=response_model_exclude_none,
            include_in_schema=include_in_schema,
            response_class=response_class,
            name=name,
            callbacks=callbacks,
            openapi_extra=openapi_extra,
            generate_unique_id_function=generate_unique_id_function,
        )

    @deprecated(
        
    )
    def on_event(
        self,
        event_type: Annotated[
            str,
            Doc(
                
            ),
        ],
    ) -> Callable[[DecoratedCallable], DecoratedCallable]:
        

        def decorator(func: DecoratedCallable) -> DecoratedCallable:
            self.add_event_handler(event_type, func)
            return func

        return decorator