python-pyodata icon indicating copy to clipboard operation
python-pyodata copied to clipboard

Handling deferred attributes automatically

Open bartonip opened this issue 5 years ago • 1 comments

Right now if an entity has a navigation property, the object must be completely reloaded (as below) to load in deferred data in navigation properties. For example:

orders = service.orders.get_entities()

for o in orders:
    do_some_stuff_with(o.Customers)  # This is an empty list right now so nothing will get done.

# The data must be reloaded as per the below for anything to happen.
orders = service.orders.get_entities().expand("Customers")

I propose that we use the OData __deferred attribute to fire a request on demand to load these attributes in. This would allow the API to look like this:

orders = service.orders.get_entities()

for o in orders:
   do_some_stuff_with(o.Customers)  # Request is automatically made using the `__deferred` attribute which transparently offers the missing data back to the class.

WDYT: @filak-sap

bartonip avatar Jul 20 '20 04:07 bartonip

I am not against it as long as we keep also the possibility to fetch the navigation property using the standard way which allows us to specify HTTP parameters.

filak-sap avatar Jul 20 '20 13:07 filak-sap