@@ -101,7 +101,13 @@ def _get_api(self, page: Page) -> ChatGPTWorkspaceAPI:
101101 raise RuntimeError ("account_id/access_token не установлены — сначала login_admin()" )
102102 return ChatGPTWorkspaceAPI (page , self .account_id , self .access_token )
103103
104- def _finalize_admin_login (self , page : Page , session : dict [str , Any ]) -> None :
104+ def _finalize_admin_login (
105+ self ,
106+ page : Page ,
107+ session : dict [str , Any ],
108+ * ,
109+ manual_web_flow : bool = False ,
110+ ) -> None :
105111 if not self ._admin :
106112 raise RuntimeError (f"Админ { self .admin_email } не найден в AccountStore" )
107113
@@ -115,38 +121,41 @@ def _finalize_admin_login(self, page: Page, session: dict[str, Any]) -> None:
115121 workspaces = get_workspaces (page , log = self ._log )
116122 if workspaces :
117123 self ._admin .workspaces = workspaces
118- available_ids = {str (ws ["workspace_id" ]) for ws in workspaces if ws .get ("workspace_id" )}
119124 self ._log (
120125 "Доступные workspace: "
121126 + ", " .join (f"{ ws .get ('name' , '?' )} [{ ws .get ('workspace_id' , '?' )} ]" for ws in workspaces )
122127 )
123128
124- target_workspace_id = self ._admin .workspace_id if self ._admin .workspace_id in available_ids else None
125- if self ._admin .workspace_id and not target_workspace_id :
126- self ._log (
127- f"[предупреждение] Workspace из OAuth ({ self ._admin .workspace_id } ) не найден среди кнопок на странице"
128- )
129-
130- if not target_workspace_id :
131- for ws in workspaces :
132- name = str (ws .get ("name" , "" ))
133- workspace_id = str (ws .get ("workspace_id" , "" ))
134- if workspace_id and "Личная" not in name and "Personal" not in name :
135- target_workspace_id = workspace_id
136- break
137-
138- if not target_workspace_id and workspaces :
139- target_workspace_id = str (workspaces [0 ]["workspace_id" ])
140-
141- self ._admin .workspace_id = target_workspace_id
142- if target_workspace_id :
143- select_workspace (page , target_workspace_id , log = self ._log )
144- self ._admin .account_id = target_workspace_id
145- if not ensure_chatgpt_web_session (page , self ._log , timeout_seconds = 45 , open_home = True ):
146- raise RuntimeError (
147- "Не удалось подтвердить web-сессию chatgpt.com после выбора workspace"
129+ if manual_web_flow :
130+ self ._log ("Ручной режим: workspace не выбираю автоматически." )
131+ else :
132+ available_ids = {str (ws ["workspace_id" ]) for ws in workspaces if ws .get ("workspace_id" )}
133+ target_workspace_id = self ._admin .workspace_id if self ._admin .workspace_id in available_ids else None
134+ if self ._admin .workspace_id and not target_workspace_id :
135+ self ._log (
136+ f"[предупреждение] Workspace из OAuth ({ self ._admin .workspace_id } ) не найден среди кнопок на странице"
148137 )
149138
139+ if not target_workspace_id :
140+ for ws in workspaces :
141+ name = str (ws .get ("name" , "" ))
142+ workspace_id = str (ws .get ("workspace_id" , "" ))
143+ if workspace_id and "Личная" not in name and "Personal" not in name :
144+ target_workspace_id = workspace_id
145+ break
146+
147+ if not target_workspace_id and workspaces :
148+ target_workspace_id = str (workspaces [0 ]["workspace_id" ])
149+
150+ self ._admin .workspace_id = target_workspace_id
151+ if target_workspace_id :
152+ select_workspace (page , target_workspace_id , log = self ._log )
153+ self ._admin .account_id = target_workspace_id
154+ if not ensure_chatgpt_web_session (page , self ._log , timeout_seconds = 45 , open_home = True ):
155+ raise RuntimeError (
156+ "Не удалось подтвердить web-сессию chatgpt.com после выбора workspace"
157+ )
158+
150159 close_browser (page , log = self ._log )
151160 self ._admin .last_login = datetime .now (timezone .utc ).isoformat ()
152161 self .store .update_admin (self ._admin )
@@ -161,7 +170,7 @@ def _finalize_admin_login(self, page: Page, session: dict[str, Any]) -> None:
161170 self ._log ("Админ авторизован!" )
162171
163172 def finalize_admin_session (self , page : Page , session : dict [str , Any ]) -> None :
164- self ._finalize_admin_login (page , session )
173+ self ._finalize_admin_login (page , session , manual_web_flow = True )
165174
166175 def login_admin (self ) -> None :
167176 """Логин админа через OAuth PKCE — получаем все токены (access, id, refresh)."""
@@ -198,7 +207,7 @@ def login_admin_manual(self) -> None:
198207 )
199208 if session .get ("email" ) and session ["email" ] != self ._admin .email :
200209 self ._log (f"[предупреждение] Вошли как { session ['email' ]} , а не как { self ._admin .email } " )
201- self ._finalize_admin_login (page , session )
210+ self ._finalize_admin_login (page , session , manual_web_flow = True )
202211
203212 def create_slots (self , count : int ) -> list [WorkerAccount ]:
204213 """Создать N временных почт."""
0 commit comments