Find the provider of the property by I{name}. @param name: The property name. @type name: str @param history: A history of nodes checked to prevent circular hunting. @type history: [L{Properties},..] @return: The provider when found. Othe
(self, name, history=None)
| 335 | return self |
| 336 | |
| 337 | def provider(self, name, history=None): |
| 338 | """ |
| 339 | Find the provider of the property by I{name}. |
| 340 | @param name: The property name. |
| 341 | @type name: str |
| 342 | @param history: A history of nodes checked to prevent |
| 343 | circular hunting. |
| 344 | @type history: [L{Properties},..] |
| 345 | @return: The provider when found. Otherwise, None (when nested) |
| 346 | and I{self} when not nested. |
| 347 | @rtype: L{Properties} |
| 348 | """ |
| 349 | if history is None: |
| 350 | history = [] |
| 351 | history.append(self) |
| 352 | if name in self.definitions: |
| 353 | return self |
| 354 | for x in self.links: |
| 355 | if x in history: |
| 356 | continue |
| 357 | provider = x.provider(name, history) |
| 358 | if provider is not None: |
| 359 | return provider |
| 360 | history.remove(self) |
| 361 | if len(history): |
| 362 | return None |
| 363 | return self |
| 364 | |
| 365 | def keys(self, history=None): |
| 366 | """ |