Optimize Python code

Former-commit-id: 8d08367816ff84a2a2f62470b06421c0340f5fdb
pull/174/head
Physton 2023-06-15 17:21:56 +08:00
parent 1bd3eb61f4
commit 510fa649c6
46 changed files with 10051 additions and 179 deletions

2015
i18n.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
f6a24778b29e3ac4ce40489a30befea649c34fe9

67
javascript/main.entry.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
eee6babe1b0f66667f5d0cc62da24707704274ea

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
94f23b71949a9379ef12a4b726fe7babe1ebb494

View File

@ -1,7 +0,0 @@
translators
fastapi
hashlib
openai
boto3
aliyun-python-sdk-core
aliyun-python-sdk-alimt

View File

@ -5,23 +5,24 @@ from pathlib import Path
from modules import script_callbacks, extra_networks, prompt_parser from modules import script_callbacks, extra_networks, prompt_parser
from fastapi import FastAPI, Body, Request, Response from fastapi import FastAPI, Body, Request, Response
from fastapi.responses import FileResponse from fastapi.responses import FileResponse
from scripts.storage import storage from scripts.physton_prompt.storage import Storage
from scripts.get_extensions import get_extensions from scripts.physton_prompt.get_extensions import get_extensions
from scripts.get_token_counter import get_token_counter from scripts.physton_prompt.get_token_counter import get_token_counter
from scripts.get_i18n import get_i18n from scripts.physton_prompt.get_i18n import get_i18n
from scripts.get_translate_apis import get_translate_apis from scripts.physton_prompt.get_translate_apis import get_translate_apis
from scripts.translate import translate from scripts.physton_prompt.translate import translate
from scripts.history import history from scripts.physton_prompt.history import History
from scripts.csv import get_csvs, get_csv from scripts.physton_prompt.csv import get_csvs, get_csv
from scripts.styles import getStyleFullPath, getExtensionCssList from scripts.physton_prompt.styles import get_style_full_path, get_extension_css_list
from scripts.get_extra_networks import get_extra_networks from scripts.physton_prompt.get_extra_networks import get_extra_networks
from scripts.packages import get_packages_state, install_package from scripts.physton_prompt.packages import get_packages_state, install_package
from scripts.gen_openai import gen_openai from scripts.physton_prompt.gen_openai import gen_openai
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
from scripts.get_version import get_git_commit_version, get_git_remote_versions, get_latest_version from scripts.physton_prompt.get_version import get_git_commit_version, get_git_remote_versions, get_latest_version
try: try:
from modules.shared import cmd_opts from modules.shared import cmd_opts
if cmd_opts.data_dir: if cmd_opts.data_dir:
extension_dir = os.path.dirname(os.path.abspath(__file__)) + '/../' extension_dir = os.path.dirname(os.path.abspath(__file__)) + '/../'
extension_dir = os.path.normpath(extension_dir) + os.path.sep extension_dir = os.path.normpath(extension_dir) + os.path.sep
@ -52,9 +53,10 @@ As you have set the --data-dir parameter and have not added the extension path t
except Exception as e: except Exception as e:
pass pass
def on_app_started(_: gr.Blocks, app: FastAPI): def on_app_started(_: gr.Blocks, app: FastAPI):
st = storage() st = Storage()
hi = history() hi = History()
@app.get("/physton_prompt/get_version") @app.get("/physton_prompt/get_version")
async def _get_version(): async def _get_version():
@ -179,7 +181,7 @@ def on_app_started(_: gr.Blocks, app: FastAPI):
@app.get("/physton_prompt/get_histories") @app.get("/physton_prompt/get_histories")
async def _get_histories(type: str): async def _get_histories(type: str):
return {"histories": hi.get_histoies(type)} return {"histories": hi.get_histories(type)}
@app.get("/physton_prompt/get_favorites") @app.get("/physton_prompt/get_favorites")
async def _get_favorites(type: str): async def _get_favorites(type: str):
@ -285,7 +287,8 @@ def on_app_started(_: gr.Blocks, app: FastAPI):
return {"success": hi.remove_histories(data['type'])} return {"success": hi.remove_histories(data['type'])}
@app.post("/physton_prompt/translate") @app.post("/physton_prompt/translate")
async def _translate(text: str = Body(...), from_lang: str = Body(...), to_lang: str = Body(...), api: str = Body(...), api_config: dict = Body(...)): async def _translate(text: str = Body(...), from_lang: str = Body(...), to_lang: str = Body(...),
api: str = Body(...), api_config: dict = Body(...)):
return translate(text, from_lang, to_lang, api, api_config) return translate(text, from_lang, to_lang, api, api_config)
@app.post("/physton_prompt/translates") @app.post("/physton_prompt/translates")
@ -316,14 +319,14 @@ def on_app_started(_: gr.Blocks, app: FastAPI):
@app.get("/physton_prompt/styles") @app.get("/physton_prompt/styles")
async def _styles(file: str): async def _styles(file: str):
file_path = getStyleFullPath(file) file_path = get_style_full_path(file)
if not os.path.exists(file_path): if not os.path.exists(file_path):
return Response(status_code=404) return Response(status_code=404)
return FileResponse(file_path, filename=os.path.basename(file_path)) return FileResponse(file_path, filename=os.path.basename(file_path))
@app.get("/physton_prompt/get_extension_css_list") @app.get("/physton_prompt/get_extension_css_list")
async def _get_extension_css_list(): async def _get_extension_css_list():
return {"css_list": getExtensionCssList()} return {"css_list": get_extension_css_list()}
@app.get("/physton_prompt/get_extra_networks") @app.get("/physton_prompt/get_extra_networks")
async def _get_extra_networks(): async def _get_extra_networks():
@ -341,8 +344,9 @@ def on_app_started(_: gr.Blocks, app: FastAPI):
except Exception as e: except Exception as e:
return {"success": False, 'message': str(e)} return {"success": False, 'message': str(e)}
try: try:
script_callbacks.on_app_started(on_app_started) script_callbacks.on_app_started(on_app_started)
print('sd-webui-prompt-all-in-one background API service started successfully.') print('sd-webui-prompt-all-in-one background API service started successfully.')
except Exception as e: except Exception as e:
print(f'sd-webui-prompt-all-in-one background API service failed to start: {e}') print(f'sd-webui-prompt-all-in-one background API service failed to start: {e}')

