In order to determine which functions in a controller file to expose as actions, web2py uses the following regex (the intention is to identify only functions that take no arguments and don't start with a double underscore):
'^def\s+(?P<name>_?[a-zA-Z0-9]\w*)\( *\)\s*:' As you can see, this does not support type hints. Feel free to open an issue on Github or submit a pull request to allow type hints. In the meantime, you can create a separate function with the type hint and call that function from within a non-hinted action: def get_approval(): return hinted_get_approval() Anthony On Friday, March 8, 2019 at 9:31:58 AM UTC-5, João Matos wrote: > > If I write this function > > from typing import Dict > > @auth.requires(lambda: (auth.requires_login() and request.env.http_referer > and ('/client' in request.env.http_referer > or '/client/get_approval' in > request.env.http_referer))) > def get_approval() -> Dict[str, SQLFORM]: > """Get approval for deletion. > > :return: Dict with form. > """ > rec_id: str = request.args[0] > > rows_dic: Dict[int, str] = {**general.get_members(db, SUPERVISOR_ROLE), > **general.get_members(db, MANAGER_ROLE)} > > form = SQLFORM.factory( > Field('user_id', label=T('Supervisor/Manager'), > requires=IS_IN_SET(rows_dic, zero=T('Choose one...'))), > Field('password', 'password', label=T('Password'), > requires=IS_NOT_EMPTY()), > buttons=[BUTTON(T('Submit'), _type='submit', _class='btn > btn-primary')], > formstyle='table3cols', > ) > ... > return dict(form=form) > > > web2py shows a web page with the message > invalid function (client/get_approval) > > > If however I write it without the return type on the header > > from typing import Dict > > @auth.requires(lambda: (auth.requires_login() and request.env.http_referer > and ('/client' in request.env.http_referer > or '/client/get_approval' in > request.env.http_referer))) > def get_approval(): > # type: () -> Dict[str, SQLFORM] > """Get approval for deletion. > > :return: Dict with form. > """ > rec_id: str = request.args[0] > > rows_dic: Dict[int, str] = {**general.get_members(db, SUPERVISOR_ROLE), > **general.get_members(db, MANAGER_ROLE)} > > form = SQLFORM.factory( > Field('user_id', label=T('Supervisor/Manager'), > requires=IS_IN_SET(rows_dic, zero=T('Choose one...'))), > Field('password', 'password', label=T('Password'), > requires=IS_NOT_EMPTY()), > buttons=[BUTTON(T('Submit'), _type='submit', _class='btn > btn-primary')], > formstyle='table3cols', > ) > ... > return dict(form=form) > > > it all works. > > > I even tried with just -> Dict to see if it was a problem with SQLFORM, > but it returns the same message. > > > Windows 7 Pro x64 SP1+all updates > Firefox 65.0.2 x64 > Python 3.7.1 x86 > web2py 2.18.3 > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.