Ver código fonte

adjust pywebio.input function parameter

wangweimin 5 anos atrás
pai
commit
5762d4448e
1 arquivos alterados com 25 adições e 14 exclusões
  1. 25 14
      pywebio/input.py

+ 25 - 14
pywebio/input.py

@@ -41,8 +41,8 @@ RADIO = 'radio'
 SELECT = 'select'
 TEXTAREA = 'textarea'
 
-__all__ = ['TEXT', 'NUMBER', 'FLOAT', 'PASSWORD', 'CHECKBOX', 'RADIO', 'SELECT', 'TEXTAREA',
-           'input', 'textarea', 'select', 'checkbox', 'radio', 'actions', 'file_upload', 'input_group']
+__all__ = ['TEXT', 'NUMBER', 'FLOAT', 'PASSWORD', 'input', 'textarea', 'select',
+           'checkbox', 'radio', 'actions', 'file_upload', 'input_group']
 
 
 def _parse_args(kwargs):
@@ -57,12 +57,12 @@ def _parse_args(kwargs):
     return kwargs, valid_func
 
 
-def input(label, type=TEXT, *, valid_func=None, name=None, value=None, placeholder=None, required=None,
-          readonly=None, help_text=None, **other_html_attrs) -> Coroutine:
+def input(label='', type=TEXT, *, valid_func=None, name=None, value=None, placeholder=None, required=None,
+          readonly=None, datalist=None, help_text=None, **other_html_attrs) -> Coroutine:
     r"""文本输入
 
     :param str label: 输入框标签
-    :param str type: 输入类型. 可使用的常量:`TEXT` , `NUMBER` , `FLOAT`, `PASSWORD` , `TEXTAREA`
+    :param str type: 输入类型. 可使用的常量:`TEXT` , `NUMBER` , `FLOAT`, `PASSWORD`
     :param Callable valid_func: 输入值校验函数. 如果提供,当用户输入完毕或提交表单后校验函数将被调用.
         ``valid_func`` 接收输入值作为参数,当输入值有效时,返回 ``None`` ,当输入值无效时,返回错误提示字符串. 比如::
 
@@ -78,6 +78,7 @@ def input(label, type=TEXT, *, valid_func=None, name=None, value=None, placehold
     :param str placeholder: 输入框的提示内容。提示内容会在输入框未输入值时以浅色字体显示在输入框中
     :param bool required: 当前输入是否为必填项
     :param bool readonly: 输入框是否为只读
+    :param list datalist: 输入建议内容列表,在页面上的显示效果为下拉候选列表,用户可以忽略建议内容列表而输入其他内容。仅当输入类型 ``type`` 为 `TEXT` 时可用
     :param str help_text: 输入框的帮助文本。帮助文本会以小号字体显示在输入框下方
     :param other_html_attrs: 在输入框上附加的额外html属性。参考: https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#%E5%B1%9E%E6%80%A7
     :return: 用户输入的值
@@ -86,7 +87,7 @@ def input(label, type=TEXT, *, valid_func=None, name=None, value=None, placehold
     item_spec, valid_func = _parse_args(locals())
 
     # 参数检查
-    allowed_type = {TEXT, NUMBER, FLOAT, PASSWORD, TEXTAREA}
+    allowed_type = {TEXT, NUMBER, FLOAT, PASSWORD}
     assert type in allowed_type, 'Input type not allowed.'
 
     def preprocess_func(d):
@@ -103,7 +104,7 @@ def input(label, type=TEXT, *, valid_func=None, name=None, value=None, placehold
     return single_input(item_spec, valid_func, preprocess_func)
 
 
-def textarea(label, rows=6, *, code=None, maxlength=None, minlength=None, valid_func=None, name=None, value=None,
+def textarea(label='', *, rows=6, code=None, maxlength=None, minlength=None, valid_func=None, name=None, value=None,
              placeholder=None, required=None, readonly=None, help_text=None, **other_html_attrs):
     r"""文本输入域
 
@@ -158,7 +159,7 @@ def _set_options_selected(options, value):
     return options
 
 
