Releases: dymmond/esmerald
Releases · dymmond/esmerald
Version 3.4.0
Added
- New ways of providing the request data allowing to pass a more complex body
using also the encoders. The complex body is explained
and how to achieve this result.
!!! Warning
This is an additional functionality to the existing one and it does not represent any replacement. Be sure
you read the documentation and if you understand it.
Example
As per some examples of the documentation:
from pydantic import BaseModel, EmailStr
from esmerald import Esmerald, Gateway, post
class User(BaseModel):
name: str
email: EmailStr
class Address(BaseModel):
street_name: str
post_code: str
@post("/create")
async def create_user(user: User, address: Address) -> None:
"""
Creates a user in the system and does not return anything.
Default status_code: 201
"""
app = Esmerald(routes=[Gateway(handler=create_user)])
You can expect to send a payload like this:
{
"user": {
"name": "John",
"email": "[email protected]",
},
"address": {
"street_name": "123 Queens Park",
"post_code": "90241"
}
}
More details can and must be read in the request data section.
Changed
- Overriding the
status_code
in any response is now possible directly by specifying the intended response and ignoring
the default from thehandler
.
Example
@get()
def create(name: Union[str, None]) -> Response:
if name is None:
return Response("Ok")
if name == "something":
return Response("Ok", status_code=status.HTTP_401_UNAUTHORIZED)
if name == "something-else":
return Response("Ok", status_code=status.HTTP_300_MULTIPLE_CHOICES)
If none of the conditions are met, then it will always default to the status_code
of the handler which in the get
case,
its 200
.
Fixed
- Internal parsing of the encoders for OpenAPI representation and removed unused code (deprecated).
Version 3.3.7
Added
- New application generator using
--context
allowing to generate application scaffolds containing
more complex structures.
Changed
- jinja2 templating is now 100% delegated to its base, Lilya.
- Added examples in the documentation for windows users.
Fixed
- Lookup for summary in the handler for OpenAPI.
Version 3.3.6
Added
allow_private_networks
property toCORSMiddleware
.
Changed
Gateway
now allows to pass also an optionaloperation_id
as parameter for OpenAPI documentation allowing
multiple gateways to use the same handler and being recognised automatically by OpenAPI documentation.- OpenAPI documentation when multiple gateways use the same handler and no
operation_id
is declared,
automatically tries to generate a uniqueoperation_id
for it. - Internal code organisation for class based
View
to generate the routes in one place and reducing
code duplication. - Updated internal testing requirements for Edgy and Saffier and Lilya.
Version 3.3.5
This was missed from the release 3.3.4 and it was supposed to be included.
Added
- Native types for Esmerald transformer models/
- Hashing list internally for the signature allowing lists to be declared for OpenAPI representation.
Changed
- Query parameters when declared as
list
,List
,dict
andDict
automatically parses the values
to the declared type. - OpenAPI understands the native types, objects and lists (arrays).
Version 3.3.4
Added
- Missing documentation for
Query Parameters
andPath Parameters
.
Changed
- Documentation for
Extra, Advanced && Useful
is now renamedAdvanced & Useful
and its located in theFeatures
section. - Removed unused internal functions for validations now used by Esmerald encoders.
Fixed
- Regression caused by the introduction of the dynamic encoders when diplaying the query parameters in the OpenAPI
documentation. - Annotation discovery for the Signature.
Version 3.3.3
Changed
- Internal implementation of the exceptions.
- Removed redundant exception declaration and delegate the internals to Lilya.
- Internal code cleaning.
Added
ValidationError
for custom independent raising exceptions within any Esmerald application
Fixed
is_server_error
for dependencies was causing an exception to be raised in aloc[-1]
.
Version 3.3.2
Changed
- Update the internals of contrib for Asyncz to match the new Asyncz specifications and API.
Version 3.3.1
Changed
- Automatic detection of a response for a default status code when using OpenAPI documentation.
- Addressing
from __future__ import annotation
when using the dependency injection defaulting to Any.
Version 3.3.0
Fixed
- Fixes
PydanticEncoder
when checking for subclasses ofBaseModel
causing the dependency injection to fail
for those specific types
Added
- Esmerald is ow using
python-slugify
instead ofawesome-slugify
for internals. - OpenAPI Schemas Pydantic is now fully integrated with Esmerald OpenAPI.
- Esmerald now supports
app
as decorator prodiving another way of declaring the routing.
Example
#!/usr/bin/env python
import uvicorn
from esmerald import Esmerald, Gateway, JSONResponse, Request, get
app = Esmerald()
@app.get("/esmerald")
def welcome() -> JSONResponse:
return JSONResponse({"message": "Welcome to Esmerald"})
@app.get("/esmerald/{user}")
def user(user: str) -> JSONResponse:
return JSONResponse({"message": f"Welcome to Esmerald, {user}"})
@app.get("/esmerald/in-request/{user}")
def user_in_request(request: Request) -> JSONResponse:
user = request.path_params["user"]
return JSONResponse({"message": f"Welcome to Esmerald, {user}"})
if __name__ == "__main__":
uvicorn.run(app, port=8000)
The same is also applied to the Router
object.
Version 3.2.7
Changed
- Removed unused middleware.
- Updated AppSettingsMiddleware for lazy loading
- Updated
globalise_settings
.
Fixed
- Performance issues caused by
AppSettingsModule
.