Metadata-Version: 2.4
Name: DefEssential
Version: 0.1.9
Summary: The Modern Synchronous Python Web Application Framework
Home-page: https://github.com/yong5eon/DefEssential
Author: Heo Yongseon
Project-URL: Source, https://github.com/yong5eon/DefEssential
Project-URL: Issues, https://github.com/yong5eon/DefEssential/issues
Project-URL: Releases, https://github.com/yong5eon/DefEssential/releases
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: gunicorn
Requires-Dist: gunicorn>=23; extra == "gunicorn"
Provides-Extra: uvicorn
Requires-Dist: uvicorn>=0.30; extra == "uvicorn"
Requires-Dist: a2wsgi>=1.10; extra == "uvicorn"
Dynamic: author
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license-file
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-python
Dynamic: summary

# DefEssential

The Modern Synchronous Python Web Application Framework

DefEssential is a synchronous Python web framework for handling HTTP requests with ordinary methods. Python 3.9 or later is required.

## Installation

```shell
python -m pip install DefEssential
```

The built-in Python HTTP server requires no additional server dependency. Optional extras provide Gunicorn and Uvicorn adapters:

```shell
python -m pip install "DefEssential[Gunicorn]"
python -m pip install "DefEssential[Uvicorn]"
```

## Quick start

Save this example as `app.py` and run `python app.py`.

```python
from DefEssential import Application, Request, RequestRunner
from DefEssential.Adapter.Implements.Python import Server
from DefEssential.Responses import ResponseText


class Hello(RequestRunner, method='GET', url='/hello'):
  def run(self, request: Request):
    return ResponseText('Hello, world!')


application = Application()
application.add(Hello)
Server('127.0.0.1', 8000, application).run()
```

The server listens on `127.0.0.1:8000`. A `GET /hello` request returns `Hello, world!`.

## License

See the `LICENSE` file included with the source distribution for license terms.
