Skip to content

Instantly share code, notes, and snippets.

@ruxi
Created December 2, 2016 20:42
Show Gist options
  • Save ruxi/17d934768aa9404ca99fac2cb1d2a1e2 to your computer and use it in GitHub Desktop.
Save ruxi/17d934768aa9404ca99fac2cb1d2a1e2 to your computer and use it in GitHub Desktop.
typeguard NamedTuple support
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"ExecuteTime": {
"start_time": "2016-12-02T14:41:22.779791",
"end_time": "2016-12-02T14:41:22.795322"
},
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "import typing\nimport typeguard\ntyping.Tuple\n\n@typeguard.typechecked\ndef foo(bar:typing.Tuple[str, int]):\n return 'works' \n\nfoo(tuple(['bob', 1]))",
"execution_count": 17,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "'works'"
},
"metadata": {},
"execution_count": 17
}
]
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2016-12-02T14:41:35.691504",
"end_time": "2016-12-02T14:41:35.710468"
},
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "import typing\nimport typeguard\n\nEmployee = typing.NamedTuple(\"Employee\", [(\"name\", str), (\"id\", int)] )\n\n@typeguard.typechecked\ndef foo(bar:typing.Tuple[str, int]):\n return 'works' \n\nfoo(Employee('bob', 1))",
"execution_count": 18,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "'works'"
},
"metadata": {},
"execution_count": 18
}
]
},
{
"metadata": {
"run_control": {
"read_only": false,
"frozen": false
},
"ExecuteTime": {
"start_time": "2016-12-02T14:41:53.573336",
"end_time": "2016-12-02T14:41:53.607486"
},
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "import typing\nimport typeguard\n\nEmployee = typing.NamedTuple(\"Employee\", [(\"name\", str), (\"id\", int)] )\n\n@typeguard.typechecked\ndef foo(bar:Employee):\n return 'works' \n\nfoo(Employee('bob', 1))",
"execution_count": 19,
"outputs": [
{
"output_type": "error",
"ename": "AttributeError",
"evalue": "type object 'Employee' has no attribute '__tuple_use_ellipsis__'",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-19-a94667e1e31b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m'works'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mfoo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mEmployee\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'bob'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/home/lewis/git/phd/src/typeguard/typeguard.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 354\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 355\u001b[0m \u001b[0mtypevars_memo\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m \u001b[0;31m# type: Dict[TypeVar, type]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 356\u001b[0;31m \u001b[0mcheck_argument_types\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypevars_memo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 357\u001b[0m \u001b[0mretval\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 358\u001b[0m \u001b[0mcheck_return_value_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mretval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypevars_memo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/home/lewis/git/phd/src/typeguard/typeguard.py\u001b[0m in \u001b[0;36mcheck_argument_types\u001b[0;34m(func, args, kwargs, typevars_memo)\u001b[0m\n\u001b[1;32m 315\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margvalues\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0margname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 316\u001b[0m \u001b[0margname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'argument {}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 317\u001b[0;31m \u001b[0mcheck_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexpected_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypevars_memo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 318\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/home/lewis/git/phd/src/typeguard/typeguard.py\u001b[0m in \u001b[0;36mcheck_type\u001b[0;34m(argname, value, expected_type, typevars_memo)\u001b[0m\n\u001b[1;32m 244\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mtype_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mchecker_func\u001b[0m \u001b[0;32min\u001b[0m \u001b[0msubclass_type_checkers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 245\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0missubclass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpected_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 246\u001b[0;31m \u001b[0mchecker_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexpected_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtypevars_memo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 247\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 248\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/home/lewis/git/phd/src/typeguard/typeguard.py\u001b[0m in \u001b[0;36mcheck_tuple\u001b[0;34m(argname, value, expected_type, typevars_memo)\u001b[0m\n\u001b[1;32m 134\u001b[0m format(argname, qualified_name(value)))\n\u001b[1;32m 135\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 136\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mexpected_type\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__tuple_use_ellipsis__\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 137\u001b[0m \u001b[0melement_type\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexpected_type\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__tuple_params__\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 138\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0melement\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAttributeError\u001b[0m: type object 'Employee' has no attribute '__tuple_use_ellipsis__'"
]
}
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"hide_input": false,
"latex_envs": {
"eqNumInitial": 0,
"eqLabelWithNumbers": true,
"current_citInitial": 1,
"cite_by": "apalike",
"bibliofile": "biblio.bib"
},
"toc": {
"threshold": 4,
"number_sections": true,
"toc_cell": false,
"toc_window_display": false,
"toc_section_display": "block",
"sideBar": true,
"navigate_menu": true,
"nav_menu": {
"width": "252px",
"height": "12px"
}
},
"language_info": {
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"version": "3.5.2",
"mimetype": "text/x-python"
},
"gist": {
"id": "",
"data": {
"description": "typeguard NamedTuple support",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment