Re: Default value lost in binding.Obtain()
PJ Eby <pje-Wh6+Hckhi6HFNGf7iClzIwC/[email protected]> Sat, 31 Oct 2015 20:49:28 -0400
| Newsgroups | gmane.comp.python.peak |
|---|---|
| Message-ID | <CALeMXf7RSeXa4nc4g3gcN52UNzk86q5zx8qwrE+9yPLyS9otKg@mail.gmail.com> |
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 <[email protected]> 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 <[email protected]> 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 <[email protected]> > 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 <[email protected]> > 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 > [email protected] > http://www.eby-sarna.com/mailman/listinfo/peak > > _______________________________________________ > PEAK mailing list > [email protected] > http://www.eby-sarna.com/mailman/listinfo/peak > > > _______________________________________________ > PEAK mailing list > [email protected] > http://www.eby-sarna.com/mailman/listinfo/peak > >