%global _empty_manifest_terminate_build 0 Name: python-django-openapi Version: 0.1.1.11 Release: 1 Summary: A minimal FastAPI implementation in python2 + Django without pydantic License: MIT License URL: https://github.com/tokikanno/django-openapi Source0: https://mirrors.aliyun.com/pypi/web/packages/3e/10/de2b06156083d22a531e602d9b9508ebaa7019baea5a71a1c5246791ce4f/django-openapi-0.1.1.11.tar.gz BuildArch: noarch Requires: python3-django Requires: python3-six %description # django-openapi A minimal FastAPI implementation in Python2 + Django without pydantic # Why do you make this? Can't you just use FastAPI directly? I'm a big fan of [FastAPI](https://fastapi.tiangolo.com/). It's elegant and saves lots of doc maintaince & API spec communication costs for me. But FastAPI needs Python3 to run, some legacy projects I maintained are still using Python2 and built by Django framework. It would take 2 migration steps (Python 2 to 3 and Django to FastAPI) for moving them onto FastAPI framework. So I decided to build a minimal FastAPI implementation in Python2 + Django, that I could instantly get the benefits from FastAPI without too many migrations on my legacy projects. # Who should use this? People who like the way FastAPI works but * Are still on the long migration process from Python2 to Python3 * Or don't want to do full system rewrite from Django to FastAPI * Or don't want to upgrade from Python2 to Python3 # Features * Auto OpenAPI schema/document generation from Python function parameter * Auto HTTP request parameter validation from Python function parameters * Python 2/3 compatiable, you could use almost the same code for you Python2/3 projects # Installation ``` pip install django-openapi ``` # Live demo provided by Gitpod Click the button below and launch a free live demo server via Gitpod [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/tokikanno/django-openapi) If the button doesn't show up, you clould also use below link directly [https://gitpod.io/#https://github.com/tokikanno/django-openapi](https://gitpod.io/#https://github.com/tokikanno/django-openapi) After Gitpod launched, if you see a dialog like this, just hit the `Open Browser` button then you will get to the quick intro live demo server. ![image](https://raw.githubusercontent.com/tokikanno/django-openapi/master/docs/images/gitpod-dialog.png) Use ctrl + p (or cmd + p if u're using MacOS X) and search for `intro.py` to see the source code of intro demo server. # Quick start ### In your Django project * Import `OpenAPI` from `django_openapi` * Create an API object instance * Add API object into urlpatterns ```python # import OpenAPI from django_opeanapi from django_openapi import OpenAPI # create an API object instance api = OpenAPI(title='My OpenAPI Test', prefix_path='/test_api') urlpatterns = [ api.as_django_url_pattern() # Add API object into urlpatterns ] ``` * Start you django debug server and open your browser with url like `http://localhost:8000/test_api/_docs`, this is the auto document page. * Now let's try adding some basic routes for you API ```python from django_openapi import Path, Query, Form @api.get('/test/hello_via_path/{word}', tags=['test']) def hello_via_path(word=Path()): return {'hello': word} @api.get('/test/hello_via_query', tags=['test']) def hello_via_query(word=Query()): return {'hello': word} @api.post('/test/hello_via_form', tags=['test']) def hello_via_form(word=Form()): return {'hello': word} ``` * Reload your browser & see if anything changed to the auto document page * Advanced routes via JSON body & JSON schema object ```python from django_openapi import Body from django_openapi.schema import BaseModel, StringField class HelloPayload(BaseModel): word = StringField(default_value='world', min_length=3) @api.post('/test/hello_via_json_body', tags=['test']) def hello_via_json_body(payload=Body(HelloPayload)): return {'hello': payload.word} ``` * Reload agagin, the auto document page now should have 4 APIs on it. ![image](https://raw.githubusercontent.com/tokikanno/django-openapi/master/docs/images/hello_app.png) Browse to the [demo folder](https://github.com/tokikanno/django-openapi/tree/master/demo) for more advanced samples. # TODO * More documents and samples * Better schema validation error message handling * More advanced field types (e.g.: EmailStringField, CommaSeparatedArrayField ...) %package -n python3-django-openapi Summary: A minimal FastAPI implementation in python2 + Django without pydantic Provides: python-django-openapi BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-django-openapi # django-openapi A minimal FastAPI implementation in Python2 + Django without pydantic # Why do you make this? Can't you just use FastAPI directly? I'm a big fan of [FastAPI](https://fastapi.tiangolo.com/). It's elegant and saves lots of doc maintaince & API spec communication costs for me. But FastAPI needs Python3 to run, some legacy projects I maintained are still using Python2 and built by Django framework. It would take 2 migration steps (Python 2 to 3 and Django to FastAPI) for moving them onto FastAPI framework. So I decided to build a minimal FastAPI implementation in Python2 + Django, that I could instantly get the benefits from FastAPI without too many migrations on my legacy projects. # Who should use this? People who like the way FastAPI works but * Are still on the long migration process from Python2 to Python3 * Or don't want to do full system rewrite from Django to FastAPI * Or don't want to upgrade from Python2 to Python3 # Features * Auto OpenAPI schema/document generation from Python function parameter * Auto HTTP request parameter validation from Python function parameters * Python 2/3 compatiable, you could use almost the same code for you Python2/3 projects # Installation ``` pip install django-openapi ``` # Live demo provided by Gitpod Click the button below and launch a free live demo server via Gitpod [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/tokikanno/django-openapi) If the button doesn't show up, you clould also use below link directly [https://gitpod.io/#https://github.com/tokikanno/django-openapi](https://gitpod.io/#https://github.com/tokikanno/django-openapi) After Gitpod launched, if you see a dialog like this, just hit the `Open Browser` button then you will get to the quick intro live demo server. ![image](https://raw.githubusercontent.com/tokikanno/django-openapi/master/docs/images/gitpod-dialog.png) Use ctrl + p (or cmd + p if u're using MacOS X) and search for `intro.py` to see the source code of intro demo server. # Quick start ### In your Django project * Import `OpenAPI` from `django_openapi` * Create an API object instance * Add API object into urlpatterns ```python # import OpenAPI from django_opeanapi from django_openapi import OpenAPI # create an API object instance api = OpenAPI(title='My OpenAPI Test', prefix_path='/test_api') urlpatterns = [ api.as_django_url_pattern() # Add API object into urlpatterns ] ``` * Start you django debug server and open your browser with url like `http://localhost:8000/test_api/_docs`, this is the auto document page. * Now let's try adding some basic routes for you API ```python from django_openapi import Path, Query, Form @api.get('/test/hello_via_path/{word}', tags=['test']) def hello_via_path(word=Path()): return {'hello': word} @api.get('/test/hello_via_query', tags=['test']) def hello_via_query(word=Query()): return {'hello': word} @api.post('/test/hello_via_form', tags=['test']) def hello_via_form(word=Form()): return {'hello': word} ``` * Reload your browser & see if anything changed to the auto document page * Advanced routes via JSON body & JSON schema object ```python from django_openapi import Body from django_openapi.schema import BaseModel, StringField class HelloPayload(BaseModel): word = StringField(default_value='world', min_length=3) @api.post('/test/hello_via_json_body', tags=['test']) def hello_via_json_body(payload=Body(HelloPayload)): return {'hello': payload.word} ``` * Reload agagin, the auto document page now should have 4 APIs on it. ![image](https://raw.githubusercontent.com/tokikanno/django-openapi/master/docs/images/hello_app.png) Browse to the [demo folder](https://github.com/tokikanno/django-openapi/tree/master/demo) for more advanced samples. # TODO * More documents and samples * Better schema validation error message handling * More advanced field types (e.g.: EmailStringField, CommaSeparatedArrayField ...) %package help Summary: Development documents and examples for django-openapi Provides: python3-django-openapi-doc %description help # django-openapi A minimal FastAPI implementation in Python2 + Django without pydantic # Why do you make this? Can't you just use FastAPI directly? I'm a big fan of [FastAPI](https://fastapi.tiangolo.com/). It's elegant and saves lots of doc maintaince & API spec communication costs for me. But FastAPI needs Python3 to run, some legacy projects I maintained are still using Python2 and built by Django framework. It would take 2 migration steps (Python 2 to 3 and Django to FastAPI) for moving them onto FastAPI framework. So I decided to build a minimal FastAPI implementation in Python2 + Django, that I could instantly get the benefits from FastAPI without too many migrations on my legacy projects. # Who should use this? People who like the way FastAPI works but * Are still on the long migration process from Python2 to Python3 * Or don't want to do full system rewrite from Django to FastAPI * Or don't want to upgrade from Python2 to Python3 # Features * Auto OpenAPI schema/document generation from Python function parameter * Auto HTTP request parameter validation from Python function parameters * Python 2/3 compatiable, you could use almost the same code for you Python2/3 projects # Installation ``` pip install django-openapi ``` # Live demo provided by Gitpod Click the button below and launch a free live demo server via Gitpod [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/tokikanno/django-openapi) If the button doesn't show up, you clould also use below link directly [https://gitpod.io/#https://github.com/tokikanno/django-openapi](https://gitpod.io/#https://github.com/tokikanno/django-openapi) After Gitpod launched, if you see a dialog like this, just hit the `Open Browser` button then you will get to the quick intro live demo server. ![image](https://raw.githubusercontent.com/tokikanno/django-openapi/master/docs/images/gitpod-dialog.png) Use ctrl + p (or cmd + p if u're using MacOS X) and search for `intro.py` to see the source code of intro demo server. # Quick start ### In your Django project * Import `OpenAPI` from `django_openapi` * Create an API object instance * Add API object into urlpatterns ```python # import OpenAPI from django_opeanapi from django_openapi import OpenAPI # create an API object instance api = OpenAPI(title='My OpenAPI Test', prefix_path='/test_api') urlpatterns = [ api.as_django_url_pattern() # Add API object into urlpatterns ] ``` * Start you django debug server and open your browser with url like `http://localhost:8000/test_api/_docs`, this is the auto document page. * Now let's try adding some basic routes for you API ```python from django_openapi import Path, Query, Form @api.get('/test/hello_via_path/{word}', tags=['test']) def hello_via_path(word=Path()): return {'hello': word} @api.get('/test/hello_via_query', tags=['test']) def hello_via_query(word=Query()): return {'hello': word} @api.post('/test/hello_via_form', tags=['test']) def hello_via_form(word=Form()): return {'hello': word} ``` * Reload your browser & see if anything changed to the auto document page * Advanced routes via JSON body & JSON schema object ```python from django_openapi import Body from django_openapi.schema import BaseModel, StringField class HelloPayload(BaseModel): word = StringField(default_value='world', min_length=3) @api.post('/test/hello_via_json_body', tags=['test']) def hello_via_json_body(payload=Body(HelloPayload)): return {'hello': payload.word} ``` * Reload agagin, the auto document page now should have 4 APIs on it. ![image](https://raw.githubusercontent.com/tokikanno/django-openapi/master/docs/images/hello_app.png) Browse to the [demo folder](https://github.com/tokikanno/django-openapi/tree/master/demo) for more advanced samples. # TODO * More documents and samples * Better schema validation error message handling * More advanced field types (e.g.: EmailStringField, CommaSeparatedArrayField ...) %prep %autosetup -n django-openapi-0.1.1.11 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-django-openapi -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Jun 20 2023 Python_Bot - 0.1.1.11-1 - Package Spec generated