返回提交历史
Added
etc/unittest/test_cli.py
+44
-0
Modified
g4f/cli/__init__.py
+17
-1
XFEstudio/gpt4free
Add support for custom cookies directory in CLI arguments and update run_api_args to handle it
02de2704
代码差异
2 个文件
+61
-1
@@ -0,0 +1,44 @@
1
from __future__ import annotations
2
3
import os
4
import tempfile
5
import unittest
6
7
from g4f.cli import get_api_parser, run_api_args
8
import g4f.cli as cli_mod
9
import g4f.cookies as cookies_mod
10
11
12
class TestCLI(unittest.TestCase):
13
def test_api_parser_includes_cookies_dir(self):
14
parser = get_api_parser(exit_on_error=False)
15
args = parser.parse_args(["--cookies-dir", "/tmp/foo"])
16
self.assertEqual(args.cookies_dir, "/tmp/foo")
17
18
def test_run_api_args_sets_cookies_dir(self):
19
# create a temporary directory to simulate user input
20
tmpdir = tempfile.mkdtemp()
21
parser = get_api_parser(exit_on_error=False)
22
args = parser.parse_args(["--cookies-dir", tmpdir])
23
24
called = {}
25
26
# patch run_api so we don't actually start uvicorn
27
orig_run = cli_mod.run_api
28
orig_set = cookies_mod.set_cookies_dir
29
try:
30
cli_mod.run_api = lambda **kwargs: called.setdefault('ran', True)
31
cookies_mod.set_cookies_dir = lambda d: called.setdefault('dir', d)
32
33
run_api_args(args)
34
35
self.assertTrue(called.get('ran'), "run_api should have been called")
36
self.assertEqual(called.get('dir'), tmpdir,
37
"cookies directory should be passed to set_cookies_dir")
38
finally:
39
cli_mod.run_api = orig_run
40
cookies_mod.set_cookies_dir = orig_set
41
42
43
if __name__ == "__main__":
44
unittest.main()
@@ -121,6 +121,13 @@ def get_api_parser(exit_on_error: bool = True) -> ArgumentParser:
121
121
help="Do not read .har or cookie files."
122
122
)
123
123
124
api_parser.add_argument(
125
"--cookies-dir",
126
type=str,
127
default=None,
128
help="Custom directory for cookies/HAR files (overrides default)."
129
)
130
124
131
api_parser.add_argument(
125
132
"--g4f-api-key",
126
133
type=str,
@@ -216,6 +223,15 @@ def run_api_args(args):
216
223
if args.cookie_browsers:
217
224
cookies.BROWSERS = [cookies[b] for b in args.cookie_browsers]
218
225
226
# Allow overriding the cookies directory from CLI
227
if getattr(args, "cookies_dir", None):
228
# create dir if it doesn't exist and update config
229
try:
230
os.makedirs(args.cookies_dir, exist_ok=True)
231
except Exception:
232
pass
233
cookies.set_cookies_dir(args.cookies_dir)
234
219
235
# Launch server
220
236
run_api(
221
237
bind=args.bind,
@@ -334,7 +350,7 @@ def generate_autocomplete():
334
350
auth_providers = ["gemini-cli", "antigravity", "qwencode", "github-copilot"]
335
351
auth_subcommands = ["status", "login"]
336
352
# Options for each command
337
api_args = ["--bind", "--port", "--debug", "--gui", "--no-gui", "--model", "--provider", "--media-provider", "--proxy", "--workers", "--disable-colors", "--ignore-cookie-files", "--g4f-api-key", "--ignored-providers", "--cookie-browsers", "--reload", "--demo", "--timeout", "--stream-timeout", "--ssl-keyfile", "--ssl-certfile", "--log-config", "--access-log", "--no-access-log", "--browser-port", "--browser-host"]
353
api_args = ["--bind", "--port", "--debug", "--gui", "--no-gui", "--model", "--provider", "--media-provider", "--proxy", "--workers", "--disable-colors", "--ignore-cookie-files", "--cookies-dir", "--g4f-api-key", "--ignored-providers", "--cookie-browsers", "--reload", "--demo", "--timeout", "--stream-timeout", "--ssl-keyfile", "--ssl-certfile", "--log-config", "--access-log", "--no-access-log", "--browser-port", "--browser-host"]
338
354
gui_args = ["--debug"]
339
355
client_args = ["--debug"]
340
356
mcp_args = ["--debug", "--http", "--host", "--port", "--origin"]