mirror of
https://github.com/Physton/sd-webui-prompt-all-in-one.git
synced 2026-01-26 19:29:56 +00:00
120 lines
4.1 KiB
Python
120 lines
4.1 KiB
Python
import os
|
||
import json
|
||
import re
|
||
from scripts.physton_prompt.storage import Storage
|
||
|
||
# from scripts.physton_prompt.storage import Storage
|
||
|
||
translate_apis = {}
|
||
|
||
|
||
def get_translate_apis(reload=False):
|
||
global translate_apis
|
||
if reload or not translate_apis:
|
||
translate_apis = {}
|
||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||
config_file = os.path.join(current_dir, '../../translate_apis.json')
|
||
config_file = os.path.normpath(config_file)
|
||
with open(config_file, 'r', encoding='utf8') as f:
|
||
translate_apis = json.load(f)
|
||
|
||
# for group in translate_apis['apis']:
|
||
# for item in group['children']:
|
||
# if 'config' not in item:
|
||
# continue
|
||
# config_name = 'translate_api.' + item['key']
|
||
# config = Storage.get(config_name)
|
||
# if not config:
|
||
# config = {}
|
||
# for config_item in item['config']:
|
||
# if config_item['key'] in config:
|
||
# config_item['value'] = config[config_item['key']]
|
||
# else:
|
||
# if 'default' in config_item:
|
||
# config_item['value'] = config_item['default']
|
||
# else:
|
||
# config_item['value'] = ''
|
||
|
||
return translate_apis
|
||
|
||
|
||
def privacy_translate_api_config(data_key, data):
|
||
# 如果 data 为空或者不是 dict
|
||
if not data or not isinstance(data, dict):
|
||
return data
|
||
# 如果 data_key 是 translate_api. 开头
|
||
api = None
|
||
if data_key == 'chatgpt_key':
|
||
api = 'openai'
|
||
else:
|
||
start = 'translate_api.'
|
||
if not data_key.startswith(start):
|
||
return data
|
||
api = data_key[len(start):]
|
||
apis = get_translate_apis()
|
||
find = False
|
||
for group in apis['apis']:
|
||
for item in group['children']:
|
||
if item['key'] == api:
|
||
find = item
|
||
break
|
||
if not find:
|
||
return data
|
||
api_item = find
|
||
if 'config' not in api_item or not api_item['config']:
|
||
return data
|
||
|
||
for config in api_item['config']:
|
||
# 如果有 privacy 的属性并且为 True
|
||
if 'privacy' in config and config['privacy'] and config['type'] == 'input':
|
||
if config['key'] in data:
|
||
# 前面6个字符可见,后面的字符用 * 替换
|
||
value = data[config['key']]
|
||
if len(value) > 6:
|
||
value = value[:6] + '*' * (len(value) - 6)
|
||
data[config['key']] = value
|
||
|
||
return data
|
||
|
||
def unprotected_translate_api_config(data_key, data):
|
||
api = None
|
||
if data_key == 'chatgpt_key':
|
||
api = 'openai'
|
||
else:
|
||
start = 'translate_api.'
|
||
if not data_key.startswith(start):
|
||
return data
|
||
api = data_key[len(start):]
|
||
|
||
apis = get_translate_apis()
|
||
find = False
|
||
for group in apis['apis']:
|
||
for item in group['children']:
|
||
if item['key'] == api:
|
||
find = item
|
||
break
|
||
if not find:
|
||
return data
|
||
api_item = find
|
||
if 'config' not in api_item or not api_item['config']:
|
||
return data
|
||
|
||
storage_data = Storage.get(data_key)
|
||
|
||
for config in api_item['config']:
|
||
# 如果有 privacy 的属性并且为 True
|
||
if 'privacy' in config and config['privacy'] and config['type'] == 'input':
|
||
if storage_data and config['key'] in storage_data:
|
||
if config['key'] in data:
|
||
value = data[config['key']]
|
||
# 如果包含 * 号,并且前面6个字符等于 storage_data 的前面6个字符
|
||
if '*' in value and value[:6] == storage_data[config['key']][:6]:
|
||
data[config['key']] = storage_data[config['key']]
|
||
|
||
# 多个 * 替换成一个 *
|
||
# value = re.sub(r'\*+', '*', value)
|
||
# if value == '*' and storage_data and config['key'] in storage_data:
|
||
# value = storage_data[config['key']]
|
||
# data[config['key']] = value
|
||
|
||
return data |