Spaces:
Runtime error
Runtime error
Update waifuc_gui/source_manager.py
Browse files- waifuc_gui/source_manager.py +85 -86
waifuc_gui/source_manager.py
CHANGED
@@ -1,86 +1,85 @@
|
|
1 |
-
import inspect
|
2 |
-
import waifuc.source
|
3 |
-
import gradio as gr
|
4 |
-
from .config_manager import ConfigManager
|
5 |
-
|
6 |
-
class SourceManager:
|
7 |
-
def __init__(self, config_manager: ConfigManager):
|
8 |
-
self.config_manager = config_manager
|
9 |
-
self.source_classes = [
|
10 |
-
cls for name, cls in inspect.getmembers(waifuc.source, inspect.isclass)
|
11 |
-
if name.endswith("Source") and not inspect.isabstract(cls)
|
12 |
-
]
|
13 |
-
self.source_names = [cls.__name__ for cls in self.source_classes]
|
14 |
-
|
15 |
-
def get_source_params(self, selected_source):
|
16 |
-
source_cls = next(cls for cls in self.source_classes if cls.__name__ == selected_source)
|
17 |
-
sig = inspect.signature(source_cls.__init__)
|
18 |
-
return [p for p in sig.parameters.values() if p.name != 'self']
|
19 |
-
|
20 |
-
def create_param_inputs(self):
|
21 |
-
params = {}
|
22 |
-
for source in self.source_names:
|
23 |
-
if source == "LocalSource":
|
24 |
-
params[source] = {
|
25 |
-
"file": gr.File(
|
26 |
-
label="Upload ZIP file" if self.config_manager.get_config("language") == "en" else "上传zip文件",
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
"
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
return source_cls(**source_params)
|
|
|
1 |
+
import inspect
|
2 |
+
import waifuc.source
|
3 |
+
import gradio as gr
|
4 |
+
from .config_manager import ConfigManager
|
5 |
+
|
6 |
+
class SourceManager:
|
7 |
+
def __init__(self, config_manager: ConfigManager):
|
8 |
+
self.config_manager = config_manager
|
9 |
+
self.source_classes = [
|
10 |
+
cls for name, cls in inspect.getmembers(waifuc.source, inspect.isclass)
|
11 |
+
if name.endswith("Source") and not inspect.isabstract(cls)
|
12 |
+
]
|
13 |
+
self.source_names = [cls.__name__ for cls in self.source_classes]
|
14 |
+
|
15 |
+
def get_source_params(self, selected_source):
|
16 |
+
source_cls = next(cls for cls in self.source_classes if cls.__name__ == selected_source)
|
17 |
+
sig = inspect.signature(source_cls.__init__)
|
18 |
+
return [p for p in sig.parameters.values() if p.name != 'self']
|
19 |
+
|
20 |
+
def create_param_inputs(self):
|
21 |
+
params = {}
|
22 |
+
for source in self.source_names:
|
23 |
+
if source == "LocalSource":
|
24 |
+
params[source] = {
|
25 |
+
"file": gr.File(
|
26 |
+
label="Upload ZIP file" if self.config_manager.get_config("language") == "en" else "上传zip文件",
|
27 |
+
visible=False
|
28 |
+
)
|
29 |
+
}
|
30 |
+
else:
|
31 |
+
source_cls = next(cls for cls in self.source_classes if cls.__name__ == source)
|
32 |
+
sig = inspect.signature(source_cls.__init__)
|
33 |
+
for param in sig.parameters.values():
|
34 |
+
if param.name != 'self':
|
35 |
+
if param.name == "refresh_token":
|
36 |
+
params.setdefault(source, {})[param.name] = gr.Textbox(
|
37 |
+
label="Pixiv Refresh Token" if self.config_manager.get_config("language") == "en" else "Pixiv刷新令牌",
|
38 |
+
type="password",
|
39 |
+
visible=False,
|
40 |
+
value=self.config_manager.get_config("pixiv_refresh_token"),
|
41 |
+
info="Set in Config tab or here" if self.config_manager.get_config("language") == "en" else "在配置选项卡或此处设置"
|
42 |
+
)
|
43 |
+
elif param.name == "num_items":
|
44 |
+
params.setdefault(source, {})[param.name] = gr.Number(
|
45 |
+
label="Number of Items" if self.config_manager.get_config("language") == "en" else "图片数量",
|
46 |
+
visible=False,
|
47 |
+
value=self.config_manager.get_config("default_num_items"),
|
48 |
+
info="Number of images to collect" if self.config_manager.get_config("language") == "en" else "要收集的图片数量"
|
49 |
+
)
|
50 |
+
elif param.annotation == list:
|
51 |
+
params.setdefault(source, {})[param.name] = gr.Textbox(
|
52 |
+
label=param.name,
|
53 |
+
placeholder="Comma-separated tags, e.g., tag1,tag2" if self.config_manager.get_config("language") == "en" else "逗号分隔的标签,例如:tag1,tag2",
|
54 |
+
visible=False
|
55 |
+
)
|
56 |
+
elif param.annotation == int:
|
57 |
+
params.setdefault(source, {})[param.name] = gr.Number(
|
58 |
+
label=param.name,
|
59 |
+
visible=False
|
60 |
+
)
|
61 |
+
else:
|
62 |
+
params.setdefault(source, {})[param.name] = gr.Textbox(
|
63 |
+
label=param.name,
|
64 |
+
visible=False
|
65 |
+
)
|
66 |
+
return params
|
67 |
+
|
68 |
+
def instantiate_source(self, selected_source, params, file_handler):
|
69 |
+
if selected_source == "LocalSource":
|
70 |
+
uploaded_file = params.get("file", None)
|
71 |
+
if not uploaded_file:
|
72 |
+
raise ValueError(
|
73 |
+
"Please upload a ZIP file for LocalSource" if self.config_manager.get_config("language") == "en" else
|
74 |
+
"请上传LocalSource的zip文件"
|
75 |
+
)
|
76 |
+
extract_dir = file_handler.extract_zip(uploaded_file)
|
77 |
+
return waifuc.source.LocalSource(extract_dir)
|
78 |
+
else:
|
79 |
+
source_cls = next(cls for cls in self.source_classes if cls.__name__ == selected_source)
|
80 |
+
source_params = {k: v for k, v in params.items() if k in [p.name for p in self.get_source_params(selected_source)]}
|
81 |
+
if "tags" in source_params:
|
82 |
+
source_params["tags"] = [tag.strip() for tag in source_params["tags"].split(',')]
|
83 |
+
if "refresh_token" in source_params and not source_params["refresh_token"]:
|
84 |
+
source_params["refresh_token"] = self.config_manager.get_config("pixiv_refresh_token")
|
85 |
+
return source_cls(**source_params)
|
|