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