Filling objectsΒΆ
Note
Filling objects using fillobj()
should be used whenever you need to fill some fields automatically based on data
fetched from the scraping. If you only want to fill some fields automatically based on some static data, you should
just inherit the base object class and set these fields.
An object returned by a method of a capability can be not fully completed.
The class Module
provides a method named
fillobj()
, which can be called by an application to
fill some unloaded fields of a specific object, for example with:
backend.fillobj(video, ['url', 'author'])
The fillobj()
method will check on the object which fields (in the ones given in the list argument) are not loaded
(equal to NotLoaded
, which is the default value), to reduce the list to the real uncompleted fields, and call the
method associated to the type of the object.
To define what objects are supported to be filled, and what method to call, define the OBJECTS
class attribute in your ExampleModule
:
from woob.tools.backend import Module
from woob.capabilities.video import CapVideo
class ExampleModule(Module, CapVideo):
# ...
OBJECTS = {Video: fill_video}
The prototype of the function might be:
func(self, obj, fields)
Then, the function might, for each requested fields, fetch the right data and fill the object. For example:
from woob.tools.backend import Module
from woob.capabilities.video import CapVideo
class ExampleModule(Module, CapVideo):
# ...
def fill_video(self, video, fields):
if 'url' in fields:
return self.backend.get_video(video.id)
return video
Here, when the application has got a Video
object with
search_videos()
, in most cases, there are only some meta-data, but not the direct link to the video media.
As our method get_video()
will get all
of the missing data, we just call it with the object as parameter to complete it.