- Bump actions/setup-python from 4 to 5 by @dependabot in #165
- Bump types-ujson from 5.8.0.1 to 5.9.0.0 by @dependabot in #164
- Bump uvicorn[standard] from 0.23.2 to 0.25.0 by @dependabot in #163
- Bump ruff from 0.1.7 to 0.1.9 by @dependabot in #162
- Async application context by @eadwinCode in #167
Full Changelog: https://github.com/python-ellar/ellar/compare/0.6.2...0.6.4
- Files System And File Mounting by @eadwinCode in #147
- 100% test coverage by @eadwinCode in #158
- App stack build on lifespan by @eadwinCode in #159
- Added support for Swagger Doc dark theme.
- Feat(LazyModuleImport): New feature by @eadwinCode in #155
- Feat - Lazy Loading ApplicationModule by @eadwinCode in #156
- code refactoring by @eadwinCode in #157
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.8...0.6.0
- Bump ruff from 0.1.4 to 0.1.6 by @dependabot in #152
- Bump types-redis from 4.6.0.8 to 4.6.0.11 by @dependabot in #153
- Bump black from 23.10.1 to 23.11.0 by @dependabot in #151
- Bump aiohttp from 3.8.5 to 3.9.1 by @dependabot in #150
- Pydantic v2 migration by @eadwinCode in #148
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.7...0.5.8
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.6...0.5.7
- fixed file data as bytes by @eadwinCode in #143
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.5...0.5.6
- fix file and form schema route function by @eadwinCode in #142
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.4...0.5.5
- Route Function Parameter Aliasing Bug Fix by @eadwinCode in #140
- file upload openapi doc fix by @eadwinCode in #141
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.3...0.5.4
- Fixed Auth And Core pkg Dependency by @eadwinCode in #139
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.2...0.5.3
- Bump ruff from 0.0.275 to 0.1.3 by @dependabot in #135
- Bump black from 23.9.1 to 23.10.1 by @dependabot in #136
- Bump types-redis from 4.6.0.5 to 4.6.0.8 by @dependabot in #133
- Bump mypy from 1.5.1 to 1.6.1 by @dependabot in #134
- Authentication Docs by @eadwinCode in #137
- OpenAPI module Refactor by @eadwinCode in #138
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.1...0.5.2
- Fix grammar error in dynamic-modules.md by @artemyfmv in #132
- Exception Docs Update by @eadwinCode in #131
- Bump black from 22.12.0 to 23.9.1 by @dependabot in #129
- Bump aiohttp from 3.8.4 to 3.8.5 by @dependabot in #113
- @artemyfmv made their first contribution in #132
Full Changelog: https://github.com/python-ellar/ellar/compare/0.5.0...0.5.1
- Bump uvicorn[standard] from 0.22.0 to 0.23.2 by @dependabot in #128
- Bump types-ujson from 5.8.0.0 to 5.8.0.1 by @dependabot in #127
- Bump actions/checkout from 3 to 4 by @dependabot in #126
- Route handlers dependencies type annotation support by @eadwinCode in #130
Full Changelog: https://github.com/python-ellar/ellar/compare/0.4.9...0.5.0
- fixed 400 error parsing body on windows by @eadwinCode in #125
Full Changelog: https://github.com/python-ellar/ellar/compare/0.4.8...0.4.9
- Libraries Bump up by @eadwinCode in #122
Full Changelog: https://github.com/python-ellar/ellar/compare/0.4.6...0.4.7
Full Changelog: https://github.com/python-ellar/ellar/compare/0.4.5...0.4.6
- Added auth example by @eadwinCode in #116
- MyPy Liniting Fix And Embedded Body by @eadwinCode in #117
- Moved authorization guard to interceptor by @eadwinCode in #117
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.4.4...0.4.5
- Documentation update by @eadwinCode in #102
- OPENAPI Refactor by @eadwinCode in #103
- Bump starlette from 0.27.0 to 0.28.0 by @dependabot in #105
- Expanding Sessions by @eadwinCode in #109
- Authentication and Authorization by @eadwinCode in #104
- Bump types-ujson from 5.7.0.5 to 5.8.0.0 by @dependabot in #107
- Ruff linting and mypy upgrade by @eadwinCode in #115
- Linting, MyPy Upgrade and Example fixes by @eadwinCode in #111
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.4.2...0.4.4
- Bump starlette from 0.26.1 to 0.27.0 by @dependabot in #97
- Update typer requirement from <0.8.0,>=0.6.1 to >=0.6.1,<0.10.0 by @dependabot in #96
- Bump uvicorn[standard] from 0.20.0 to 0.22.0 by @dependabot in #95
- Bump codecov/codecov-action from 3.1.3 to 3.1.4 by @dependabot in #94
- Config with prefix by @eadwinCode in #99
- Extended Lifespan to Module classes by @eadwinCode in #100
- Ellar Documentation Redesign by @eadwinCode in https://github.com/eadwinCode/ellar/pull/100/commits/7b5d60b149b6ad786b6bf682278e6d7fac83fd8e
- Fixed register_services not calling in modules by @eadwinCode in #101
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.4.0...0.4.2
- [BREAKING] Renamed Guards decorator to UseGuards decorator by @eadwinCode in #93
- Background Task Feature by @eadwinCode in #91 You can inject BackgroundTasks instance to you route handler
async def send_welcome_email(email):
print(f'Send Welcome Email Task Called with "{email}"')
@router.post('/signup')
def sign_up(username: str, password: str, email: str, tasks: BackgroundTasks):
tasks.add_task(send_welcome_email, email=email)
return {'status': 'Signup successful'}- EllarInterceptors by @eadwinCode in #92 Use of interceptors to add more custom implementation to your route handlers and controller as define by Aspect Oriented Programming (AOP) technique
@injectable
class ResponseModifierInterceptor(EllarInterceptor):
async def intercept(
self, context: IExecutionContext, next_interceptor: t.Callable[..., t.Coroutine]
) -> t.Any:
data = await next_interceptor()
if data:
data.update(ResponseModifierInterceptor="ResponseModifierInterceptor modified returned resulted")
return data
@Controller("")
class InterceptorControllerTest(ControllerBase):
@UseInterceptors(ResponseModifierInterceptor)
@get("/interceptor-1")
async def interceptor_1(self):
return {"message": "intercepted okay"}Full Changelog: https://github.com/eadwinCode/ellar/compare/0.3.8...0.4.0
- Socket IO integration and Websocket documentation by @eadwinCode in #82
- Bump codecov/codecov-action from 3.1.1 to 3.1.3 by @dependabot in #83
- Update email-validator requirement from <2.0.0,>=1.1.1 to >=1.1.1,<3.0.0 by @dependabot in #84
- Update mkdocs-material requirement from <9.0.0,>=7.1.9 to >=7.1.9,<10.0.0 by @dependabot in #86
- Bump types-ujson from 5.7.0.1 to 5.7.0.5 by @dependabot in #88
- ellar package dependency refactor by @eadwinCode in #89
- 0.3.8 by @eadwinCode in #90
- Breaking: any missing import from
ellar.corecan be found inellar.common
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.3.6...0.3.8
- Added doc on rate limiting by @eadwinCode in #74
- Guard Documentation by @eadwinCode in #64
- Dynamic Setup Fix by @eadwinCode in #75
- Versioning Documentation by @eadwinCode in #79
- Update python-multipart requirement from <0.0.6,>=0.0.5 to >=0.0.5,<0.0.7 by @dependabot in #66
- Bump types-ujson from 5.7.0.0 to 5.7.0.1 by @dependabot in #68
- Testing Documentation by @eadwinCode in #80
- Starlette Upgrade by @eadwinCode in #81
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.3.4...0.3.6
- Caching Featuring by @eadwinCode in #65
- Cache attributes update by @eadwinCode in #71
- Module Setup Feature by @eadwinCode in #73
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.3.2...0.3.4
- fix itsdangerous bug in session middleware by @eadwinCode in #63
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.3.0...0.3.2
- Bump black from 22.8.0 to 22.12.0 by @dependabot in #50
- Bump types-ujson from 0.1.1 to 5.6.0.0 by @dependabot in #49
- Update typer requirement from <0.7.0,>=0.6.1 to >=0.6.1,<0.8.0 by @dependabot in #40
- Removed ASGI args from contextvar by @eadwinCode in #53
- Document updates Jan 2023 by @eadwinCode in #54
- Injectable Class should be resolved at runtime without errors by @eadwinCode in #60
- More Doc Updates by @eadwinCode in #55
- Guards Refactor by @eadwinCode in #59
- restored commented tests by @eadwinCode in #61
- Bump starlette from 0.21.0 to 0.23.1 by @dependabot in #48
- Bump types-ujson from 5.6.0.0 to 5.7.0.0 by @dependabot in #58
- Bump types-dataclasses from 0.1.7 to 0.6.6 by @dependabot in #57
- Update flake8 requirement from <4.0.0,>=3.8.3 to >=3.8.3,<7.0.0 by @dependabot in #56
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.2.8...0.3.0
- Separated
IHostContextfromIExecutionContextand added factory class that manages their creation by @eadwinCode in #51 - Made Guards classes Injectable by @eadwinCode in #52
- Switched from
thread.localtoContextVarto managerequest_scopesproperly by @eadwinCode in #52 - Added Documentation for
ExecutionContext. - Increased test coverage.
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.2.6...0.2.8
- Documentation Updates by @eadwinCode in #43
- Reverted building routes from a single list to a list of routers with a well-managed route not found cross routes @eadwinCode in #43
- Python 3.11 Support by @eadwinCode in #44
- Changed ASCII drawing to the image by @eadwinCode in #45
- Added an
IExceptionHandlercontract for defining custom exception handler by @eadwinCode in #46. Doc - Dropped use for
BaseHTTPMiddlewarefrom Starlette and added aFunctionBasedMiddlewareby @eadwinCode in #47 - Added
filedecorator forFileResponseModelandStreamingResponseModelby @eadwinCode in #47
import asyncio
from ellar.common import ModuleRouter, file
async def slow_numbers(minimum: int, maximum: int):
yield ("<html><body><ul>")
for number in range(minimum, maximum + 1):
yield "<li>%d</li>" % number
await asyncio.sleep(0.01)
yield ("</ul></body></html>")
router = ModuleRouter('/file')
@router.get()
@file(media_type='text/html')
def file_download():
return {'path': 'path/to/file.html', 'filename': 'code.html', 'content_disposition_type': 'attachment'}
@router.get('/stream')
@file(media_type='text/html', streaming=True)
def file_stream():
return slow_numbers(1, 4)Full Changelog: https://github.com/eadwinCode/ellar/compare/0.2.4...0.2.6
- Update mkdocs-material requirement from <8.0.0,>=7.1.9 to >=7.1.9,<9.0.0 by @dependabot in #37
- Update pytest-cov requirement from <4.0.0,>=2.12.0 to >=2.12.0,<5.0.0 by @dependabot in #35
- Pydependencies upgrade by @eadwinCode in #32
- Bump types-orjson from 3.6.0 to 3.6.2 by @dependabot in #34
- Made CLI tool an optional requirement by @eadwinCode in #38
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.2.2...0.2.4
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.2.0...0.2.2
- Project dependency fix by @eadwinCode in #29
- Python 3.6 support ends here
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.1.8...0.2.0
- starlette dependencies fix by @eadwinCode in #28
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.1.6...0.1.8
- package stats update by @eadwinCode in #17
- fixed static package type by @eadwinCode in #18
- Doc Preparation by @eadwinCode in #19
- Moved Configuration From File To Class Based by @eadwinCode in #21
- Bump codecov/codecov-action from 3.1.0 to 3.1.1 by @dependabot in #25
- CLI Commands And Basic Project Scaffolding by @eadwinCode in #20
- Quick-Start Doc by @eadwinCode in #27
To scaffold ellar project
ellar create-project `project-name`To scaffold ellar app
ellar create-module `app-name`To start application server
ellar runserverFull Changelog: https://github.com/eadwinCode/ellar/compare/0.1.4...0.1.6
- Bump actions/setup-python from 3 to 4 by @dependabot in #8
- Starlette Class Renames by @eadwinCode in #9
- Common Package Testing by @eadwinCode in #10
- Constant Value All Caps by @eadwinCode in #11
- Openapi Module Test by @eadwinCode in #12
- Guard Module Testing by @eadwinCode in #13
- Configuration Module Test by @eadwinCode in #14
- App Test by @eadwinCode in #15
- AppFactory and TestClientFactory Test by @eadwinCode in #16
Full Changelog: https://github.com/eadwinCode/ellar/compare/0.1.2...0.1.4
- Refactored route operation functions @eadwinCode in #7
- Pydantic integration
- DI Container
- Templating with Jinja2
- OpenAPI Documentation (Swagger and ReDoc)
- Controller (MVC)
- Guards (Authentications, roles and permissions)
- Modularization (eg: flask blueprint)
- Websocket support
- Session and Cookie support
- CORS, GZip, Static Files, Streaming responses
- Test client built on requests
- In-process background tasks.
- Startup and shutdown events.
- Application Events
- @eadwinCode made their first contribution in #6