Most "pythonic" syntax to use for an API client library

Thomas Jollans tjol at tjol.eu
Tue Apr 30 04:16:06 EDT 2019


On 30/04/2019 09.52, Peter Otten wrote:
> Thomas Jollans wrote:
> 
>> On 29/04/2019 09.18, Peter Otten wrote:
>>> Jonathan Leroy - Inikup via Python-list wrote:
>>> alice.name = "Bob"  # __setattr__
>>>
>>> del customers[42]  # __delitem__
>>
>> do you want this sort of thing to update the upstream database directly?
> 
> I thought so. However, you have to answer this question no matter which of 
> the suggested APIs you choose.

True, but with a .update(key=value, ...) method (which takes multiple
kwargs) you don't have the potential issue of more requests than
necessary if you're updating multiple fields.

> 
>> Maybe there should be a commit() method on every object. Maybe not.
> 
> I originally had
> 
> db = api.connect(...)
> customers = db.customers
> 
> but then decided this was out of scope for the question. It would however 
> allow
> 
> with db:
>     ...  # modify db
>     # implicit commit, or rollback on exception
> 
>> I imagine it would be best if the data is cached locally (i.e. alice =
>> customers[1] does a query, print(alice.name) does not). In this case you
>> probably want the local/database separation to be consistent for both
>> getting and setting things.
> 
> That looks like a lot of work, with the potential to introduce additional 
> inconsistencies. But there's probably prior art.
> 
> How do ORMs like SQLObject handle this?

It's been a while, but I'm pretty sure the Django ORM at least has
caching everywhere.

>  
>>> del customers[alice]
>>
>> Are you sure about this?
> 
> On a scale from one to ten? Yes ;)
> 
>>>> #3 seems to be more "pretty" to me, but I did not find any "official"
>>>> recommendation online.
>>
>> I'd like #3 if it had square brackets after .customers. Of the
>> suggestions as they are I prefer #2.
> 
> 



More information about the Python-list mailing list