[PEAK] Default value lost in binding.Obtain()

PJ Eby pje at telecommunity.com
Sat Oct 31 20:49:28 EDT 2015


It's done now, with tests, in Subversion.  Let me know if you have any
more trouble with this.

On Sat, Oct 31, 2015 at 3:02 PM, Alexey Smishlayev <alexey at xtech2.lv> wrote:
> Sorry, I suppose I didn't see the big picture. Anyways, this one works as
> good. I can confirm that in my case (onSubprocessConnected =
> binding.Obtain("onSubprocessConnected", default=lambda connection: None) it
> didn't work before the patch (I define onSubprocessConnected in another
> class up the hierarchy tree).
>
> Thank you for the help! I hope it goes well with the tests.
>
>
> Best regards,
> Alexey
>
>
>
> On 31/10/15 16:49, PJ Eby wrote:
>
> That's not a typo.  It's part of a strategy to work with multi-part
> names.  If the name is a path like 'foo/bar' and acquiring 'foo'
> fails, you should not end up with the 'bar' attribute of your default,
> which is what would happen with your version.  My version still has a
> bug, in that it doesn't work right with *single*-part names, because
> the for-loop doesn't execute in that case.  This code really needs
> proper tests, but there were apparently never any real tests for this
> functionality in the first place.  Most of PEAK's early code was
> developed before "test first" and "test-driven" were my standard
> practice.  :-(
>
> Anyway, here's a new version that should fix both issues.  I will have
> to see about adding some proper tests for this thing and back-testing
> to make sure they fail without the patch.
>
>
> On Sat, Oct 31, 2015 at 3:09 AM, Alexey Smishlayev <alexey at xtech2.lv> wrote:
>
> It does except for a little typo, at line 60 of the patch it should read "ob
> = acquireComponent(component, attr, default)", then it works good. Thank
> you!
>
>
> Best regards,
> Alexey
>
>
> On 30/10/15 20:59, PJ Eby wrote:
>
> Does this patch work for you?
>
> On Wed, Oct 28, 2015 at 8:45 AM, Alexey Smishlayev <alexey at xtech2.lv>
> wrote:
>
> Hi!
> How can I get an svn checkout to incorporate described changes and
> propose
> another patch? This is essential for our software and I'd like to see it
> merged in upstream as soon as possible.
>
> Best regards,
> Alexey
>
>
> On 30/09/15 01:53, PJ Eby wrote:
>
> Thanks for reporting the problem.  Unfortunately your patch will mask
> any other sort of name error, including one that happens indirectly as
> a side effect of the lookup.  I think the correct fix is going to be
> to change the nameNotFound() method of config.IConfigurationRoot to
> include a default (defaulting to NOT_GIVEN), and have
> acquireComponent() take a default and pass it along to nameNotFound().
> This would handle the case of a direct lookup failing by returning the
> default, but still raise an error for any other part of the process
> getting a naming error.
>
> On Tue, Sep 29, 2015 at 9:03 AM, Alexey Smishlayev <alexey at xtech2.lv>
> wrote:
>
> 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
>
> _______________________________________________
> PEAK mailing list
> PEAK at eby-sarna.com
> http://www.eby-sarna.com/mailman/listinfo/peak
>
> _______________________________________________
> PEAK mailing list
> PEAK at eby-sarna.com
> http://www.eby-sarna.com/mailman/listinfo/peak
>
>
> _______________________________________________
> PEAK mailing list
> PEAK at eby-sarna.com
> http://www.eby-sarna.com/mailman/listinfo/peak
>
>


More information about the PEAK mailing list