-def select(label, options, *, multiple=None, valid_func=None, name=None, value=None, required=None,
+def select(label='', options=None, *, multiple=None, valid_func=None, name=None, value=None, required=None,
            help_text=None, **other_html_attrs):
     r"""下拉选择框。默认单选,设置 multiple 参数后,可以多选。但都至少要选择一个选项。
 
@@ -173,7 +174,7 @@ def select(label, options, *, multiple=None, valid_func=None, name=None, value=N
         1. options 中的 value 最终会转换成字符串。 select 返回值也是字符串(或字符串列表)
         2. 若 ``multiple`` 选项不为 ``True`` 则可选项列表最多仅能有一项的 ``selected`` 为 ``True``。
 
-    :param multiple: 是否可以多选. 默认单选
+    :param bool multiple: 是否可以多选. 默认单选
     :param value: 下拉选择框初始选中项的值。当 ``multiple=True`` 时, ``value`` 需为list,否则为单个选项的值。
        你也可以通过设置 ``options`` 列表项中的 ``selected`` 字段来设置默认选中选项。
     :type value: list or str
@@ -181,6 +182,8 @@ def select(label, options, *, multiple=None, valid_func=None, name=None, value=N
     :param - label, valid_func, name, help_text, other_html_attrs: 与 `input` 输入函数的同名参数含义一致
     :return: 字符串/字符串列表。如果 ``multiple=True`` 时,返回用户选中的 options 中的值的列表;不设置 ``multiple`` 时,返回用户选中的 options 中的值
     """
+    assert options is not None, ValueError('Required `options` parameter in select()')
+
     item_spec, valid_func = _parse_args(locals())
     item_spec['options'] = _parse_select_options(options)
     if value is not None:
@@ -191,7 +194,7 @@ def select(label, options, *, multiple=None, valid_func=None, name=None, value=N
     return single_input(item_spec, valid_func, lambda d: d)
 
 
-def checkbox(label, options, *, inline=None, valid_func=None, name=None, value=None, help_text=None,
+def checkbox(label='', options=None, *, inline=None, valid_func=None, name=None, value=None, help_text=None,
              **other_html_attrs):
     r"""勾选选项。可以多选,也可以不选。
 
@@ -202,6 +205,8 @@ def checkbox(label, options, *, inline=None, valid_func=None, name=None, value=N
     :param - label, valid_func, name, help_text, other_html_attrs: 与 `input` 输入函数的同名参数含义一致
     :return: 用户选中的 options 中的值的列表。当用户没有勾选任何选项时,返回空列表
     """
+    assert options is not None, ValueError('Required `options` parameter in checkbox()')
+
     item_spec, valid_func = _parse_args(locals())
     item_spec['options'] = _parse_select_options(options)
     if value is not None:
@@ -212,7 +217,7 @@ def checkbox(label, options, *, inline=None, valid_func=None, name=None, value=N
     return single_input(item_spec, valid_func, lambda d: d)
 
 
-def radio(label, options, *, inline=None, valid_func=None, name=None, value=None, required=None,
+def radio(label='', options=None, *, inline=None, valid_func=None, name=None, value=None, required=None,
           help_text=None, **other_html_attrs):
     r"""单选选项
 
@@ -224,6 +229,8 @@ def radio(label, options, *, inline=None, valid_func=None, name=None, value=None
     :param - label, valid_func, name, help_text, other_html_attrs: 与 `input` 输入函数的同名参数含义一致
     :return: 用户选中的选项的值(字符串)
     """
+    assert options is not None, ValueError('Required `options` parameter in radio()')
+
     item_spec, valid_func = _parse_args(locals())
     item_spec['options'] = _parse_select_options(options)
     if value is not None:
@@ -261,7 +268,7 @@ def _parse_action_buttons(buttons):
     return act_res
 
 
-def actions(label, buttons, name=None, help_text=None):
+def actions(label='', buttons=None, name=None, help_text=None):
     r"""按钮选项。
     在浏览器上显示为一组按钮,与其他输入组件不同,用户点击按钮后会立即将整个表单提交,而其他输入组件则需要手动点击表单的"提交"按钮。
 
@@ -276,6 +283,8 @@ def actions(label, buttons, name=None, help_text=None):
     :param - label, name, help_text: 与 `input` 输入函数的同名参数含义一致
     :return: 用户点击的按钮的值
     """
+    assert buttons is not None, ValueError('Required `buttons` parameter in actions()')
+
     item_spec, valid_func = _parse_args(locals())
     item_spec['type'] = 'actions'
     item_spec['buttons'] = _parse_action_buttons(buttons)
@@ -283,7 +292,7 @@ def actions(label, buttons, name=None, help_text=None):
     return single_input(item_spec, valid_func, lambda d: d)
 
 
-def file_upload(label, accept=None, name=None, placeholder='Choose file', help_text=None, **other_html_attrs):
+def file_upload(label='', accept=None, name=None, placeholder='Choose file', help_text=None, **other_html_attrs):
     r"""文件上传。
 
     :param accept: 单值或列表, 表示可接受的文件类型。单值或列表项支持的形式有:
@@ -309,7 +318,7 @@ def file_upload(label, accept=None, name=None, placeholder='Choose file', help_t
     return single_input(item_spec, valid_func, read_file)
 
 
-def input_group(label, inputs, valid_func=None):
+def input_group(label='', inputs=None, valid_func=None):
     r"""输入组。向页面上展示一组输入
 
     :param str label: 输入组标签
@@ -333,6 +342,8 @@ def input_group(label, inputs, valid_func=None):
 
     :return: 返回一个 ``dict`` , 其键为输入项的 ``name`` 值,字典值为输入项的值
     """
+    assert inputs is not None, ValueError('Required `inputs` parameter in input_group()')
+
     spec_inputs = []
     preprocess_funcs = {}
     item_valid_funcs = {}