#!/usr/bin/env python3 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  json 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  os 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  requests 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  xml . etree . ElementTree  as  ET 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  openpilot . common . basedir  import  BASEDIR 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  openpilot . selfdrive . ui . tests . test_translations  import  UNFINISHED_TRANSLATION_TAG 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  openpilot . selfdrive . ui . update_translations  import  LANGUAGES_FILE ,  TRANSLATIONS_DIR 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								TRANSLATION_TAG  =  " <translation " 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								BADGE_HEIGHT  =  20  +  8 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								SHIELDS_URL  =  " https://img.shields.io/badge " 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  __name__  ==  " __main__ " : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  with  open ( LANGUAGES_FILE )  as  f : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    translation_files  =  json . load ( f ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  badge_svg  =  [ ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  max_badge_width  =  0   # keep track of max width to set parent element 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  for  idx ,  ( name ,  file )  in  enumerate ( translation_files . items ( ) ) : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    with  open ( os . path . join ( TRANSLATIONS_DIR ,  f " { file } .ts " ) )  as  tr_f : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      tr_file  =  tr_f . read ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    total_translations  =  0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unfinished_translations  =  0 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  line  in  tr_file . splitlines ( ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  TRANSLATION_TAG  in  line : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        total_translations  + =  1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  UNFINISHED_TRANSLATION_TAG  in  line : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unfinished_translations  + =  1 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    percent_finished  =  int ( 100  -  ( unfinished_translations  /  total_translations  *  100. ) ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    color  =  f " rgb { ( 94 ,  188 ,  0 )  if  percent_finished  ==  100  else  ( 248 ,  255 ,  50 )  if  percent_finished  >  90  else  ( 204 ,  55 ,  27 ) } " 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # Download badge 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    badge_label  =  f " LANGUAGE  { name } " 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    badge_message  =  f " { percent_finished } % complete " 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  unfinished_translations  !=  0 : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      badge_message  + =  f "  ( { unfinished_translations }  unfinished) " 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    r  =  requests . get ( f " { SHIELDS_URL } / { badge_label } - { badge_message } - { color } " ,  timeout = 10 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  r . status_code  ==  200 ,  " Error downloading badge " 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    content_svg  =  r . content . decode ( " utf-8 " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    xml  =  ET . fromstring ( content_svg ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  " width "  in  xml . attrib 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    max_badge_width  =  max ( max_badge_width ,  int ( xml . attrib [ " width " ] ) ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Make tag ids in each badge unique to combine them into one svg 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  tag  in  ( " r " ,  " s " ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      content_svg  =  content_svg . replace ( f ' id= " { tag } " ' ,  f ' id= " { tag } { idx } " ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      content_svg  =  content_svg . replace ( f ' " url(# { tag } ) " ' ,  f ' " url(# { tag } { idx } ) " ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    badge_svg . extend ( [ f ' <g transform= " translate(0,  { idx  *  BADGE_HEIGHT } ) " > ' ,  content_svg ,  " </g> " ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  badge_svg . insert ( 0 ,  ' <svg xmlns= " http://www.w3.org/2000/svg "  xmlns:xlink= " http://www.w3.org/1999/xlink "   '  + 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   f ' height= " { len ( translation_files )  *  BADGE_HEIGHT } "  width= " { max_badge_width } " > ' ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  badge_svg . append ( " </svg> " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  with  open ( os . path . join ( BASEDIR ,  " translation_badge.svg " ) ,  " w " )  as  badge_f : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    badge_f . write ( " \n " . join ( badge_svg ) )