Re: SCons.Util.Flatten does not support Python3's dictionary view objects

Bill Deegan <[email protected]>
Newsgroups gmane.comp.programming.tools.scons.user
Message-ID <CAEyG4CEJBpOAB7HHLOSsQ+XRs-YWp_qNfMVURJkD3_vsMjrL5A@mail.gmail.com>
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 <[email protected]> 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 <[email protected]>
> 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 <[email protected]>
> 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
> >> [email protected]
> >> https://pairlist4.pair.net/mailman/listinfo/scons-users
> >
> > _______________________________________________
> > Scons-users mailing list
> > [email protected]
> > https://pairlist4.pair.net/mailman/listinfo/scons-users
> _______________________________________________
> Scons-users mailing list
> [email protected]
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>

_______________________________________________
Scons-users mailing list
[email protected]
https://pairlist4.pair.net/mailman/listinfo/scons-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.