In your code example it looks like FastAPI is making 1 HTTP request vs. your library is making 3 HTTP requests? Or are there some missing lines? Or am I missing something?

Also are you referring to https://github.com/pyopenapi/pyopenapi ? And if so what would be the reasoning to pull something like this into the standard library rather than leaving it as a third part library?

Damian (he / him)

On Sat, Aug 7, 2021 at 12:40 AM Vaideeswaran Ganesan <vaidees@gmail.com> wrote:
I looked at the fastapi code.

I actually want to avoid  get, post, put,  2xx, 4xx codes in the client portions of the code. (I don't think it's pythonic). And Fastapi seems to have them exactly the same.
Look at how the code looks when you are using FastAPI and with my OpenAPI Native Bindings - below:

=============== [Code using FastAPI]
def test_create_item(): response = client.post( "/items/", headers={"X-Token": "coneofsilence"}, json={"id": "foobar", "title": "Foo Bar", "description": "The Foo Barters"}, ) assert response.status_code == 200 assert response.json() == { "id": "foobar", "title": "Foo Bar", "description": "The Foo Barters",
}.

=============== [Code using pyopenapi - my proposal]
def test_create_item():
client = client('host', creds).connect('/')
try: assert client.items.id == "foobar"
assert client.items.title == "Foo Bar"
assert client.items.description == "The Foo Barters"
except AttributeError:
print("Items does not exist!")


On Fri, Aug 6, 2021 at 10:13 PM Gustavo Carneiro <gjcarneiro@gmail.com> wrote:
You may want to take a look at FastAPI[1], it already does more or less what you ask for.

There is no need for it to be part of the Python core, it's fine as it is as a package.


On Fri, 6 Aug 2021 at 17:39, Vaideeswaran Ganesan <vaidees@gmail.com> wrote:
OpenAPI (https://spec.openapis.org/oas/latest.html) is an emerging standard for defining RESTful interfaces.
OpenAPI is supported by swagger - which provides tools to convert an OpenAPI spec into python code (for both backend as well as client).

The proposition I have is to make OpenAPI native to python.  Essentially, this involves some of the following:
1. OpenAPI provides definitions of objects, arrays, structures, primitive types, collections etc.
2. OpenAPI supports object creation (HTTPS POST), object modification (PUT), object deletion (DELETE) and object retrieval (GET).
3. OpenAPI also supports operations for collections (add to collection, remove from collection and modify collection)
4. OpenAPI also supports methods and allows parameters to be passed to these APIs.

The Native Python implementation would load in OpenAPI specification and provide native Python experience as follows:
1. Primitive types are mapped to python primitive types
2. Objects and structures are treated as classes or dicts wrapped.  The field names in the Spec are accessible.
3. Arrays and Collections are mapped to python lists.
4. URLs are converted into object structure.
5.  Python inspection methods (__getattr__, __setattr__, __new__, __del__ and others) of this model is changed to manipulate the fetched objects dynamically

Parts of this implementations are found in various places : sushy (OpenStack) etc.
However, having a more organized approach would make life easier.

Swagger has a tool that can generate the code.  But this means that every time a specification changes you need to ship a new python library.
The methodology presented not require any addition python libraries - the tool can download from the REST end point.

By making OpenAPI native to python, we would avoid cumbersome handling of request codes etc. and make it as you we are accessing native objects.
I can provide more details and a reference implementation I am working on.

Wanted to know if this is worthy to be submitted as PEP!
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/5DBYKAEXM2Z3UQZGORXMBQTBN22RQPLT/
Code of Conduct: http://python.org/psf/codeofconduct/


--
Gustavo J. A. M. Carneiro
Gambit Research
"The universe is always one step beyond logic." -- Frank Herbert
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/NVNZB2Y35HF6QRCI75USKZENI3HXNF3R/
Code of Conduct: http://python.org/psf/codeofconduct/