When you want to return an error, you must raise only your own exceptions defined in the capability module. Never let Python raise his exceptions, for example KeyError if a parameter given to method isn’t found in a local list.
Python is an object-oriented language, so when your capability supports entities (for example weboob.capabilities.video.BaseVideo with the weboob.capabilities.video.CapVideo capability), you have to create a class derived from weboob.capabilities.base.BaseObject, and create an unique method to get it (for example get_video()), instead of several methods like get_video_url(), get_video_preview(), etc.
An object has an unique ID.
When an object is fetched, all of its fields are not necessarily loaded.
For example, on a video search, if the backend gets information from the search page, the direct URL of the video isn’t available yet.
A field which isn’t loaded can be set to weboob.capabilities.base.NotLoaded.
By default, in the object constructor, every fields should be set to NotLoaded, and when the backend loads them, it replaces them with the new values.