|
12 | 12 | from typing import Any, Dict, Optional |
13 | 13 | from urllib.parse import parse_qs, urlparse |
14 | 14 |
|
15 | | -from config import get_config_value, get_antigravity_api_url, get_code_assist_endpoint |
| 15 | +from config import get_config_value, get_antigravity_api_url |
16 | 16 | from log import log |
17 | 17 |
|
18 | 18 | from .google_oauth_api import ( |
|
33 | 33 | CLIENT_ID, |
34 | 34 | CLIENT_SECRET, |
35 | 35 | SCOPES, |
36 | | - GEMINICLI_USER_AGENT, |
37 | 36 | TOKEN_URL, |
38 | 37 | ) |
39 | 38 |
|
@@ -691,66 +690,46 @@ async def asyncio_complete_auth_flow( |
691 | 690 |
|
692 | 691 | # 如果需要自动检测项目ID且没有提供项目ID(标准模式) |
693 | 692 | if flow_data.get("auto_project_detection", False) and not project_id: |
694 | | - log.info("标准模式:从API获取project_id...") |
695 | | - # 使用API获取project_id(使用标准模式的User-Agent) |
696 | | - code_assist_url = await get_code_assist_endpoint() |
697 | | - project_id, subscription_tier = await fetch_project_id_and_tier( |
698 | | - credentials.access_token, |
699 | | - GEMINICLI_USER_AGENT, |
700 | | - code_assist_url |
701 | | - ) |
702 | | - if project_id: |
703 | | - flow_data["project_id"] = project_id |
704 | | - log.info(f"成功从API获取project_id: {project_id}") |
705 | | - # 自动启用必需的API服务 |
706 | | - log.info("正在自动启用必需的API服务...") |
707 | | - await enable_required_apis(credentials, project_id) |
708 | | - else: |
709 | | - log.warning("无法从API获取project_id,回退到项目列表获取方式") |
710 | | - # 回退到原来的项目列表获取方式 |
711 | | - user_projects = await get_user_projects(credentials) |
712 | | - |
713 | | - if user_projects: |
714 | | - # 如果只有一个项目,自动使用 |
715 | | - if len(user_projects) == 1: |
716 | | - # Google API returns projectId in camelCase |
717 | | - project_id = user_projects[0].get("projectId") |
718 | | - if project_id: |
719 | | - flow_data["project_id"] = project_id |
720 | | - log.info(f"自动选择唯一项目: {project_id}") |
721 | | - # 自动启用必需的API服务 |
722 | | - log.info("正在自动启用必需的API服务...") |
723 | | - await enable_required_apis(credentials, project_id) |
724 | | - # 如果有多个项目,尝试选择默认项目 |
725 | | - else: |
726 | | - project_id = await select_default_project(user_projects) |
727 | | - if project_id: |
728 | | - flow_data["project_id"] = project_id |
729 | | - log.info(f"自动选择默认项目: {project_id}") |
730 | | - # 自动启用必需的API服务 |
731 | | - log.info("正在自动启用必需的API服务...") |
732 | | - await enable_required_apis(credentials, project_id) |
733 | | - else: |
734 | | - # 返回项目列表让用户选择 |
735 | | - return { |
736 | | - "success": False, |
737 | | - "error": "请从以下项目中选择一个", |
738 | | - "requires_project_selection": True, |
739 | | - "available_projects": [ |
740 | | - { |
741 | | - # Google API returns projectId in camelCase |
742 | | - "project_id": p.get("projectId"), |
743 | | - "name": p.get("displayName") or p.get("projectId"), |
744 | | - "projectNumber": p.get("projectNumber"), |
745 | | - } |
746 | | - for p in user_projects |
747 | | - ], |
748 | | - } |
| 693 | + log.info("标准模式:通过项目列表获取project_id...") |
| 694 | + user_projects = await get_user_projects(credentials) |
| 695 | + |
| 696 | + if user_projects: |
| 697 | + # 如果只有一个项目,自动使用 |
| 698 | + if len(user_projects) == 1: |
| 699 | + project_id = user_projects[0].get("projectId") |
| 700 | + if project_id: |
| 701 | + flow_data["project_id"] = project_id |
| 702 | + log.info(f"自动选择唯一项目: {project_id}") |
| 703 | + log.info("正在自动启用必需的API服务...") |
| 704 | + await enable_required_apis(credentials, project_id) |
| 705 | + # 如果有多个项目,尝试选择默认项目 |
749 | 706 | else: |
750 | | - # 如果无法获取项目列表,使用默认project_id |
751 | | - project_id = DEFAULT_PROJECT_ID |
752 | | - flow_data["project_id"] = project_id |
753 | | - log.warning(f"无法获取项目列表,使用默认project_id: {project_id}") |
| 707 | + project_id = await select_default_project(user_projects) |
| 708 | + if project_id: |
| 709 | + flow_data["project_id"] = project_id |
| 710 | + log.info(f"自动选择默认项目: {project_id}") |
| 711 | + log.info("正在自动启用必需的API服务...") |
| 712 | + await enable_required_apis(credentials, project_id) |
| 713 | + else: |
| 714 | + # 返回项目列表让用户选择 |
| 715 | + return { |
| 716 | + "success": False, |
| 717 | + "error": "请从以下项目中选择一个", |
| 718 | + "requires_project_selection": True, |
| 719 | + "available_projects": [ |
| 720 | + { |
| 721 | + "project_id": p.get("projectId"), |
| 722 | + "name": p.get("displayName") or p.get("projectId"), |
| 723 | + "projectNumber": p.get("projectNumber"), |
| 724 | + } |
| 725 | + for p in user_projects |
| 726 | + ], |
| 727 | + } |
| 728 | + else: |
| 729 | + # 如果无法获取项目列表,使用默认project_id |
| 730 | + project_id = DEFAULT_PROJECT_ID |
| 731 | + flow_data["project_id"] = project_id |
| 732 | + log.warning(f"无法获取项目列表,使用默认project_id: {project_id}") |
754 | 733 | elif project_id: |
755 | 734 | # 如果已经有项目ID(手动提供或环境检测),也尝试启用API服务 |
756 | 735 | log.info("正在为已提供的项目ID自动启用必需的API服务...") |
@@ -868,45 +847,28 @@ async def complete_auth_flow_from_callback_url( |
868 | 847 | subscription_tier = None |
869 | 848 |
|
870 | 849 | if not project_id: |
871 | | - # 尝试使用fetch_project_id_and_tier自动获取项目ID |
| 850 | + # 通过项目列表获取项目ID |
872 | 851 | try: |
873 | | - log.info("标准模式:从API获取project_id...") |
874 | | - code_assist_url = await get_code_assist_endpoint() |
875 | | - detected_project_id, subscription_tier = await fetch_project_id_and_tier( |
876 | | - credentials.access_token, |
877 | | - GEMINICLI_USER_AGENT, |
878 | | - code_assist_url |
879 | | - ) |
880 | | - if detected_project_id: |
881 | | - auto_detected = True |
882 | | - log.info(f"成功从API获取project_id: {detected_project_id}, tier: {subscription_tier}") |
883 | | - else: |
884 | | - log.warning("无法从API获取project_id,回退到项目列表获取方式") |
885 | | - # 回退到原来的项目列表获取方式 |
886 | | - projects = await get_user_projects(credentials) |
887 | | - if projects: |
888 | | - if len(projects) == 1: |
889 | | - # 只有一个项目,自动使用 |
890 | | - # Google API returns projectId in camelCase |
891 | | - detected_project_id = projects[0]["projectId"] |
892 | | - auto_detected = True |
893 | | - log.info(f"自动检测到唯一项目ID: {detected_project_id}") |
894 | | - else: |
895 | | - # 多个项目,自动选择第一个 |
896 | | - # Google API returns projectId in camelCase |
897 | | - detected_project_id = projects[0]["projectId"] |
898 | | - auto_detected = True |
899 | | - log.info( |
900 | | - f"检测到{len(projects)}个项目,自动选择第一个: {detected_project_id}" |
901 | | - ) |
902 | | - log.debug(f"其他可用项目: {[p['projectId'] for p in projects[1:]]}") |
| 852 | + log.info("标准模式:通过项目列表获取project_id...") |
| 853 | + projects = await get_user_projects(credentials) |
| 854 | + if projects: |
| 855 | + if len(projects) == 1: |
| 856 | + detected_project_id = projects[0]["projectId"] |
| 857 | + auto_detected = True |
| 858 | + log.info(f"自动检测到唯一项目ID: {detected_project_id}") |
903 | 859 | else: |
904 | | - # 没有项目访问权限,使用默认project_id |
905 | | - detected_project_id = DEFAULT_PROJECT_ID |
906 | | - auto_detected = False |
907 | | - log.warning(f"未检测到可访问项目,使用默认project_id: {detected_project_id}") |
| 860 | + detected_project_id = projects[0]["projectId"] |
| 861 | + auto_detected = True |
| 862 | + log.info( |
| 863 | + f"检测到{len(projects)}个项目,自动选择第一个: {detected_project_id}" |
| 864 | + ) |
| 865 | + log.debug(f"其他可用项目: {[p['projectId'] for p in projects[1:]]}") |
| 866 | + else: |
| 867 | + detected_project_id = DEFAULT_PROJECT_ID |
| 868 | + auto_detected = False |
| 869 | + log.warning(f"未检测到可访问项目,使用默认project_id: {detected_project_id}") |
908 | 870 | except Exception as e: |
909 | | - log.warning(f"自动检测项目ID失败: {e},使用默认project_id") |
| 871 | + log.warning(f"获取项目列表失败: {e},使用默认project_id") |
910 | 872 | detected_project_id = DEFAULT_PROJECT_ID |
911 | 873 | auto_detected = False |
912 | 874 | else: |
|
0 commit comments