[Scons-users] SCons.Util.Flatten does not support Python3's dictionary view objects

Bill Deegan bill at baddogconsulting.com
Wed Oct 17 11:15:01 EDT 2018


I fixed it, pull request, and merged..

Take a look at the pull request. If you pull the sequencetypes change from
here
https://github.com/bdbaddog/scons/blob/fc51dd74d89ec1a4b5704b52d34fe4ef1c6e1982/src/engine/SCons/Util.py#L373

You should be able to move forward.

On Wed, Oct 17, 2018 at 10:40 AM Mike Haboustak <haboustak at gmail.com> wrote:

> Bill,
>
> Thanks for the quick reply and the tip about preserving dependency order.
>
> I'll create the GitHub issue. Converting the view via list() does work.
>
> On Wed, Oct 17, 2018 at 10:36 AM Bill Deegan <bill at baddogconsulting.com>
> wrote:
> >
> > I'd suggest you change to sort the values before adding to depends?
> > The order of dependencies changing can cause a rebuild.
> >
> > I've reproduced the issue.
> >
> > Please file an issue on github.
> > Likely we'll get a fix fairly soon.
> >
> > in the interim.
> > env.Depends(myprog, list(resources.values()))
> >
> > might work to get you going?
> >
> > On Wed, Oct 17, 2018 at 10:21 AM Mike Haboustak <haboustak at gmail.com>
> wrote:
> >>
> >> I've been testing SCons with Python3 and have run into some trouble
> >> using the Depends builder. My dependency sources are the values of a
> >> dictionary and I'm passing the result of dict.values() to Depends.
> >>
> >> resources = {
> >>     'icon': 'resources/icon.png',
> >>     'splash': 'resources/splash.png',
> >> }
> >> env.Depends(myprog, resources.values())
> >>
> >> When run under Python3, SCons fails to build with the following
> traceback:
> >> AttributeError: 'dict_values' object has no attribute 'get_state':
> >>   File "/usr/local/lib/scons/SCons/Script/Main.py", line 1361:
> >>     _exec_main(parser, values)
> >>   File "/usr/local/lib/scons/SCons/Script/Main.py", line 1324:
> >>     _main(parser)
> >>   File "/usr/local/lib/scons/SCons/Script/Main.py", line 1103:
> >>     nodes = _build_targets(fs, options, targets, target_top)
> >>   File "/usr/local/lib/scons/SCons/Script/Main.py", line 1298:
> >>     jobs.run(postfunc = jobs_postfunc)
> >>   File "/usr/local/lib/scons/SCons/Job.py", line 111:
> >>     self.job.start()
> >>   File "/usr/local/lib/scons/SCons/Job.py", line 193:
> >>     task = self.taskmaster.next_task()
> >>   File "/usr/local/lib/scons/SCons/Taskmaster.py", line 960:
> >>     node = self._find_next_ready_node()
> >>   File "/usr/local/lib/scons/SCons/Taskmaster.py", line 851:
> >>     childstate = child.get_state()
> >>
> >>
> >> In python 3, dict.values() returns a dictionary view object:
> >> https://docs.python.org/3/library/stdtypes.html#dictionary-view-objects
> >>
> >> The problem starts with a lack of support for these dictionary views
> >> in SCons.Util.Flatten:
> >> items = {"a":1, "b":2, "c":3}
> >> args = SCons.Util.Flatten(items.values())
> >> print(args)
> >>
> >> result: [dict_values([2, 1, 3])]
> >>
> >> Thanks,
> >> Mike Haboustak
> >> _______________________________________________
> >> Scons-users mailing list
> >> Scons-users at scons.org
> >> https://pairlist4.pair.net/mailman/listinfo/scons-users
> >
> > _______________________________________________
> > Scons-users mailing list
> > Scons-users at scons.org
> > https://pairlist4.pair.net/mailman/listinfo/scons-users
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20181017/95dc58b6/attachment-0001.html>


More information about the Scons-users mailing list