Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KeyError: 'lambdaname' on chalice deploy when using a Python lambda #74

Closed
canozmen opened this issue Jul 29, 2016 · 2 comments
Closed
Labels

Comments

@canozmen
Copy link

Adding the following code to app.py causes chalice deploy to fail with KeyError: 'x' where x is the name of the Python lambda. I tested the same function on a separate python file and it seems to work fine.

def fishes_by_month(month): return sorted(fishes.values(), key=lambda x: x.taste_by_month[month - 1], reverse=True)

Here is the output from chalice deploy:

Updating IAM policy.
Traceback (most recent call last):
File "/home/canozmen/.virtualenvs/chalice-demo/bin/chalice", line 11, in
sys.exit(main())
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/cli/init.py", line 203, in main
return cli(obj={})
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/click/core.py", line 716, in call
return self.main(_args, *_kwargs)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, *_ctx.params)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/click/core.py", line 534, in invoke
return callback(_args, *_kwargs)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, *_kwargs)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/cli/init.py", line 123, in deploy
d.deploy(ctx.obj)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/deployer.py", line 203, in deploy
self._deploy_lambda(config)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/deployer.py", line 215, in _deploy_lambda
self._get_or_create_lambda_role_arn(config)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/deployer.py", line 304, in _get_or_create_lambda_role_arn
self._update_role_with_latest_policy(app_name, config)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/deployer.py", line 313, in _update_role_with_latest_policy
app_policy = self._get_policy_from_source_code(config)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/deployer.py", line 342, in _get_policy_from_source_code
app_policy = policy.policy_from_source_code(f.read())
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/policy.py", line 20, in policy_from_source_code
client_calls = get_client_calls_for_app(source_code)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 67, in get_client_calls_for_app
t.bind_types(parsed)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 283, in bind_types
self.visit(parsed_code.parsed_ast)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/usr/lib/python2.7/ast.py", line 249, in generic_visit
self.visit(item)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/usr/lib/python2.7/ast.py", line 251, in generic_visit
self.visit(value)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 369, in visit_Call
self._infer_function_call(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 387, in _infer_function_call
child_infer.bind_types(ParsedCode(ast_node, sub_table))
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 283, in bind_types
self.visit(parsed_code.parsed_ast)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 409, in visit_FunctionDef
self.visit(child)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/usr/lib/python2.7/ast.py", line 249, in generic_visit
self.visit(item)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/usr/lib/python2.7/ast.py", line 249, in generic_visit
self.visit(item)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 314, in visit_Assign
self.generic_visit(node)
File "/usr/lib/python2.7/ast.py", line 251, in generic_visit
self.visit(value)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 369, in visit_Call
self._infer_function_call(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 387, in _infer_function_call
child_infer.bind_types(ParsedCode(ast_node, sub_table))
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 283, in bind_types
self.visit(parsed_code.parsed_ast)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 409, in visit_FunctionDef
self.visit(child)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 419, in visit_Return
self.generic_visit(node)
File "/usr/lib/python2.7/ast.py", line 251, in generic_visit
self.visit(value)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 341, in visit_Call
self.generic_visit(node)
File "/usr/lib/python2.7/ast.py", line 249, in generic_visit
self.visit(item)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/usr/lib/python2.7/ast.py", line 251, in generic_visit
self.visit(value)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/usr/lib/python2.7/ast.py", line 251, in generic_visit
self.visit(value)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/usr/lib/python2.7/ast.py", line 249, in generic_visit
self.visit(item)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 429, in visit
return ast.NodeVisitor.visit(self, node)
File "/usr/lib/python2.7/ast.py", line 241, in visit
return visitor(node)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 307, in visit_Name
node.inferred_type = self._symbol_table.get_inferred_type(node.id)
File "/home/canozmen/.virtualenvs/chalice-demo/local/lib/python2.7/site-packages/chalice/analyzer.py", line 214, in get_inferred_type
symbol = self._local_table.lookup(name)
File "/usr/lib/python2.7/symtable.py", line 100, in lookup
flags = self._table.symbols[name]
KeyError: 'x'

@canozmen
Copy link
Author

canozmen commented Aug 1, 2016

I can confirm that chalice deploy --no-autogen-policy works fine. Looks like the analyzer picks up the 'lambda x' as a boto function call to the Amazon lambda service.

@jamesls
Copy link
Member

jamesls commented Aug 1, 2016

Thanks for reporting.

@jamesls jamesls added the bug label Aug 1, 2016
jamesls added a commit to jamesls/chalice that referenced this issue Aug 1, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants