返回提交历史
Modified
g4f/gui/server/website.py
+20
-4
Modified
setup.py
+1
-1
XFEstudio/gpt4free
Use tempfile if cookies dir is not writeable
1b5942c5
代码差异
2 个文件
+21
-5
@@ -2,8 +2,10 @@ from __future__ import annotations
2
2
3
3
import os
4
4
import requests
5
import tempfile
5
6
from datetime import datetime
6
7
from flask import send_from_directory, redirect
8
7
9
from ...image.copy_images import secure_filename
8
10
from ...cookies import get_cookies_dir
9
11
from ...errors import VersionNotFoundError
@@ -11,7 +13,7 @@ from ...constants import STATIC_URL, DOWNLOAD_URL, DIST_DIR
11
13
from ... import version
12
14
13
15
def redirect_home():
14
return redirect('/chat')
16
return redirect('/chat/')
15
17
16
18
def render(filename = "chat"):
17
19
if os.path.exists(DIST_DIR):
@@ -24,21 +26,35 @@ def render(filename = "chat"):
24
26
today = datetime.today().strftime('%Y-%m-%d')
25
27
cache_dir = os.path.join(get_cookies_dir(), ".gui_cache")
26
28
cache_file = os.path.join(cache_dir, f"{filename}.{today}.{secure_filename(f'{version.utils.current_version}-{latest_version}')}.html")
29
is_tempfile = False
27
30
if not os.path.exists(cache_file):
28
os.makedirs(cache_dir, exist_ok=True)
31
if os.access(cache_file, os.W_OK):
32
cache_file = tempfile.NamedTemporaryFile(suffix=".html", delete=False)
33
is_tempfile = True
34
else:
35
os.makedirs(cache_dir, exist_ok=True)
29
36
response = requests.get(f"{DOWNLOAD_URL}{filename}.html")
30
37
if not response.ok:
38
found = None
31
39
for root, _, files in os.walk(cache_dir):
32
40
for file in files:
33
41
if file.startswith(filename):
34
return send_from_directory(os.path.abspath(root), file)
42
found = os.path.abspath(root), file
35
43
break
44
if found:
45
return send_from_directory(found[0], found[1])
46
else:
47
response.raise_for_status()
36
48
html = response.text
37
49
html = html.replace("../dist/", f"dist/")
38
50
html = html.replace("\"dist/", f"\"{STATIC_URL}dist/")
39
51
with open(cache_file, 'w', encoding='utf-8') as f:
40
52
f.write(html)
41
return send_from_directory(os.path.abspath(cache_dir), os.path.basename(cache_file))
53
try:
54
return send_from_directory(os.path.abspath(cache_dir), os.path.basename(cache_file))
55
finally:
56
if is_tempfile:
57
os.unlink(cache_file)
42
58
43
59
class Website:
44
60
def __init__(self, app) -> None:
@@ -4,7 +4,7 @@ from setuptools import find_packages, setup
4
4
5
5
current_dir = os.path.abspath(os.path.dirname(__file__))
6
6
7
with open(os.path.join(current_dir, 'README.md'), "r") as f:
7
with open(os.path.join(current_dir, 'README.md'), "r", encoding="utf-8") as f:
8
8
long_description = f.read()
9
9
10
10
long_description = long_description.replace("[!NOTE]", "")