@ -127,10 +127,10 @@ class Uploader(): 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      url_resp_json  =  json . loads ( url_resp . text )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      url  =  url_resp_json [ ' url ' ]   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      headers  =  url_resp_json [ ' headers ' ]   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      cloudlog . info ( " upload_url v1.3  %s   %s " ,  url ,  str ( headers ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      cloudlog . debug ( " upload_url v1.3  %s   %s " ,  url ,  str ( headers ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      if  fake_upload :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        cloudlog . info ( " *** WARNING, THIS IS A FAKE UPLOAD TO  %s  *** "  %  url )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        cloudlog . debug ( " *** WARNING, THIS IS A FAKE UPLOAD TO  %s  *** "  %  url )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        class  FakeResponse ( ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					          def  __init__ ( self ) :   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -164,7 +164,7 @@ class Uploader(): 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    cloudlog . event ( " upload " ,  key = key ,  fn = fn ,  sz = sz )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    cloudlog . info ( " checking  %r  with size  %r " ,  key ,  sz )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    cloudlog . debug ( " checking  %r  with size  %r " ,  key ,  sz )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  sz  ==  0 :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      try :   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -174,10 +174,10 @@ class Uploader(): 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        cloudlog . event ( " uploader_setxattr_failed " ,  exc = self . last_exc ,  key = key ,  fn = fn ,  sz = sz )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      success  =  True   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    else :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      cloudlog . info ( " uploading  %r " ,  fn )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      cloudlog . debug ( " uploading  %r " ,  fn )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      stat  =  self . normal_upload ( key ,  fn )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      if  stat  is  not  None  and  stat . status_code  in  ( 200 ,  201 ,  412 ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        cloudlog . event ( " upload_success "  if  stat . status_code  !=  412  else  " upload_ignored " ,  key = key ,  fn = fn ,  sz = sz )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        cloudlog . event ( " upload_success "  if  stat . status_code  !=  412  else  " upload_ignored " ,  key = key ,  fn = fn ,  sz = sz ,  debug = True )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        try :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					          # tag file as uploaded   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					          setxattr ( fn ,  UPLOAD_ATTR_NAME ,  UPLOAD_ATTR_VALUE )   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -185,14 +185,12 @@ class Uploader(): 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					          cloudlog . event ( " uploader_setxattr_failed " ,  exc = self . last_exc ,  key = key ,  fn = fn ,  sz = sz )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        success  =  True   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      else :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        cloudlog . event ( " upload_failed " ,  stat = stat ,  exc = self . last_exc ,  key = key ,  fn = fn ,  sz = sz )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        cloudlog . event ( " upload_failed " ,  stat = stat ,  exc = self . last_exc ,  key = key ,  fn = fn ,  sz = sz ,  debug = True )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        success  =  False   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  success   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					def  uploader_fn ( exit_event ) :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  cloudlog . info ( " uploader_fn " )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  params  =  Params ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  dongle_id  =  params . get ( " DongleId " ) . decode ( ' utf8 ' )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -209,8 +207,14 @@ def uploader_fn(exit_event): 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  backoff  =  0.1   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  while  not  exit_event . is_set ( ) :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    sm . update ( 0 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    on_wifi  =  force_wifi  or  sm [ ' deviceState ' ] . networkType  ==  NetworkType . wifi   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    offroad  =  params . get ( " IsOffroad " )  ==  b ' 1 '   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    network_type  =  sm [ ' deviceState ' ] . networkType  if  not  force_wifi  else  NetworkType . wifi   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  network_type  ==  NetworkType . none :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      if  allow_sleep :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        time . sleep ( 60  if  offroad  else  5 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      continue   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    on_wifi  =  network_type  ==  NetworkType . wifi   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    allow_raw_upload  =  params . get ( " IsUploadRawEnabled " )  !=  b " 0 "   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    d  =  uploader . next_file_to_upload ( with_raw = allow_raw_upload  and  on_wifi  and  offroad )   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -221,13 +225,12 @@ def uploader_fn(exit_event): 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    key ,  fn  =  d   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    cloudlog . event ( " uploader_netcheck " ,  is_on_wifi = on_wifi )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    cloudlog . info ( " to upload  %r " ,  d )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    cloudlog . debug ( " upload  %r  over  %s " ,  d ,  network_type )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    success  =  uploader . upload ( key ,  fn )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  success :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      backoff  =  0.1   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    elif  allow_sleep :   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      cloudlog . info ( " backoff  %r " ,  backoff )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      cloudlog . info ( " upload  backoff %r " ,  backoff )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      time . sleep ( backoff  +  random . uniform ( 0 ,  backoff ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      backoff  =  min ( backoff * 2 ,  120 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    cloudlog . info ( " upload done, success= %r " ,  success )