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

Mike Haboustak haboustak at gmail.com
Wed Oct 17 10:21:04 EDT 2018


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


More information about the Scons-users mailing list