|  |  |  | @ -1,6 +1,6 @@ | 
			
		
	
		
			
				
					|  |  |  |  | import os | 
			
		
	
		
			
				
					|  |  |  |  | import re | 
			
		
	
		
			
				
					|  |  |  |  | from urllib.parse import urlparse | 
			
		
	
		
			
				
					|  |  |  |  | from urllib.parse import parse_qs, urlparse | 
			
		
	
		
			
				
					|  |  |  |  | from collections import defaultdict | 
			
		
	
		
			
				
					|  |  |  |  | from itertools import chain | 
			
		
	
		
			
				
					|  |  |  |  | from typing import Optional | 
			
		
	
	
		
			
				
					|  |  |  | @ -231,8 +231,27 @@ class SegmentName: | 
			
		
	
		
			
				
					|  |  |  |  |   def __str__(self) -> str: return self._canonical_name | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def parse_useradmin(segment_range): | 
			
		
	
		
			
				
					|  |  |  |  |   if "useradmin.comma.ai" in segment_range: | 
			
		
	
		
			
				
					|  |  |  |  |     query = parse_qs(urlparse(segment_range).query) | 
			
		
	
		
			
				
					|  |  |  |  |     return query["onebox"][0] | 
			
		
	
		
			
				
					|  |  |  |  |   return segment_range | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def parse_cabana(segment_range): | 
			
		
	
		
			
				
					|  |  |  |  |   if "cabana.comma.ai" in segment_range: | 
			
		
	
		
			
				
					|  |  |  |  |     query = parse_qs(urlparse(segment_range).query) | 
			
		
	
		
			
				
					|  |  |  |  |     return query["route"][0] | 
			
		
	
		
			
				
					|  |  |  |  |   return segment_range | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def parse_cd(segment_range): | 
			
		
	
		
			
				
					|  |  |  |  |   return segment_range.replace("cd:/", "") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class SegmentRange: | 
			
		
	
		
			
				
					|  |  |  |  |   def __init__(self, segment_range: str): | 
			
		
	
		
			
				
					|  |  |  |  |     segment_range = parse_useradmin(segment_range) | 
			
		
	
		
			
				
					|  |  |  |  |     segment_range = parse_cabana(segment_range) | 
			
		
	
		
			
				
					|  |  |  |  |     segment_range = parse_cd(segment_range) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     self.m = re.fullmatch(RE.SEGMENT_RANGE, segment_range) | 
			
		
	
		
			
				
					|  |  |  |  |     assert self.m, f"Segment range is not valid {segment_range}" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |