3333 SuccessResponseStorageQuota ,
3434 ProfilePingResponse ,
3535 ProfileBrowserGetUrlResponse ,
36+ ProfileBrowserMetadata ,
3637)
3738from .utils import dt_now , str_to_date
3839
@@ -130,6 +131,7 @@ async def create_new_browser(
130131 str (org .id ),
131132 url = str (profile_launch .url ),
132133 storage = org .storage ,
134+ crawler_channel = profile_launch .crawlerChannel ,
133135 crawler_image = crawler_image ,
134136 image_pull_policy = image_pull_policy ,
135137 baseprofile = prev_profile_id ,
@@ -172,11 +174,20 @@ async def get_profile_browser_url(
172174 params ["url" ] = url
173175 return params
174176
175- async def ping_profile_browser (self , browserid : str ) -> dict [str , Any ]:
177+ async def ping_profile_browser (
178+ self , metadata : ProfileBrowserMetadata , org : Organization
179+ ) -> dict [str , Any ]:
176180 """ping profile browser to keep it running"""
177- data = await self ._send_browser_req (browserid , "/ping" )
181+ data = await self ._send_browser_req (metadata .browser , "/ping" )
182+ origins = data .get ("origins" ) or []
183+
184+ if metadata .baseprofile :
185+ base = await self .get_profile (metadata .baseprofile , org )
186+ for origin in base .origins :
187+ if origin not in origins :
188+ origins .append (origin )
178189
179- return {"success" : True , "origins" : data . get ( " origins" ) or [] }
190+ return {"success" : True , "origins" : origins }
180191
181192 async def navigate_profile_browser (
182193 self , browserid : str , urlin : UrlIn
@@ -190,21 +201,19 @@ async def navigate_profile_browser(
190201
191202 async def commit_to_profile (
192203 self ,
193- metadata : dict ,
204+ metadata : ProfileBrowserMetadata ,
194205 browser_commit : ProfileCreate ,
195206 org : Organization ,
196207 user : User ,
197208 existing_profile : Optional [Profile ] = None ,
198209 ) -> dict [str , Any ]:
199210 """commit to profile async, returning if committed, or waiting"""
200- profileid = metadata .get ("profileid" )
201- if not profileid :
211+ if not metadata .profileid :
202212 raise HTTPException (status_code = 400 , detail = "browser_not_valid" )
203213
204214 self .orgs .can_write_data (org , include_time = False )
205215
206- committing = metadata .get ("committing" )
207- if not committing :
216+ if not metadata .committing :
208217 self ._run_task (
209218 self .do_commit_to_profile (
210219 metadata = metadata ,
@@ -215,19 +224,19 @@ async def commit_to_profile(
215224 )
216225 )
217226
218- if committing == "done" :
227+ if metadata . committing == "done" :
219228 await self .crawl_manager .delete_profile_browser (browser_commit .browserid )
220229 return {
221230 "added" : True ,
222- "id" : profileid ,
231+ "id" : str ( metadata . profileid ) ,
223232 "storageQuotaReached" : self .orgs .storage_quota_reached (org ),
224233 }
225234
226235 raise HTTPException (status_code = 200 , detail = "waiting_for_browser" )
227236
228237 async def do_commit_to_profile (
229238 self ,
230- metadata : dict ,
239+ metadata : ProfileBrowserMetadata ,
231240 browser_commit : ProfileCreate ,
232241 org : Organization ,
233242 user : User ,
@@ -238,6 +247,8 @@ async def do_commit_to_profile(
238247 try :
239248 now = dt_now ()
240249
250+ origins = []
251+
241252 if existing_profile :
242253 profileid = existing_profile .id
243254 created = existing_profile .created
@@ -246,8 +257,11 @@ async def do_commit_to_profile(
246257 prev_file_size = (
247258 existing_profile .resource .size if existing_profile .resource else 0
248259 )
260+
261+ origins = existing_profile .origins
262+
249263 else :
250- profileid = UUID ( metadata [ " profileid" ])
264+ profileid = metadata . profileid
251265 created = now
252266 created_by = user .id
253267 created_by_name = user .name if user .name else user .email
@@ -275,10 +289,15 @@ async def do_commit_to_profile(
275289 storage = org .storage ,
276290 )
277291
278- baseid = metadata .get ("btrix.baseprofile" )
279- if baseid :
280- print ("baseid" , baseid )
281- baseid = UUID (baseid )
292+ baseid = metadata .baseprofile
293+
294+ if origins :
295+ for origin in data ["origins" ]:
296+ if origin not in origins :
297+ origins .append (origin )
298+
299+ else :
300+ origins = data ["origins" ]
282301
283302 profile = Profile (
284303 id = profileid ,
@@ -290,13 +309,13 @@ async def do_commit_to_profile(
290309 modified = now ,
291310 modifiedBy = user .id ,
292311 modifiedByName = user .name if user .name else user .email ,
293- origins = data [ " origins" ] ,
312+ origins = origins ,
294313 resource = profile_file ,
295- userid = UUID ( metadata .get ( "btrix.user" )) ,
314+ userid = metadata .userid ,
296315 oid = org .id ,
297316 baseid = baseid ,
298- crawlerChannel = browser_commit .crawlerChannel ,
299- proxyId = browser_commit . proxyId ,
317+ crawlerChannel = metadata .crawlerChannel ,
318+ proxyId = metadata . proxyid ,
300319 )
301320
302321 await self .profiles .find_one_and_update (
@@ -455,6 +474,9 @@ async def list_profiles(
455474 total = 0
456475
457476 profiles = [Profile .from_dict (res ) for res in items ]
477+
478+ profiles = await self .crawlconfigs .mark_profiles_in_use (profiles , org )
479+
458480 return profiles , total
459481
460482 async def get_profile (self , profileid : UUID , org : Organization ) -> Profile :
@@ -611,15 +633,27 @@ def init_profiles_api(
611633 org_crawl_dep = org_ops .org_crawl_dep
612634
613635 async def browser_get_metadata (
614- browserid : str , org : Organization = Depends ( org_crawl_dep )
615- ):
636+ browserid : str , org : Organization
637+ ) -> ProfileBrowserMetadata :
616638 # if await ops.redis.hget(f"br:{browserid}", "org") != str(org.id):
617- metadata = await crawl_manager .get_profile_browser_metadata (browserid )
618- if metadata .get ("btrix.org" ) != str (org .id ):
639+ metadata = None
640+ try :
641+ metadata = await crawl_manager .get_profile_browser_metadata (browserid )
642+ # pylint: disable=raise-missing-from
643+ except Exception as e :
644+ print (e )
645+ raise HTTPException (status_code = 400 , detail = "invalid_profile_browser" )
646+
647+ if metadata .oid != str (org .id ):
619648 raise HTTPException (status_code = 404 , detail = "no_such_browser" )
620649
621650 return metadata
622651
652+ async def browser_metadata_dep (
653+ browserid : str , org : Organization = Depends (org_crawl_dep )
654+ ):
655+ return await browser_get_metadata (browserid , org )
656+
623657 async def browser_dep (browserid : str , org : Organization = Depends (org_crawl_dep )):
624658 await browser_get_metadata (browserid , org )
625659 return browserid
@@ -673,8 +707,6 @@ async def commit_browser_to_existing(
673707 browserid = browser_commit .browserid ,
674708 name = browser_commit .name ,
675709 description = browser_commit .description or profile .description ,
676- crawlerChannel = profile .crawlerChannel ,
677- proxyId = profile .proxyId ,
678710 ),
679711 org = org ,
680712 user = user ,
@@ -707,8 +739,11 @@ async def create_new(
707739 return await ops .create_new_browser (org , user , profile_launch )
708740
709741 @router .post ("/browser/{browserid}/ping" , response_model = ProfilePingResponse )
710- async def ping_profile_browser (browserid : str = Depends (browser_dep )):
711- return await ops .ping_profile_browser (browserid )
742+ async def ping_profile_browser (
743+ metadata : ProfileBrowserMetadata = Depends (browser_metadata_dep ),
744+ org : Organization = Depends (org_crawl_dep ),
745+ ):
746+ return await ops .ping_profile_browser (metadata , org )
712747
713748 @router .post ("/browser/{browserid}/navigate" , response_model = SuccessResponse )
714749 async def navigate_profile_browser (
0 commit comments