View File

@ -7,6 +7,7 @@ dirs = [
os.path.join(base_dir, 'extensions', 'a1111-sd-webui-tagcomplete', 'tags'), os.path.join(base_dir, 'extensions', 'a1111-sd-webui-tagcomplete', 'tags'),
] ]
def get_csvs(): def get_csvs():
global base_dir global base_dir
csvs = [] csvs = []
@ -28,8 +29,9 @@ def get_csvs():
}) })
return csvs return csvs
def get_csv(key): def get_csv(key):
path = base_dir + key path = base_dir + key
if not os.path.exists(path): if not os.path.exists(path):
return None return None
return path return path

View File

@ -1,4 +1,5 @@
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
def gen_openai(messages, api_config): def gen_openai(messages, api_config):
import openai import openai

View File

@ -1,6 +1,7 @@
import os import os
from pathlib import Path from pathlib import Path
def get_extensions(): def get_extensions():
extends_dir = os.path.join(Path().absolute(), 'extensions') extends_dir = os.path.join(Path().absolute(), 'extensions')
extends = [] extends = []

View File

@ -12,11 +12,12 @@ filters = [
'metadata', 'metadata',
] ]
def get_extra_networks(): def get_extra_networks():
result = [] result = []
try: try:
for extra_page in ui_extra_networks.extra_pages: for extra_page in ui_extra_networks.extra_pages:
resultItem = { result_item = {
'name': extra_page.name, 'name': extra_page.name,
'title': extra_page.title, 'title': extra_page.title,
'items': [] 'items': []
@ -58,9 +59,9 @@ def get_extra_networks():
if filter in item: if filter in item:
del item[filter] del item[filter]
resultItem['items'].append(item) result_item['items'].append(item)
result.append(resultItem) result.append(result_item)
except Exception as e: except Exception as e:
pass pass
return result return result

View File

@ -2,12 +2,14 @@ import os
import json import json
i18n = {} i18n = {}
def get_i18n(reload=False): def get_i18n(reload=False):
global i18n global i18n
if reload or not i18n: if reload or not i18n:
i18n = {} i18n = {}
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
config_file = os.path.join(current_dir, '../i18n.json') config_file = os.path.join(current_dir, '../../i18n.json')
config_file = os.path.normpath(config_file) config_file = os.path.normpath(config_file)
with open(config_file, 'r', encoding='utf8') as f: with open(config_file, 'r', encoding='utf8') as f:
i18n = json.load(f) i18n = json.load(f)

View File

@ -1,13 +1,16 @@
from scripts.storage import storage from scripts.physton_prompt.storage import Storage
storage = storage()
from scripts.get_i18n import get_i18n storage = Storage()
from scripts.physton_prompt.get_i18n import get_i18n
def replace_vars(text, vars): def replace_vars(text, vars):
for key, value in vars.items(): for key, value in vars.items():
text = text.replace("{" + key + "}", value) text = text.replace("{" + key + "}", value)
return text return text
def get_lang(key, vars = {}):
def get_lang(key, vars={}):
i18n = get_i18n() i18n = get_i18n()
code = storage.get('languageCode') code = storage.get('languageCode')
@ -42,4 +45,3 @@ def get_lang(key, vars = {}):
return find return find
return replace_vars(key, vars) return replace_vars(key, vars)

View File

@ -2,6 +2,7 @@ from modules import script_callbacks, extra_networks, prompt_parser
from modules.sd_hijack import model_hijack from modules.sd_hijack import model_hijack
from functools import partial, reduce from functools import partial, reduce
def get_token_counter(text, steps): def get_token_counter(text, steps):
# copy from modules.ui.py # copy from modules.ui.py
try: try:
@ -15,7 +16,8 @@ def get_token_counter(text, steps):
# messages related to it in console # messages related to it in console
prompt_schedules = [[[steps, text]]] prompt_schedules = [[[steps, text]]]
flat_prompts = reduce(lambda list1, list2: list1+list2, prompt_schedules) flat_prompts = reduce(lambda list1, list2: list1 + list2, prompt_schedules)
prompts = [prompt_text for step, prompt_text in flat_prompts] prompts = [prompt_text for step, prompt_text in flat_prompts]
token_count, max_length = max([model_hijack.get_prompt_lengths(prompt) for prompt in prompts], key=lambda args: args[0]) token_count, max_length = max([model_hijack.get_prompt_lengths(prompt) for prompt in prompts],
key=lambda args: args[0])
return {"token_count": token_count, "max_length": max_length} return {"token_count": token_count, "max_length": max_length}

View File

@ -1,16 +1,19 @@
import os import os
import json import json
# from scripts.storage import storage
# from scripts.physton_prompt.storage import Storage
translate_apis = {} translate_apis = {}
# st = storage()
# st = Storage()
def get_translate_apis(reload=False): def get_translate_apis(reload=False):
global translate_apis global translate_apis
global st global st
if reload or not translate_apis: if reload or not translate_apis:
translate_apis = {} translate_apis = {}
current_dir = os.path.dirname(os.path.abspath(__file__)) current_dir = os.path.dirname(os.path.abspath(__file__))
config_file = os.path.join(current_dir, '../translate_apis.json') config_file = os.path.join(current_dir, '../../translate_apis.json')
config_file = os.path.normpath(config_file) config_file = os.path.normpath(config_file)
with open(config_file, 'r', encoding='utf8') as f: with open(config_file, 'r', encoding='utf8') as f:
translate_apis = json.load(f) translate_apis = json.load(f)

View File

@ -4,8 +4,9 @@ import requests
import subprocess import subprocess
import hashlib import hashlib
def get_git_commit_version(): def get_git_commit_version():
extension_dir = os.path.dirname(os.path.abspath(__file__)) + '/../' extension_dir = os.path.dirname(os.path.abspath(__file__)) + '/../../'
extension_dir = os.path.normpath(extension_dir) extension_dir = os.path.normpath(extension_dir)
git_path = os.path.join(extension_dir, '.git') git_path = os.path.join(extension_dir, '.git')
if os.path.exists(git_path): if os.path.exists(git_path):
@ -31,6 +32,7 @@ def get_git_commit_version():
return '' return ''
def _handle_versions(response, filter_update_readme=False): def _handle_versions(response, filter_update_readme=False):
try: try:
if response.status_code != 200: if response.status_code != 200:
@ -56,6 +58,7 @@ def _handle_versions(response, filter_update_readme=False):
except Exception as e: except Exception as e:
return [] return []
def get_git_remote_versions(page=1, per_page=100, filter_update_readme=False): def get_git_remote_versions(page=1, per_page=100, filter_update_readme=False):
api_urls = [ api_urls = [
'https://api.github.com/repos/physton/sd-webui-prompt-all-in-one/commits', 'https://api.github.com/repos/physton/sd-webui-prompt-all-in-one/commits',
@ -74,11 +77,12 @@ def get_git_remote_versions(page=1, per_page=100, filter_update_readme=False):
return [] return []
def get_latest_version(): def get_latest_version():
current_version = get_git_commit_version() current_version = get_git_commit_version()
# if not current_version: # if not current_version:
# return current_version # return current_version
versions = get_git_remote_versions(1, 10, True) versions = get_git_remote_versions(1, 10, True)
if len(versions) < 1: if len(versions) < 1:
return current_version return current_version
return versions[0]['version'] return versions[0]['version']

View File

@ -1,9 +1,10 @@
from scripts.storage import storage from scripts.physton_prompt.storage import Storage
import uuid import uuid
import time import time
class history:
histoies = { class History:
histories = {
'txt2img': [], 'txt2img': [],
'txt2img_neg': [], 'txt2img_neg': [],
'img2img': [], 'img2img': [],
@ -16,13 +17,13 @@ class history:
'img2img_neg': [], 'img2img_neg': [],
} }
max = 100 max = 100
storage = storage() storage = Storage()
def __init__(self): def __init__(self):
for type in self.histoies: for type in self.histories:
self.histoies[type] = self.storage.get('history.' + type) self.histories[type] = self.storage.get('history.' + type)
if self.histoies[type] is None: if self.histories[type] is None:
self.histoies[type] = [] self.histories[type] = []
self.__save_histories(type) self.__save_histories(type)
for type in self.favorites: for type in self.favorites:
@ -32,16 +33,16 @@ class history:
self.__save_favorites(type) self.__save_favorites(type)
def __save_histories(self, type): def __save_histories(self, type):
self.storage.set('history.' + type, self.histoies[type]) self.storage.set('history.' + type, self.histories[type])
def __save_favorites(self, type): def __save_favorites(self, type):
self.storage.set('favorite.' + type, self.favorites[type]) self.storage.set('favorite.' + type, self.favorites[type])
def get_histoies(self, type): def get_histories(self, type):
histoies = self.histoies[type] histories = self.histories[type]
for history in histoies: for history in histories:
history['is_favorite'] = self.is_favorite(type, history['id']) history['is_favorite'] = self.is_favorite(type, history['id'])
return histoies return histories
def is_favorite(self, type, id): def is_favorite(self, type, id):
for favorite in self.favorites[type]: for favorite in self.favorites[type]:
@ -53,8 +54,8 @@ class history:
return self.favorites[type] return self.favorites[type]
def push_history(self, type, tags, prompt, name=''): def push_history(self, type, tags, prompt, name=''):
if len(self.histoies[type]) >= self.max: if len(self.histories[type]) >= self.max:
self.histoies[type].pop(0) self.histories[type].pop(0)
item = { item = {
'id': str(uuid.uuid1()), 'id': str(uuid.uuid1()),
'time': int(time.time()), 'time': int(time.time()),
@ -62,7 +63,7 @@ class history:
'tags': tags, 'tags': tags,
'prompt': prompt, 'prompt': prompt,
} }
self.histoies[type].append(item) self.histories[type].append(item)
self.__save_histories(type) self.__save_histories(type)
return item return item
@ -79,12 +80,12 @@ class history:
return item return item
def get_latest_history(self, type): def get_latest_history(self, type):
if len(self.histoies[type]) > 0: if len(self.histories[type]) > 0:
return self.histoies[type][-1] return self.histories[type][-1]
return None return None
def set_history(self, type, id, tags, prompt, name): def set_history(self, type, id, tags, prompt, name):
for history in self.histoies[type]: for history in self.histories[type]:
if history['id'] == id: if history['id'] == id:
history['tags'] = tags history['tags'] = tags
history['prompt'] = prompt history['prompt'] = prompt
@ -106,7 +107,7 @@ class history:
return False return False
def set_history_name(self, type, id, name): def set_history_name(self, type, id, name):
for history in self.histoies[type]: for history in self.histories[type]:
if history['id'] == id: if history['id'] == id:
history['name'] = name history['name'] = name
self.__save_histories(type) self.__save_histories(type)
@ -122,7 +123,7 @@ class history:
if favorite['id'] == id: if favorite['id'] == id:
favorite['name'] = name favorite['name'] = name
self.__save_favorites(type) self.__save_favorites(type)
for history in self.histoies[type]: for history in self.histories[type]:
if history['id'] == id: if history['id'] == id:
history['name'] = name history['name'] = name
self.__save_histories(type) self.__save_histories(type)
@ -132,7 +133,7 @@ class history:
def dofavorite(self, type, id): def dofavorite(self, type, id):
if self.is_favorite(type, id): if self.is_favorite(type, id):
return False return False
for history in self.histoies[type]: for history in self.histories[type]:
if history['id'] == id: if history['id'] == id:
self.favorites[type].append(history) self.favorites[type].append(history)
self.__save_favorites(type) self.__save_favorites(type)
@ -150,15 +151,14 @@ class history:
return False return False
def remove_history(self, type, id): def remove_history(self, type, id):
for history in self.histoies[type]: for history in self.histories[type]:
if history['id'] == id: if history['id'] == id:
self.histoies[type].remove(history) self.histories[type].remove(history)
self.__save_histories(type) self.__save_histories(type)
return True return True
return False return False
def remove_histories(self, type): def remove_histories(self, type):
self.histoies[type] = [] self.histories[type] = []
self.__save_histories(type) self.__save_histories(type)
return True return True

View File

@ -1,5 +1,5 @@
import launch import launch
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
packages = { packages = {
"chardet": "chardet", "chardet": "chardet",
@ -14,6 +14,7 @@ packages = {
"aliyunsdkalimt": "aliyun-python-sdk-alimt", "aliyunsdkalimt": "aliyun-python-sdk-alimt",
} }
def get_packages_state(): def get_packages_state():
states = [] states = []
for package_name in packages: for package_name in packages:
@ -30,6 +31,7 @@ def get_packages_state():
return states return states
def install_package(name, package): def install_package(name, package):
result = {'state': False, 'message': ''} result = {'state': False, 'message': ''}
try: try:

View File

@ -3,13 +3,15 @@ from pathlib import Path
import json import json
import time import time
class storage:
class Storage:
storage_path = '' storage_path = ''
def __init__(self): def __init__(self):
pass pass
def __get_storage_path(self): def __get_storage_path(self):
self.storage_path = os.path.dirname(os.path.abspath(__file__)) + '/../storage' self.storage_path = os.path.dirname(os.path.abspath(__file__)) + '/../../storage'
self.storage_path = os.path.normpath(self.storage_path) self.storage_path = os.path.normpath(self.storage_path)
if not os.path.exists(self.storage_path): if not os.path.exists(self.storage_path):
os.makedirs(self.storage_path) os.makedirs(self.storage_path)

View File

@ -1,15 +1,18 @@
import os import os
from scripts.storage import storage from scripts.physton_prompt.storage import Storage
storage = storage()
styles_path = os.path.dirname(os.path.abspath(__file__)) + '/../styles' storage = Storage()
styles_path = os.path.dirname(os.path.abspath(__file__)) + '/../../styles'
styles_path = os.path.normpath(styles_path) styles_path = os.path.normpath(styles_path)
def getStyleFullPath(file):
def get_style_full_path(file):
global styles_path global styles_path
return os.path.join(styles_path, file) return os.path.join(styles_path, file)
def getExtensionCssList():
def get_extension_css_list():
global styles_path global styles_path
extension_path = os.path.join(styles_path, 'extensions') extension_path = os.path.join(styles_path, 'extensions')
if not os.path.exists(extension_path): if not os.path.exists(extension_path):

View File

@ -1,22 +1,27 @@
import json import json
import hashlib import hashlib
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
from scripts.get_translate_apis import get_translate_apis from scripts.physton_prompt.get_translate_apis import get_translate_apis
from scripts.translator.alibaba_translator import AlibabaTranslator from scripts.physton_prompt.translator.alibaba_translator import AlibabaTranslator
from scripts.translator.amazon_translator import AmazonTranslator from scripts.physton_prompt.translator.amazon_translator import AmazonTranslator
from scripts.translator.baidu_translator import BaiduTranslator from scripts.physton_prompt.translator.baidu_translator import BaiduTranslator
from scripts.translator.deepl_translator import DeeplTranslator from scripts.physton_prompt.translator.deepl_translator import DeeplTranslator
from scripts.translator.google_tanslator import GoogleTranslator from scripts.physton_prompt.translator.google_tanslator import GoogleTranslator
from scripts.translator.microsoft_translator import MicrosoftTranslator from scripts.physton_prompt.translator.microsoft_translator import MicrosoftTranslator
from scripts.translator.openai_translator import OpenaiTranslator from scripts.physton_prompt.translator.openai_translator import OpenaiTranslator
from scripts.translator.tencent_translator import TencentTranslator from scripts.physton_prompt.translator.tencent_translator import TencentTranslator
from scripts.translator.translators_translator import TranslatorsTranslator from scripts.physton_prompt.translator.translators_translator import TranslatorsTranslator
from scripts.translator.yandex_translator import YandexTranslator from scripts.physton_prompt.translator.yandex_translator import YandexTranslator
from scripts.translator.youdao_translator import YoudaoTranslator from scripts.physton_prompt.translator.youdao_translator import YoudaoTranslator
caches = {} caches = {}
def translate(text, from_lang, to_lang, api, api_config = {}):
def translate(text, from_lang, to_lang, api, api_config=None):
if api_config is None:
api_config = {}
global caches global caches
def _translate_result(success, message, translated_text): def _translate_result(success, message, translated_text):
return { return {
"success": success, "success": success,
@ -28,6 +33,7 @@ def translate(text, from_lang, to_lang, api, api_config = {}):
"api": api, "api": api,
"api_config": api_config "api_config": api_config
} }
def _cache_name(text): def _cache_name(text):
cache_name = f'{api}.{from_lang}.{to_lang}.{text}.' + json.dumps(api_config) cache_name = f'{api}.{from_lang}.{to_lang}.{text}.' + json.dumps(api_config)
cache_name = hashlib.md5(cache_name.encode('utf-8')).hexdigest() cache_name = hashlib.md5(cache_name.encode('utf-8')).hexdigest()
@ -69,7 +75,6 @@ def translate(text, from_lang, to_lang, api, api_config = {}):
if cache_name in caches: if cache_name in caches:
return _translate_result(True, '', caches[cache_name]) return _translate_result(True, '', caches[cache_name])
if api == 'google': if api == 'google':
translator = GoogleTranslator() translator = GoogleTranslator()
elif api == 'microsoft': elif api == 'microsoft':
@ -105,7 +110,7 @@ def translate(text, from_lang, to_lang, api, api_config = {}):
translate_indexes = [] translate_indexes = []
for index in range(len(texts)): for index in range(len(texts)):
item = texts[index] item = texts[index]
if item == None: if item is None:
translate_indexes.append(index) translate_indexes.append(index)
translate_texts.append(text[index]) translate_texts.append(text[index])
if len(translate_texts) < 1: if len(translate_texts) < 1:

View File

@ -1,7 +1,8 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import json import json
from math import ceil from math import ceil
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class AlibabaTranslator(BaseTranslator): class AlibabaTranslator(BaseTranslator):
def __init__(self): def __init__(self):
@ -31,7 +32,7 @@ class AlibabaTranslator(BaseTranslator):
request.set_SourceLanguage(self.from_lang) request.set_SourceLanguage(self.from_lang)
request.set_Scene("general") request.set_Scene("general")
request.set_SourceText(text) request.set_SourceText(text)
request.set_FormatType("text") #翻译文本的格式 request.set_FormatType("text") # 翻译文本的格式
request.set_TargetLanguage(self.to_lang) request.set_TargetLanguage(self.to_lang)
request.set_method("POST") request.set_method("POST")
response = client.do_action_with_exception(request) response = client.do_action_with_exception(request)

View File

@ -1,5 +1,6 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class AmazonTranslator(BaseTranslator): class AmazonTranslator(BaseTranslator):
def __init__(self): def __init__(self):
@ -19,7 +20,8 @@ class AmazonTranslator(BaseTranslator):
raise Exception(get_lang('is_required', {'0': 'Region'})) raise Exception(get_lang('is_required', {'0': 'Region'}))
import boto3 import boto3
translate = boto3.client(service_name='translate', region_name=region, use_ssl=True, aws_access_key_id=api_key_id, aws_secret_access_key=api_key_secret) translate = boto3.client(service_name='translate', region_name=region, use_ssl=True,
aws_access_key_id=api_key_id, aws_secret_access_key=api_key_secret)
result = translate.translate_text(Text=text, SourceLanguageCode=self.from_lang, TargetLanguageCode=self.to_lang) result = translate.translate_text(Text=text, SourceLanguageCode=self.from_lang, TargetLanguageCode=self.to_lang)
if 'TranslatedText' not in result: if 'TranslatedText' not in result:
raise Exception(get_lang('no_response_from', {'0': 'Amazon'})) raise Exception(get_lang('no_response_from', {'0': 'Amazon'}))

View File

@ -1,8 +1,9 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import requests import requests
import hashlib import hashlib
import random import random
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class BaiduTranslator(BaseTranslator): class BaiduTranslator(BaseTranslator):
def __init__(self): def __init__(self):

View File

@ -1,10 +1,11 @@
from scripts.get_translate_apis import get_translate_apis
from abc import ABC, abstractmethod
from math import ceil
import time import time
from concurrent.futures import ThreadPoolExecutor, as_completed from abc import ABC, abstractmethod
from collections import OrderedDict from concurrent.futures import ThreadPoolExecutor
from scripts.get_lang import get_lang from math import ceil
from scripts.physton_prompt.get_lang import get_lang
from scripts.physton_prompt.get_translate_apis import get_translate_apis
class BaseTranslator(ABC): class BaseTranslator(ABC):
from_lang = None from_lang = None
@ -55,7 +56,6 @@ class BaseTranslator(ABC):
pass pass
def translate_batch(self, texts): def translate_batch(self, texts):
self.concurrent = self.get_concurrent()
concurrent = self.get_concurrent() concurrent = self.get_concurrent()
texts_len = len(texts) texts_len = len(texts)
group_num = ceil(texts_len / concurrent) group_num = ceil(texts_len / concurrent)
@ -64,7 +64,7 @@ class BaseTranslator(ABC):
results = [] results = []
with ThreadPoolExecutor(max_workers=concurrent) as executor: with ThreadPoolExecutor(max_workers=concurrent) as executor:
for i in range(group_num): for i in range(group_num):
group_texts = texts[i*concurrent: (i+1)*concurrent] group_texts = texts[i * concurrent: (i + 1) * concurrent]
texts_dict = {} texts_dict = {}
futures = [] futures = []
for i in range(len(group_texts)): for i in range(len(group_texts)):

View File

@ -1,6 +1,7 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import requests import requests
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class DeeplTranslator(BaseTranslator): class DeeplTranslator(BaseTranslator):
def __init__(self): def __init__(self):

View File

@ -1,6 +1,7 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import requests import requests
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class GoogleTranslator(BaseTranslator): class GoogleTranslator(BaseTranslator):
def __init__(self): def __init__(self):

View File

@ -1,7 +1,8 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import uuid import uuid
import requests import requests
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class MicrosoftTranslator(BaseTranslator): class MicrosoftTranslator(BaseTranslator):
def __init__(self): def __init__(self):

View File

@ -1,6 +1,7 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import json import json
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class OpenaiTranslator(BaseTranslator): class OpenaiTranslator(BaseTranslator):
def __init__(self): def __init__(self):
@ -30,8 +31,8 @@ class OpenaiTranslator(BaseTranslator):
messages = [ messages = [
{"role": "system", "content": "You are a translator assistant."}, {"role": "system", "content": "You are a translator assistant."},
{"role": {
"user", "role": "user",
"content": f"You are a translator assistant. Please translate the following JSON data {self.to_lang}. Preserve the original format. Only return the translation result, without any additional content or annotations. If the prompt word is in the target language, please send it to me unchanged:\n{body_str}" "content": f"You are a translator assistant. Please translate the following JSON data {self.to_lang}. Preserve the original format. Only return the translation result, without any additional content or annotations. If the prompt word is in the target language, please send it to me unchanged:\n{body_str}"
}, },
] ]
@ -39,14 +40,13 @@ class OpenaiTranslator(BaseTranslator):
if len(completion.choices) == 0: if len(completion.choices) == 0:
raise Exception(get_lang('no_response_from', {'0': 'OpenAI'})) raise Exception(get_lang('no_response_from', {'0': 'OpenAI'}))
content = completion.choices[0].message.content content = completion.choices[0].message.content
result_json = ''
try: try:
# 找到第一个[,然后找到最后一个],截取中间的内容 # 找到第一个[,然后找到最后一个],截取中间的内容
start = content.index('[') start = content.index('[')
end = content.rindex(']') end = content.rindex(']')
if start == -1 or end == -1: if start == -1 or end == -1:
raise Exception(get_lang('response_error', {'0': 'OpenAI'})) raise Exception(get_lang('response_error', {'0': 'OpenAI'}))
result_json = '['+ content[start+1:end] +']' result_json = '[' + content[start + 1:end] + ']'
# 解析json # 解析json
result = json.loads(result_json) result = json.loads(result_json)
if isinstance(text, list): if isinstance(text, list):

View File

@ -1,8 +1,14 @@
from scripts.translator.base_tanslator import BaseTranslator import hashlib
import requests import hmac
import hashlib, hmac, json, time import json
import time
from datetime import datetime from datetime import datetime
from scripts.get_lang import get_lang
import requests
from scripts.physton_prompt.get_lang import get_lang
from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
class TencentTranslator(BaseTranslator): class TencentTranslator(BaseTranslator):
def __init__(self): def __init__(self):
@ -59,7 +65,7 @@ class TencentTranslator(BaseTranslator):
return result['Response']['TargetTextList'] return result['Response']['TargetTextList']
def sign_tencent(secret_id, secret_key, regin, params, action="TextTranslate", version = "2018-03-21"): def sign_tencent(secret_id, secret_key, regin, params, action="TextTranslate", version="2018-03-21"):
host = 'tmt.tencentcloudapi.com' host = 'tmt.tencentcloudapi.com'
endpoint = "https://" + host endpoint = "https://" + host
@ -78,25 +84,25 @@ def sign_tencent(secret_id, secret_key, regin, params, action="TextTranslate", v
signed_headers = "content-type;host;x-tc-action" signed_headers = "content-type;host;x-tc-action"
hashed_request_payload = hashlib.sha256(payload.encode("utf-8")).hexdigest() hashed_request_payload = hashlib.sha256(payload.encode("utf-8")).hexdigest()
canonical_request = (http_request_method + "\n" + canonical_request = (http_request_method + "\n" +
canonical_uri + "\n" + canonical_uri + "\n" +
canonical_querystring + "\n" + canonical_querystring + "\n" +
canonical_headers + "\n" + canonical_headers + "\n" +
signed_headers + "\n" + signed_headers + "\n" +
hashed_request_payload) hashed_request_payload)
# ************* 步骤 2拼接待签名字符串 ************* # ************* 步骤 2拼接待签名字符串 *************
credential_scope = date + "/" + service + "/" + "tc3_request" credential_scope = date + "/" + service + "/" + "tc3_request"
hashed_canonical_request = hashlib.sha256(canonical_request.encode("utf-8")).hexdigest() hashed_canonical_request = hashlib.sha256(canonical_request.encode("utf-8")).hexdigest()
string_to_sign = (algorithm + "\n" + string_to_sign = (algorithm + "\n" +
str(timestamp) + "\n" + str(timestamp) + "\n" +
credential_scope + "\n" + credential_scope + "\n" +
hashed_canonical_request) hashed_canonical_request)
# ************* 步骤 3计算签名 ************* # ************* 步骤 3计算签名 *************
# 计算签名摘要函数 # 计算签名摘要函数
def sign(key, msg): def sign(key, msg):
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest() return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
secret_date = sign(("TC3" + secret_key).encode("utf-8"), date) secret_date = sign(("TC3" + secret_key).encode("utf-8"), date)
secret_service = sign(secret_date, service) secret_service = sign(secret_date, service)
secret_signing = sign(secret_service, "tc3_request") secret_signing = sign(secret_service, "tc3_request")
@ -104,9 +110,9 @@ def sign_tencent(secret_id, secret_key, regin, params, action="TextTranslate", v
# ************* 步骤 4拼接 Authorization ************* # ************* 步骤 4拼接 Authorization *************
authorization = (algorithm + " " + authorization = (algorithm + " " +
"Credential=" + secret_id + "/" + credential_scope + ", " + "Credential=" + secret_id + "/" + credential_scope + ", " +
"SignedHeaders=" + signed_headers + ", " + "SignedHeaders=" + signed_headers + ", " +
"Signature=" + signature) "Signature=" + signature)
return { return {
"url": endpoint, "url": endpoint,

View File

@ -1,6 +1,7 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import os import os
class TranslatorsTranslator(BaseTranslator): class TranslatorsTranslator(BaseTranslator):
translator = None translator = None
@ -15,4 +16,5 @@ class TranslatorsTranslator(BaseTranslator):
tss.server_region = region tss.server_region = region
tss._bing.server_region = region tss._bing.server_region = region
tss._google.server_region = region tss._google.server_region = region
return translate_text(text, from_language=self.from_lang, to_language=self.to_lang, translator=self.translator, timeout=30) return translate_text(text, from_language=self.from_lang, to_language=self.to_lang, translator=self.translator,
timeout=30)

View File

@ -1,6 +1,7 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import requests import requests
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class YandexTranslator(BaseTranslator): class YandexTranslator(BaseTranslator):
def __init__(self): def __init__(self):
@ -32,9 +33,9 @@ class YandexTranslator(BaseTranslator):
"Authorization": f"Api-Key {api_key}" "Authorization": f"Api-Key {api_key}"
} }
response = requests.post('https://translate.api.cloud.yandex.net/translate/v2/translate', response = requests.post('https://translate.api.cloud.yandex.net/translate/v2/translate',
json = body, json=body,
headers = headers headers=headers
) )
result = response.json() result = response.json()
if not result: if not result:
raise Exception(get_lang('no_response_from', {'0': 'Yandex'})) raise Exception(get_lang('no_response_from', {'0': 'Yandex'}))

View File

@ -1,9 +1,10 @@
from scripts.translator.base_tanslator import BaseTranslator from scripts.physton_prompt.translator.base_tanslator import BaseTranslator
import requests import requests
import hashlib import hashlib
import random import random
import time import time
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
class YoudaoTranslator(BaseTranslator): class YoudaoTranslator(BaseTranslator):
def __init__(self): def __init__(self):
@ -31,9 +32,10 @@ class YoudaoTranslator(BaseTranslator):
sign_text = "".join(text) sign_text = "".join(text)
else: else:
sign_text = text sign_text = text
if(len(sign_text) <= 20): input = ''
if len(sign_text) <= 20:
input = sign_text input = sign_text
elif(len(sign_text) > 20): elif len(sign_text) > 20:
input = sign_text[:10] + str(len(sign_text)) + sign_text[-10:] input = sign_text[:10] + str(len(sign_text)) + sign_text[-10:]
sign = app_id + input + str(salt) + curtime + app_secret sign = app_id + input + str(salt) + curtime + app_secret
sign = hashlib.sha256(sign.encode()).hexdigest() sign = hashlib.sha256(sign.encode()).hexdigest()

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
f1925daddc3097ff0dae4b577a8e100bc68fdf77

4035
styles/main.less Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
9a31b0506a52effe9cc6312a29f7a494d816eb00

1
styles/main.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
7088e9ddf5c4a87b2e5c028f215d500c6f3b7ee1

View File

@ -2,7 +2,7 @@ import os
import sys import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "..")) sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from scripts.get_lang import get_lang from scripts.physton_prompt.get_lang import get_lang
print(get_lang('is_required', {'0': '11'})) print(get_lang('is_required', {'0': '11'}))
print(get_lang('is_required1')) print(get_lang('is_required1'))

View File

@ -2,7 +2,7 @@ import os
import sys import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "..")) sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from scripts.get_version import get_git_commit_version, get_git_remote_versions, get_latest_version from scripts.physton_prompt.get_version import get_git_commit_version, get_git_remote_versions, get_latest_version
print(get_git_remote_versions()) print(get_git_remote_versions())
print(get_git_commit_version()) print(get_git_commit_version())

View File

@ -3,13 +3,13 @@ import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "..")) sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
import time import time
import json import json
from scripts.translate import translate from scripts.physton_prompt.translate import translate
from scripts.get_i18n import get_i18n from scripts.physton_prompt.get_i18n import get_i18n
from scripts.get_translate_apis import get_translate_apis from scripts.physton_prompt.get_translate_apis import get_translate_apis
from scripts.storage import storage from scripts.physton_prompt.storage import Storage
i18n = get_i18n() i18n = get_i18n()
st = storage() st = Storage()
text = 'Hello World, I am a boy' text = 'Hello World, I am a boy'
tested_file = os.path.join(os.path.dirname(__file__), 'tested.json') tested_file = os.path.join(os.path.dirname(__file__), 'tested.json')

View File

@ -5,19 +5,19 @@ sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from dotenv import load_dotenv from dotenv import load_dotenv
load_dotenv(os.path.join(os.path.dirname(__file__), '.env')) load_dotenv(os.path.join(os.path.dirname(__file__), '.env'))
from scripts.translator.microsoft_translator import MicrosoftTranslator from scripts.physton_prompt.translator.microsoft_translator import MicrosoftTranslator
from scripts.translator.google_tanslator import GoogleTranslator from scripts.physton_prompt.translator.google_tanslator import GoogleTranslator
from scripts.translator.openai_translator import OpenaiTranslator from scripts.physton_prompt.translator.openai_translator import OpenaiTranslator
from scripts.translator.amazon_translator import AmazonTranslator from scripts.physton_prompt.translator.amazon_translator import AmazonTranslator
from scripts.translator.deepl_translator import DeeplTranslator from scripts.physton_prompt.translator.deepl_translator import DeeplTranslator
from scripts.translator.baidu_translator import BaiduTranslator from scripts.physton_prompt.translator.baidu_translator import BaiduTranslator
from scripts.translator.youdao_translator import YoudaoTranslator from scripts.physton_prompt.translator.youdao_translator import YoudaoTranslator
from scripts.translator.alibaba_translator import AlibabaTranslator from scripts.physton_prompt.translator.alibaba_translator import AlibabaTranslator
from scripts.translator.tencent_translator import TencentTranslator from scripts.physton_prompt.translator.tencent_translator import TencentTranslator
from scripts.translator.translators_translator import TranslatorsTranslator from scripts.physton_prompt.translator.translators_translator import TranslatorsTranslator
from scripts.translator.yandex_translator import YandexTranslator from scripts.physton_prompt.translator.yandex_translator import YandexTranslator
from scripts.translate import translate from scripts.physton_prompt.translate import translate
text = 'Hello World' text = 'Hello World'
texts = [ texts = [

2649
translate_apis.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
ec7f9fdd27e99564d844eace9d67a0349c65fe33