XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/gpt4free

Add support for custom cookies directory in CLI arguments and update run_api_args to handle it

02de2704
hlohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

2 个文件 +61 -1
Added etc/unittest/test_cli.py +44 -0
@@ -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()
Modified g4f/cli/__init__.py +17 -1
@@ -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"]