python-pyodata
python-pyodata copied to clipboard
Handling deferred attributes automatically
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
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.