Browse Source

maint: make `platform.utils.make_applications()` more robust

wangweimin 4 years ago
parent
commit
8536c568f6
1 changed files with 10 additions and 1 deletions
  1. 10 1
      pywebio/platform/utils.py

+ 10 - 1
pywebio/platform/utils.py

@@ -57,11 +57,20 @@ def make_applications(applications):
     :param applications: 接受 单一任务函数、字典、列表 类型
     :return dict: 任务名->任务函数 的映射
     """
+
     if isinstance(applications, Sequence):  # 列表 类型
-        applications = {get_function_name(func): func for func in applications}
+        applications, app_list = {}, applications
+        for func in app_list:
+            name = get_function_name(func)
+            if name in applications:
+                raise ValueError("Duplicated application name:%r" % name)
+            applications[name] = func
     elif not isinstance(applications, Mapping):  # 单一任务函数 类型
         applications = {'index': applications}
 
+    # covert dict key to str
+    applications = {str(k): v for k, v in applications.items()}
+
     for app in applications.values():
         assert iscoroutinefunction(app) or isgeneratorfunction(app) or callable(app), \
             "Don't support application type:%s" % type(app)