Comments (4)
These are the two error messages I receive when decorating a handler with an invalid signature (after removing the checks) on python 3.6.
TypeError: handler() takes 0 positional arguments but 1 was given
TypeError: handler() missing 1 required positional argument: 'bar'
on python 2.7 the error messages are
TypeError: handler() takes no arguments (1 given)
TypeError: handler() takes exactly 2 arguments (1 given)
In my opinion these error messages should be enough to figure out that the function definition is wrong. I also think most people are going to start by copying/modifying one of the examples, which should make clear that the function takes exactly one parameter.
For going around this issue, as you might have already observed, we use type hinting using the Python 2.7 syntax. What do you think about this approach?
I know about this syntax, but honestly I quite dislike a bit. I currently work around the issue by using a custom decorator which (actually by accident) removes the type annotations and gets the request_handler
decorator to work.
Another workaround would be to differentiate between python 2.7 and 3.6 and use getargspec
and getfullargspec
or signature
depending on the version. This would go in line with the deprecation of getargspec
since python 3.0, so we cannot be sure that this function will be available forever.
The getfullargspec
variant could look something along the lines of
handle_arg_spec = inspect.getfullargspec(handle_func)
if (len(handle_arg_spec.args) != 1 or
handle_arg_spec.varargs is not None or
handle_arg_spec.kwonlyargs != []):
raise SkillBuilderException(
"Request Handler handle_func should only accept a single "
"input arg, handler input")
from alexa-skills-kit-sdk-for-python.
@Birne94 , thanks for the clear feedback. I am aware of the deprecation and had a task to update the api according to the Python version.
But I guess the error messages are clear enough for first time developers to figure out the issue.
on python 3.6.
TypeError: handler() takes 0 positional arguments but 1 was given
TypeError: handler() missing 1 required positional argument: 'bar'
on python 2.7 the error messages are
TypeError: handler() takes no arguments (1 given)
TypeError: handler() takes exactly 2 arguments (1 given)
I also think it would be good to mention in documentation on the interface details in general. As for type annotations, I support your argument that the syntax for Python 2.7 type annotations is a bit too much to add, for each function, and like Python 3's type annotations syntax. However, since we support Python 2.7 and Python 3.6> , we had to use a generic way.
Anyways, I think we can remove these checks in place for all the decorators on skill builders (eg: 1, 2, 3, 4). The necessary changes in the new PR is on the way!!
from alexa-skills-kit-sdk-for-python.
@Birne94, without the inspect.getargspec
check, rather than the generic takes 1 positional argument but 2 were given
error, we get missing .. required positional argument
. This is because of the way the decorator builds up the AbstractRequestHandler
class.
We had the signature check for providing a better exception message for skill developers. But we do understand type annotations is a sought after feature for Py3 developers.
For going around this issue, as you might have already observed, we use type hinting using the Python 2.7 syntax. What do you think about this approach?
from alexa-skills-kit-sdk-for-python.
@nikhilym Thank you for the quick response and actions!
from alexa-skills-kit-sdk-for-python.
Related Issues (20)
- ask_sdk_model.services.service_exception.ServiceException: The authentication token is invalid or doesn't have access to make this HOT 11
- Sb Conflicting each other HOT 5
- `ModuleNotFoundError:` No module named 'asn1crypto'`` when importing skill adapter from flask HOT 3
- 'NoneType' object has no attribute 'system' HOT 2
- Link how to create a new security profile should be updated HOT 1
- Golang SDK - Alexa Skills kit HOT 2
- User with almost all scopes types receives unauthorized_client error HOT 2
- UserAgentManager missing from 1.15 PyPI distro HOT 3
- Alexa HOT 1
- Fail to import local modules HOT 6
- I have a intent for the alexa skill which has two slots, one of them is fulfilled while invoking the skill. I want the second slot to store the value uttered by the user at a later point of time. Is there a way to do so using python HOT 1
- Cannot import the SpokenInfo class (ask_sdk_model.services.reminder_management) HOT 2
- Receiving unauthorized_client error trying to list all skills HOT 3
- SpeakDirective doesn't create correct audio src directive HOT 1
- Outdated version of cryptography? HOT 5
- Invalid signatures with django-ask-sdk since ask-sdk-webservice-support v1.3.3 HOT 4
- ENDPOINT_TIMEOUT is not handled properly in Incorrect handling of SessionEndedRequest.
- AskForPermissionsConsentCard not showing the option to activate requested permission HOT 2
- documentation error - local_debug.py
- Bug report : Sending a voice forward consent start connection directive returns error "ask_sdk_core/response_helper.py directive.object_type has no attribute 'object_type'"
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from alexa-skills-kit-sdk-for-python.