3753: CRITICAL: <lambda>() keywords must be strings in RBTools 0.7.0

bdq****@apc**** (Google Code) (Is this you? Claim this profile.)
david
david
June 1, 2015
What version are you running?
RBTools 0.7

What's the URL of the page containing the problem?
rbt post

What steps will reproduce the problem?
rbt post

What is the expected output? What do you see instead?
rbt post

What operating system are you using? What browser?
Windows 7

Please provide any additional information below.
I got the problem exactly the same with this issue https://code.google.com/p/reviewboard/issues/detail?id=3729
After following the suggestion , I fixed it but it raised another isssue, please see the attachment.
david
#1 david
It's possible that this is fixed in 0.7.1 (please try)

If not, please post the output of 'rbt post --debug'
  • +NeedInfo
  • +Component-RBTools
#2 katongou********@gmai***** (Google Code) (Is this you? Claim this profile.)
I'm using RBTools 0.7.1 on FreeBSD and I see the following error:
# rbt post
Generating diff for pending changeset default
CRITICAL: <lambda>() keywords must be strings

Running with debug on:

# rbt post --debug
.
...
.....
>>> Making HTTP GET request to http://reviews.blah.com/api/review-requests/?only-links=create&only-fields=
Traceback (most recent call last):
  File "/usr/local/bin/rbt", line 8, in <module>
    load_entry_point('RBTools==0.7.1', 'console_scripts', 'rbt')()
  File "/usr/local/lib/python2.6/site-packages/RBTools-0.7.1-py2.6.egg/rbtools/commands/main.py", line 133, in main
    command.run_from_argv([RB_MAIN, command_name] + args)
  File "/usr/local/lib/python2.6/site-packages/RBTools-0.7.1-py2.6.egg/rbtools/commands/__init__.py", line 538, in run_from_argv
    exit_code = self.main(*args) or 0
  File "/usr/local/lib/python2.6/site-packages/RBTools-0.7.1-py2.6.egg/rbtools/commands/post.py", line 717, in main
    base_dir=base_dir)
  File "/usr/local/lib/python2.6/site-packages/RBTools-0.7.1-py2.6.egg/rbtools/commands/post.py", line 402, in post_request
    review_request = review_requests.create(**request_data)
TypeError: <lambda>() keywords must be strings
#3 mbe****@gmai***** (Google Code) (Is this you? Claim this profile.)
I think this is caused by https://github.com/reviewboard/rbtools/commit/8c8e4eb7a64be3da8df833608dc6b4f95ccc03e0 with python 2.6.

The problem is that lambda behavior has apparently changed between 2.6 and 2.7:

$ python2.7 -c "from __future__ import unicode_literals; x = lambda a='a', b='b': a+b; print x(**{'a':'c', 'b':'d'})"
cd
$ python2.6 -c "from __future__ import unicode_literals; x = lambda a='a', b='b': a+b; print x(**{'a':'c', 'b':'d'})"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: <lambda>() keywords must be strings

Using python 2.7 fixes the problem. Not sure if rbtools is supposed to work with 2.6 but if it is, the problem is here:

https://github.com/reviewboard/rbtools/blob/release-0.7.2/rbtools/commands/post.py#L402

review_requests.create is a lambda, it is being fed unicode literals.
david
#4 david
  • -NeedInfo
    +PendingReview
  • +david
david
#5 david
Fixed in rbtools release-0.7.x (0fc7be8). This will ship in 0.7.4. Thanks!
  • -PendingReview
    +Fixed