[PEAK] Default value lost in binding.Obtain()
Alexey Smishlayev
alexey at xtech2.lv
Tue Sep 29 09:03:26 EDT 2015
Hello!
Today, fiddling with the binding.Obtain() I noticed that the default
value gets lost.
In my application, I have a component tree and I want an attribute to be
defined in any component in that tree, so I created binding:
> callback = binding.Obtain("callbackFunction", default=lambda arg:
None)
>
So, in case that no component defines a callbackFunction, the lambda
function would be used as a fallback.
Unfortunately, "default" option is ignored unless target name contains
slashes (e.g. "/callbackFunction", "./callBackFunction",
"../callbackFunction")
I went to the peak/binding/components.py trying to fix it and propose
the attached patch.
The problem is that default value was not propagated to the
acquireComponent() call, so an exception occurred.
Best regards,
Alexey Smishlayev
-------------- next part --------------
--- components.py 2015-09-29 15:50:55.000000000 +0300
+++ components.py 2015-09-29 15:52:11.000000000 +0300
@@ -378,7 +378,14 @@
if pc: ob = pc(component)
- else: ob = acquireComponent(component, attr)
+ else:
+ try:
+ ob = acquireComponent(component, attr)
+ except exceptions.NameNotFound, _exc:
+ if default is not NOT_GIVEN:
+ return default
+ else:
+ raise _exc
resolved = []
append = resolved.append
More information about the PEAK
mailing list