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

Bill Deegan bill at baddogconsulting.com
Wed Oct 17 10:36:37 EDT 2018


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20181017/340b448e/attachment.html>


More information about the Scons-users mailing list