@ -10,6 +10,15 @@ site_name = cstr(frappe.local.site)
base_url = os . path . expanduser (
" ~ " ) + " /frappe-bench/sites/ " + site_name + " /public "
# Constants
json_ext = " .json "
json_internal_path = " /files/json_files/internal/ "
json_global_path = " /files/json_files/global/ "
json_full_update_path = " /files/json_files/full_update/ "
status = " status "
error = " error "
update_available = ' IsUpdateAvailable '
def custom_rate_limit ( limit , seconds ) :
ip_based = True
@ -30,16 +39,16 @@ def custom_rate_limit(limit, seconds):
def get_parent_map ( input_list , parameter ) :
parentChildM ap = { }
parent_child_m ap = { }
for b in input_list :
parentChildM ap . setdefault ( b [ parameter ] or None , [ ] ) . append ( b )
parent_child_m ap . setdefault ( b [ parameter ] or None , [ ] ) . append ( b )
list1 = [ ]
steps_length = 0
for p in parentChildM ap :
da = { " procedure_name " : p , ' steps ' : parentChildM ap [ p ] }
for p in parent_child_m ap :
da = { " procedure_name " : p , ' steps ' : parent_child_m ap [ p ] }
list1 . append ( da )
steps_length + = len ( parentChildM ap [ p ] )
for i in parentChildM ap [ p ] :
steps_length + = len ( parent_child_m ap [ p ] )
for i in parent_child_m ap [ p ] :
del i [ ' procedure_name ' ]
del i [ ' idx ' ]
@ -52,79 +61,77 @@ def check_all_vehicle_updates(vehicle_list=None):
if rate_res != 1 :
return rate_res
# if vehicle_list == None:
# return {" status" : 0, " error" : "Parameter missing: Vehicle List"}
# return {status: 0, error: "Parameter missing: Vehicle List"}
val = input_validation ( vehicle_list = vehicle_list )
if val != ' ' :
return { " status" : 0 , " error" : " Parameter missing: " + val }
return { status : 0 , error : " Parameter missing: " + val }
if vehicle_list :
try :
V ehicle_req_list = [ ]
v ehicle_req_list = [ ]
response = { }
v_list = json . loads ( vehicle_list )
lang = v_list [ ' LanguageID ' ]
iid = v_list [ ' InstallationId ' ]
vehicle_data = v_list [ ' VehicleReqList ' ]
publish_type = frappe . db . sql (
''' SELECT publish_type FROM {} .`tabApp Device` where name= ' {} ' ; ''' . format (
current_db_name , iid ) ,
as_list = True )
''' SELECT publish_type FROM `tabApp Device` where name= ' {} ' ; ''' . format ( iid ) , as_list = 1 )
if publish_type [ 0 ] [ 0 ] is not None :
if vehicle_data :
for v in vehicle_data :
v_id = v [ ' Vehicle ' ]
current_version = float ( v [ ' CurrentVersion ' ] )
data1_global = frappe . db . sql ( ''' SELECT name,max(version) as version,vehicle_id,language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' Global ' and vehicle_status = ' Active ' order by version ASC ; ''' .format(
current_db_name , v_id , lang ) , as_dict = True )
data1 = frappe . db . sql ( ''' SELECT name,max(version) as version,vehicle_id,language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' {} ' and vehicle_status = ' Active ' order by version ASC ; ''' .format(
current_db_name , v_id , lang , publish_type [ 0 ] [ 0 ] ) , as_dict = True )
data1_global = frappe . db . sql ( ''' SELECT name,format(max(version),2) as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} ' and language= ' {} '
and publish_status = ' Published ' and publish_type = ' Global ' and vehicle_status = ' Active '
order by version ASC ; ''' .format(v_id, lang), as_dict=1 )
data1 = frappe . db . sql ( ''' SELECT name,format(max(version),2) as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} ' and language= ' {} '
and publish_status = ' Published ' and publish_type = ' {} ' and vehicle_status = ' Active '
order by version ASC ; ''' .format(v_id, lang, publish_type[0][0]), as_dict=1 )
if data1 [ 0 ] [ ' version ' ] is not None :
if current_version == float ( data1 [ 0 ] [ ' version ' ] ) :
data1 [ 0 ] [ ' IsUpdateAvailable ' ] = " false "
V ehicle_req_list. append ( data1 )
data1 [ 0 ] [ update_available ] = " false "
v ehicle_req_list. append ( data1 )
else :
if current_version < float ( data1_global [ 0 ] [ ' version ' ] ) :
data = frappe . db . sql ( ''' SELECT name,max(version) as version,vehicle_id,language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' Global ' and vehicle_status = ' Active ' and version > ' {} ' order by version ASC ; ''' .format(
current_db_name , v_id , lang , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name,format(max(version),2) as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} ' and language= ' {} '
and publish_status = ' Published ' and publish_type = ' Global ' and vehicle_status = ' Active ' and version > ' {} '
order by version ASC ; ''' .format(v_id, lang, current_version), as_dict=1 )
elif current_version == float ( data1_global [ 0 ] [ ' version ' ] ) :
if current_version < float ( data1 [ 0 ] [ ' version ' ] ) :
data = frappe . db . sql ( ''' SELECT name,max(version) as version,vehicle_id,language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' {} ' and vehicle_status = ' Active ' and version > ' {} ' order by version ASC ; ''' .format(
current_db_name , v_id , lang , publish_type [ 0 ] [ 0 ] , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name,format(max(version),2) as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} ' and
language = ' {} ' and publish_status = ' Published ' and publish_type = ' {} ' and vehicle_status = ' Active ' and version > ' {} '
order by version ASC ; ''' .format(v_id, lang, publish_type[0][0], current_version), as_dict=1 )
# return data
data_append = [ ]
try :
for d in data :
d [ ' IsUpdateAvailable ' ] = ' true '
d [ update_available ] = ' true '
d [ ' CurrentVersion ' ] = float (
current_version )
data_append . append ( d )
V ehicle_req_list. append ( data_append )
v ehicle_req_list. append ( data_append )
except :
pass
response [ ' LanguageID ' ] = lang
if len ( V ehicle_req_list) != 0 :
response [ ' VehicleReqList ' ] = V ehicle_req_list[ 0 ]
if len ( v ehicle_req_list) != 0 :
response [ ' VehicleReqList ' ] = v ehicle_req_list[ 0 ]
return response
else :
return { " status" : 0 , " error" : " No Vehicles in criteria " }
return { status : 0 , error : " No Vehicles in criteria " }
else :
return { " status" : 0 , " error" : " Invalid Publish Details " }
return { status : 0 , error : " Invalid Publish Details " }
else :
return { " status" : 0 , " error" : " Invalid Publish Details " }
return { status : 0 , error : " Invalid Publish Details " }
except Exception as e :
return { " status" : 0 , " error" : " Failed to fetch updates " }
return { status : 0 , error : " Failed to fetch updates " }
else :
return { " status" : 0 , " error" : " Check argument: vehicle list " }
return { status : 0 , error : " Check argument: vehicle list " }
@frappe . whitelist ( )
@ -133,10 +140,10 @@ def check_vehicle_update(vehicle_list=None):
if rate_res != 1 :
return rate_res
# if vehicle_list == None:
# return {" status" : 0, " error" : "Parameter missing: Vehicle List"}
# return {status: 0, error: "Parameter missing: Vehicle List"}
val = input_validation ( vehicle_list = vehicle_list )
if val != ' ' :
return { " status" : 0 , " error" : " Parameter missing: " + val }
return { status : 0 , error : " Parameter missing: " + val }
if vehicle_list :
try :
@ -151,40 +158,40 @@ def check_vehicle_update(vehicle_list=None):
if len ( publish_type ) > 0 :
publish_type = publish_type [ 0 ] [ ' publish_type ' ]
V ehicle_req_list = [ ]
v ehicle_req_list = [ ]
# Iterate on language
for v in vehicle_data :
l_id = v [ ' LanguageID ' ]
current_version = float ( v [ ' CurrentVersion ' ] )
data1_global = frappe . db . sql ( ''' SELECT name,max(version) as version,vehicle_id,language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' Global ' and vehicle_status = ' Active ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id ) , as_dict = True )
data1_global = frappe . db . sql ( ''' SELECT name,format(max(version),2) as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} ' and language= ' {} '
and publish_status = ' Published ' and publish_type = ' Global ' and vehicle_status = ' Active '
order by version ASC ; ''' .format(vehicle, l_id), as_dict=1 )
data1 = frappe . db . sql ( ''' SELECT name,max(version) as version,vehicle_id,language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and vehicle_status = ' Active ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id ) , as_dict = True )
data1 = frappe . db . sql ( ''' SELECT name,format(max(version),2) as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} ' and language= ' {} ' and
publish_status = ' Published ' and vehicle_status = ' Active '
order by version ASC ; ''' .format(vehicle, l_id), as_dict=1 )
if data1_global [ 0 ] [ ' version ' ] :
if data1 [ 0 ] [ ' version ' ] is not None :
if current_version == float ( data1 [ 0 ] [ ' version ' ] ) :
data1 [ 0 ] [ ' IsUpdateAvailable ' ] = " false "
data1 [ 0 ] [ update_available ] = " false "
data = { }
data [ ' Language ' ] = l_id
data [ ' IsUpdateAvailable ' ] = ' false '
data [ update_available ] = ' false '
data [ ' CurrentVersion ' ] = float ( current_version )
V ehicle_req_list. append ( data )
v ehicle_req_list. append ( data )
else :
if current_version < ( float ( data1_global [ 0 ] [ ' version ' ] ) - 1.00 ) :
data = frappe . db . sql ( ''' SELECT name as Name,max(version) as Version,vehicle_id as Vehicle,language as Language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' Global ' and vehicle_status = ' Active ' and Version > ' {} ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name as Name,format( max(version),2 ) as Version,vehicle_id as Vehicle,language as Language FROM `tabPublish`
where vehicle = ' {} ' and language = ' {} ' and publish_status = ' Published ' and publish_type = ' Global ' and
vehicle_status = ' Active ' and Version > ' {} ' order by version ASC ; ''' .format(vehicle, l_id, current_version), as_dict=1 )
try :
for d in data :
try :
file_name = " /files/json_files/full_update/ " + vehicle + " / " + vehicle + \
file_name = json_full_update_path + vehicle + " / " + vehicle + \
" - " + \
d [ ' Language ' ] + " - " + " full_v " + \
str ( d [ ' Version ' ] ) + " .json "
str ( d [ ' Version ' ] ) + json_ext
file_size = os . path . getsize (
base_url + file_name )
d [ ' JsonURL ' ] = file_name
@ -198,26 +205,26 @@ def check_vehicle_update(vehicle_list=None):
d [ ' FileSize ' ] = file_size
d [ ' Error ' ] = ' File failed to load '
d [ ' IsUpdateAvailable ' ] = ' true '
d [ update_available ] = ' true '
d [ ' CurrentVersion ' ] = float (
current_version )
V ehicle_req_list. append ( d )
v ehicle_req_list. append ( d )
except Exception as e :
V ehicle_req_list. append (
{ " Error " : " Update checking Failed " } )
v ehicle_req_list. append (
{ error : " Update checking Failed " } )
elif current_version == ( float ( data1_global [ 0 ] [ ' version ' ] ) - 1.00 ) :
data = frappe . db . sql ( ''' SELECT name as Name,max(version) as Version,vehicle_id as Vehicle,language as Language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' Global ' and vehicle_status = ' Active ' and Version > ' {} ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name as Name,format( max(version),2 ) as Version,vehicle_id as Vehicle,language as Language FROM `tabPublish`
where vehicle = ' {} ' and language = ' {} ' and publish_status = ' Published ' and publish_type = ' Global ' and vehicle_status = ' Active ' and Version > ' {} '
order by version ASC ; ''' .format(vehicle, l_id, current_version), as_dict=1 )
try :
for d in data :
file_name = None
try :
file_name = " /files/json_files/global/ " + vehicle + " / " + \
file_name = json_global_path + vehicle + " / " + \
vehicle + " - " + \
d [ ' Language ' ] + " _v " + \
str ( d [ ' Version ' ] ) + " .json "
str ( d [ ' Version ' ] ) + json_ext
file_size = os . path . getsize (
base_url + file_name )
d [ ' JsonURL ' ] = file_name
@ -231,27 +238,27 @@ def check_vehicle_update(vehicle_list=None):
d [ ' FileSize ' ] = file_size
d [ ' Error ' ] = ' File failed to load '
d [ ' IsUpdateAvailable ' ] = ' true '
d [ update_available ] = ' true '
d [ ' CurrentVersion ' ] = float (
current_version )
V ehicle_req_list. append ( d )
v ehicle_req_list. append ( d )
except Exception as e1 :
V ehicle_req_list. append (
{ " Error " : " Update checking Failed " } )
v ehicle_req_list. append (
{ error : " Update checking Failed " } )
elif current_version == float ( data1_global [ 0 ] [ ' version ' ] ) :
if current_version < float ( data1 [ 0 ] [ ' version ' ] ) :
data = frappe . db . sql ( ''' SELECT name as Name,max(version) as Version,vehicle_id as Vehicle,language as Language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_typ e= ' {} ' and vehicle_status = ' Active ' and version > ' {} ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id , publish_type , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name as Name,format( max(version),2 ) as Version,vehicle_id as Vehicle,language as Language
FROM ` tabPublish ` where vehicl e= ' {} ' and language = ' {} ' and publish_status = ' Published ' and publish_type = ' {} ' and
vehicle_status = ' Active ' and version > ' {} ' order by version ASC ; ''' .format(vehicle, l_id, publish_type, current_version), as_dict=1 )
try :
for d in data :
try :
file_name = " /files/json_files/internal/ " + vehicle + " / " + \
file_name = json_internal_path + vehicle + " / " + \
vehicle + " - " + \
d [ ' Language ' ] + " _v " + \
str ( d [ ' Version ' ] ) + \
" .json "
json_ext
file_size = os . path . getsize (
base_url + file_name )
d [ ' JsonURL ' ] = file_name
@ -265,27 +272,27 @@ def check_vehicle_update(vehicle_list=None):
d [ ' FileSize ' ] = file_size
d [ ' Error ' ] = ' File failed to load '
d [ ' IsUpdateAvailable ' ] = ' true '
d [ update_available ] = ' true '
d [ ' CurrentVersion ' ] = float (
current_version )
V ehicle_req_list. append ( d )
v ehicle_req_list. append ( d )
except Exception as e2 :
V ehicle_req_list. append (
{ " Error " : " Update checking Failed " } )
v ehicle_req_list. append (
{ error : " Update checking Failed " } )
elif ( float ( data1_global [ 0 ] [ ' version ' ] ) - 1.00 ) < current_version < float ( data1_global [ 0 ] [ ' version ' ] ) :
if current_version < float ( data1 [ 0 ] [ ' version ' ] ) :
data = frappe . db . sql ( ''' SELECT name as Name,max(version) as Version,vehicle_id as Vehicle,language as Language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' Global ' and vehicle_status = ' Active ' and version > ' {} ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name as Name,format( max(version),2 ) as Version,vehicle_id as Vehicle,language as Language FROM `tabPublish`
where vehicle = ' {} ' and language = ' {} ' and publish_status = ' Published ' and publish_type = ' Global ' and vehicle_status = ' Active '
and version > ' {} ' order by version ASC ; ''' .format(vehicle, l_id, current_version), as_dict=1 )
try :
for d in data :
try :
file_name = " /files/json_files/global/ " + vehicle + " / " + \
file_name = json_global_path + vehicle + " / " + \
vehicle + " - " + \
d [ ' Language ' ] + " _v " + \
str ( d [ ' Version ' ] ) + \
" .json "
json_ext
file_size = os . path . getsize (
base_url + file_name )
d [ ' JsonURL ' ] = file_name
@ -293,39 +300,39 @@ def check_vehicle_update(vehicle_list=None):
d [ ' Error ' ] = None
except :
file_name = " /files/json_files/global/ " + vehicle + " / " + \
file_name = json_global_path + vehicle + " / " + \
vehicle + " - " + \
d [ ' Language ' ] + " _v " + \
str ( d [ ' Version ' ] ) + \
" .json "
json_ext
file_size = None
d [ ' JsonURL ' ] = file_name
d [ ' FileSize ' ] = file_size
d [ ' Error ' ] = ' File failed to load '
d [ ' IsUpdateAvailable ' ] = ' true '
d [ update_available ] = ' true '
d [ ' CurrentVersion ' ] = float (
current_version )
V ehicle_req_list. append ( d )
v ehicle_req_list. append ( d )
except Exception as e2 :
V ehicle_req_list. append (
{ " Error " : " Update checking Failed " } )
v ehicle_req_list. append (
{ error : " Update checking Failed " } )
# else:
# V ehicle_req_list.append({"error2":"Else"})
# v ehicle_req_list.append({"error2":"Else"})
elif current_version > float ( data1_global [ 0 ] [ ' version ' ] ) :
if current_version < float ( data1 [ 0 ] [ ' version ' ] ) :
data = frappe . db . sql ( ''' SELECT name as Name,max(version) as Version,vehicle_id as Vehicle,language as Language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_type = ' {} ' and vehicle_status = ' Active ' and version > ' {} ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id , publish_type , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name as Name,format( max(version),2 ) as Version,vehicle_id as Vehicle,language as Language FROM `tabPublish`
where vehicle = ' {} ' and language = ' {} ' and publish_status = ' Published ' and publish_type = ' {} ' and vehicle_status = ' Active ' and version > ' {} '
order by version ASC ; ''' .format(vehicle, l_id, publish_type, current_version), as_dict=1 )
try :
for d in data :
try :
file_name = " /files/json_files/internal/ " + vehicle + " / " + \
file_name = json_internal_path + vehicle + " / " + \
vehicle + " - " + \
d [ ' Language ' ] + " _v " + \
str ( d [ ' Version ' ] ) + \
" .json "
json_ext
file_size = os . path . getsize (
base_url + file_name )
d [ ' JsonURL ' ] = file_name
@ -333,39 +340,39 @@ def check_vehicle_update(vehicle_list=None):
d [ ' Error ' ] = None
except :
file_name = " /files/json_files/internal/ " + vehicle + " / " + \
file_name = json_internal_path + vehicle + " / " + \
vehicle + " - " + \
d [ ' Language ' ] + " _v " + \
str ( d [ ' Version ' ] ) + \
" .json "
json_ext
file_size = None
d [ ' JsonURL ' ] = file_name
d [ ' FileSize ' ] = file_size
d [ ' Error ' ] = ' File failed to load '
d [ ' IsUpdateAvailable ' ] = ' true '
d [ update_available ] = ' true '
d [ ' CurrentVersion ' ] = float (
current_version )
V ehicle_req_list. append ( d )
v ehicle_req_list. append ( d )
except Exception as e3 :
V ehicle_req_list. append (
v ehicle_req_list. append (
{ ' Error ' : " Update checking Failed " } )
# else:
# V ehicle_req_list.append({'Error':"Else 3"})
# v ehicle_req_list.append({'Error':"Else 3"})
else :
V ehicle_req_list. append (
{ ' Language ' : l_id , ' IsUpdateAvailable ' : ' false ' , ' CurrentVersion ' : float ( current_version ) } )
v ehicle_req_list. append (
{ ' Language ' : l_id , update_available : ' false ' , ' CurrentVersion ' : float ( current_version ) } )
else :
data = frappe . db . sql ( ''' SELECT name as Name,max(version) as Version,vehicle_id as Vehicle,language as Language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and publish_status= ' Published '
and publish_typ e= ' {} ' and vehicle_status = ' Active ' and version > ' {} ' order by version ASC ; ''' .format(
current_db_name , vehicle , l_id , publish_type , current_version ) , as_dict = True )
data = frappe . db . sql ( ''' SELECT name as Name,format( max(version),2 ) as Version,vehicle_id as Vehicle,language as Language FROM `tabPublish`
where vehicl e = ' {} ' and language = ' {} ' and publish_status = ' Published ' and publish_type = ' {} ' and vehicle_status = ' Active '
and version > ' {} ' order by version ASC ; ''' .format(vehicle, l_id, publish_type, current_version), as_dict=1 )
try :
for d in data :
try :
file_name = " /files/json_files/internal/ " + vehicle + " / " + \
file_name = json_internal_path + vehicle + " / " + \
vehicle + " - " + d [ ' Language ' ] + \
" _v " + str ( d [ ' Version ' ] ) + " .json "
" _v " + str ( d [ ' Version ' ] ) + json_ext
file_size = os . path . getsize (
base_url + file_name )
d [ ' JsonURL ' ] = file_name
@ -379,24 +386,24 @@ def check_vehicle_update(vehicle_list=None):
d [ ' FileSize ' ] = file_size
d [ ' Error ' ] = ' File failed to load '
d [ ' IsUpdateAvailable ' ] = ' true '
d [ update_available ] = ' true '
d [ ' CurrentVersion ' ] = float ( current_version )
V ehicle_req_list. append ( d )
v ehicle_req_list. append ( d )
except Exception as e2 :
V ehicle_req_list. append (
{ " Error " : " Update checking Failed " } )
v ehicle_req_list. append (
{ error : " Update checking Failed " } )
response [ ' Vehicle ' ] = vehicle
response [ ' VehicleReqList ' ] = V ehicle_req_list
response [ ' VehicleReqList ' ] = v ehicle_req_list
return response
else :
response [ ' JSON ' ] = { " status" : 0 , " Error " : " Data Not available " }
response [ ' JSON ' ] = { status : 0 , error : " Data Not available " }
return response
except Exception as e :
response [ ' JSON ' ] = { " status" : 0 , " error" : " Update checking Failed " }
response [ ' JSON ' ] = { status : 0 , error : " Update checking Failed " }
return response
else :
return { " status" : 0 , " error" : " Check Parameter: vehicle list " }
return { status : 0 , error : " Check Parameter: vehicle list " }
def get_step_total_count ( json_path ) :
@ -461,10 +468,10 @@ def calculate_step(data):
def check_vehicle_update11 ( vehicle_list = None ) :
val = input_validation ( vehicle_list = vehicle_list )
if val != ' ' :
return { " status" : 0 , " error" : " Parameter missing: " + val }
return { status : 0 , error : " Parameter missing: " + val }
# if vehicle_list == None:
# return {" status" : 0, " error" : "Parameter missing: Vehicle List"}
V ehicle_req_list = [ ]
# return {status: 0, error: "Parameter missing: Vehicle List"}
v ehicle_req_list = [ ]
if vehicle_list :
response = { }
@ -481,9 +488,9 @@ def check_vehicle_update11(vehicle_list=None):
# Iterate over language
if publish_type == ' Internal ' :
for v in vehicle_data :
global_ver = frappe . db . sql ( ''' SELECT max(version) as version,publish_type as version,vehicle_id,language FROM {} .tabPublish where vehicle=' {} '
and language = ' {} ' and publish_status = ' Published ' and vehicle_status = ' Active ' and publish_type = ' Global ' ; ''' .format(
current_db_name , vehicle , l_id ) , as_dict = True )
global_ver = frappe . db . sql ( ''' SELECT format( max(version),2 ) as version,publish_type as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} '
and language = ' {} ' and publish_status = ' Published ' and vehicle_status = ' Active '
and publish_type = ' Global ' ; ''' .format(vehicle, l_id), as_dict=1 )
if global_ver :
global_pub_ver = global_pub_ver [ ' version ' ]
@ -491,7 +498,7 @@ def check_vehicle_update11(vehicle_list=None):
cur_ver = v [ ' CurrentVersion ' ]
pub_ver = get_publish_ver ( vehicle , l_id )
if cur_ver == pub_ver [ ' version ' ] :
V ehicle_req_list. append ( { ' Language ' : l_id , ' IsUpdateAvailable ' : ' false ' ,
v ehicle_req_list. append ( { ' Language ' : l_id , update_available : ' false ' ,
' CurrentVersion ' : float ( cur_ver ) } )
# Global File
@ -500,306 +507,44 @@ def check_vehicle_update11(vehicle_list=None):
l_id = v [ ' LanguageID ' ]
cur_ver = v [ ' CurrentVersion ' ]
global_pub = frappe . db . sql ( ''' SELECT max(version) as version,publish_type, vehicle_id,language FROM {} .tabPublish where vehicle=' {} '
and language = ' {} ' and publish_status = ' Published ' and vehicle_status = ' Active ' and publish_type = ' Global ' ; ''' .format(
current_db_name , vehicle , l_id ) , as_dict = True )
global_pub = frappe . db . sql ( ''' SELECT format( max(version),2 ) as version,publish_type, vehicle_id,language FROM `tabPublish` where vehicle= ' {} '
and language = ' {} ' and publish_status = ' Published ' and vehicle_status = ' Active '
and publish_type = ' Global ' ; ''' .format(vehicle, l_id), as_dict=1 )
if global_pub :
global_pub_ver1 = float ( global_pub [ 0 ] [ ' version ' ] )
if global_pub_ver1 == cur_ver :
V ehicle_req_list. append ( { ' Language ' : l_id , ' IsUpdateAvailable ' : ' false ' ,
v ehicle_req_list. append ( { ' Language ' : l_id , update_available : ' false ' ,
' CurrentVersion ' : float ( cur_ver ) } )
else :
if cur_ver < global_pub_ver1 :
if ( global_pub_ver1 - cur_ver ) > 1 :
file_name = " /files/json_files/full_update/ " + vehicle + " / " + vehicle + \
file_name = json_full_update_path + vehicle + " / " + vehicle + \
" - " + l_id + " - " + " full_v " + \
str ( global_pub [ 0 ] [ ' version ' ] ) + " .json "
str ( global_pub [ 0 ] [ ' version ' ] ) + json_ext
file_size = os . path . getsize (
base_url + file_name )
V ehicle_req_list. append ( { ' Version ' : global_pub_ver1 , ' Language ' : l_id , ' IsUpdateAvailable ' : ' true ' , ' JsonURL ' : file_name , ' FileSize ' : file_size ,
v ehicle_req_list. append ( { ' Version ' : global_pub_ver1 , ' Language ' : l_id , update_available : ' true ' , ' JsonURL ' : file_name , ' FileSize ' : file_size ,
' Error ' : None , ' CurrentVersion ' : float ( cur_ver ) } )
else :
file_name = " /files/json_files/global/ " + vehicle + " / " + vehicle + \
file_name = json_global_path + vehicle + " / " + vehicle + \
" - " + l_id + " _v " + \
str ( global_pub [ 0 ] [ ' version ' ] ) + " .json "
str ( global_pub [ 0 ] [ ' version ' ] ) + json_ext
file_size = os . path . getsize (
base_url + file_name )
V ehicle_req_list. append ( { ' Version ' : global_pub_ver1 , ' Language ' : l_id , ' IsUpdateAvailable ' : ' true ' , ' JsonURL ' : file_name , ' FileSize ' : file_size ,
v ehicle_req_list. append ( { ' Version ' : global_pub_ver1 , ' Language ' : l_id , update_available : ' true ' , ' JsonURL ' : file_name , ' FileSize ' : file_size ,
' Error ' : None , ' CurrentVersion ' : float ( cur_ver ) } )
else :
V ehicle_req_list. append ( { ' Language ' : l_id , ' IsUpdateAvailable ' : ' false ' ,
v ehicle_req_list. append ( { ' Language ' : l_id , update_available : ' false ' ,
' CurrentVersion ' : float ( cur_ver ) } )
return V ehicle_req_list
return v ehicle_req_list
def get_publish_ver ( vehicle , l_id ) :
return frappe . db . sql ( ''' SELECT max(version) as version,publish_type as version,vehicle_id,language FROM {} .tabPublish where vehicle= ' {} ' and language= ' {} ' and
publish_status = ' Published ' and vehicle_status = ' Active ' ; ''' .format(
current_db_name , vehicle , l_id ) , as_dict = True )
# @frappe.whitelist()
# def check_vehicle_update(vehicle_list=None):
# if vehicle_list == None:
# return {"status": 0, "error": "Parameter missing: Vehicle List"}
# if vehicle_list:
# try:
# response = {}
# req_list = json.loads(vehicle_list)
# vehicle = req_list['Vehicle']
# iid = req_list['InstallationId']
# vehicle_data = req_list['VehicleReqList']
# publish_type = frappe.db.get_list('App Device', filters={'name': iid}, fields='publish_type')
# if len(publish_type) > 0:
# publish_type = publish_type[0]['publish_type']
# Vehicle_req_list = []
# # Iterate on language
# for v in vehicle_data:
# appendList = []
# appendDict = {}
# variant = set()
# system = {}
# subsystem = {}
# procedure = {}
# list1 = []
# list2 = []
# l_id = v['LanguageID']
# current_version = v['CurrentVersion']
# # Not necessary
# if publish_type == 'Internal':
# publish_data = frappe.db.sql('''select name,CAST(version AS DECIMAL(10,2)) as version from {}.tabPublish where vehicle= '{}'
# and language='{}' and publish_type = '{}' and version > {} and vehicle_status = 'Active';
# '''.format(current_db_name, vehicle, l_id, publish_type, current_version), as_dict=True)
# else:
# publish_data = frappe.db.sql('''select name,version,release_description as description from {}.tabPublish where vehicle= '{}'
# and language='{}' and publish_type = '{}' and version > {} and vehicle_status = 'Active'; '''.format(
# current_db_name, vehicle, l_id, publish_type,
# current_version), as_dict=True)
# if len(publish_data) > 0:
# update_version = publish_data[-1]['version']
# for d in publish_data:
# publish_docs = frappe.db.get_list('Publish_Docs', filters={'parent': d['name']},
# fields=['variant_mapping', 'system', 'sub_system',
# 'procedure_link', 'procedure_status'])
# if publish_docs is not None:
# list1.append(publish_docs)
# for e in list1:
# for f in e:
# list2.append(f)
# # Sort data according to variant, system and sub system
# for d in list2:
# variant.add(d['variant_mapping'])
# for d in variant:
# temp = set()
# for j in list2:
# if j['variant_mapping'] == d:
# temp.add(j['system'])
# system[d] = temp
# for d in variant:
# temp_set = {}
# for j in system[d]:
# temp = set()
# for k in list2:
# if d == k['variant_mapping'] and j == k['system']:
# temp.add(k['sub_system'])
# temp_set[j] = temp
# subsystem[d] = temp_set
# for d in variant:
# temp_set = {}
# for i in system[d]:
# temp_dict = {}
# for j in subsystem[d][i]:
# temp_sub = set()
# for k in list2:
# if k['variant_mapping'] == d and k['system'] == i and k['sub_system'] == j:
# temp_sub.add(k['procedure_link'])
# temp_dict[j] = temp_sub
# temp_set[i] = temp_dict
# procedure[d] = temp_set
# appendList.append(procedure)
# for g in appendList:
# for f in g.keys():
# appendDict[f] = (g[f])
# final = []
# active_status_case = "CASE WHEN active_status = 'Active' THEN 'True' ELSE 'False' END AS active_status"
# for d in appendDict:
# total_count = 0
# # count = 0
# step_count = 0
# variant_out = {}
# # Variant data
# vari = frappe.db.sql('''SELECT name,variant, vehicle,family_code,vehicle_segment,fuel,transmission,drive, active_status
# FROM {}.`tabVariant Mapping` WHERE name ='{}' ; '''.format(current_db_name, d),
# as_dict=True)[0]
# var_asset = frappe.db.sql('''SELECT category, attach_file as file, {},idx as variant_asset_idx FROM {}.`tabVariant Mapping_Assets`
# where category<>'Technical Manual' and parent='{}' and language='{}';'''.format(
# active_status_case, current_db_name, d, l_id), as_dict=True)
# kms_mapping_status = frappe.db.sql(
# '''SELECT active_status FROM {0}.`tabKilometer Mapping` where name LIKE '{1}' and substring(name,-5,2)= '{2}';'''
# .format(current_db_name, vari['name'] + "%", l_id))[0][0]
# if vari['active_status'] == 'Active':
# vari['active_status'] = True
# else:
# vari['active_status'] = False
# if kms_mapping_status == 'Active':
# kms_active_status = True
# else:
# kms_active_status = False
# vari.update({'kms_mapping_active_status': kms_active_status})
# vari['Assets'] = var_asset
# total_count += len(var_asset)
# # -1 Due to NONE value in parent mapping
# total_count += len(appendDict[d]) - 1
# variant_out['Variant'] = vari
# # System data
# system_out = []
# for i in appendDict[d]:
# if i is not None:
# sys = frappe.db.sql(''' SELECT min(tmss.idx) as systemdisplayorder,ts.system_name,ts.icon_file,ts.myid,ts.active_status FROM
# {0}.`tabSystem Mapping_Sub System` as tmss inner join {0}.`tabSystems` as ts on tmss.systems = ts.system_name
# where tmss.parent LIKE '{1}' and substring(tmss.parent,-5,2) = '{2}' and tmss.systems ='{3}';'''
# .format(current_db_name, str(vari['name'] + "%"), l_id, i),
# as_dict=True)[0]
# if sys['active_status'] == 'Active':
# sys['active_status'] = True
# else:
# sys['active_status'] = False
# # System Assets
# sysassets = frappe.db.sql('''SELECT idx as systemdisplayorder, system_asset,active_status FROM {3}.`tabSystem Mapping_System Assets`
# where parent like '{0}%' and language='{1}' and systems='{2}';'''.format(
# d, l_id, i, current_db_name), as_dict=True)
# for sysasset in sysassets:
# if sysasset['active_status'] == 'Active':
# sysasset['active_status'] = True
# else:
# sysasset['active_status'] = False
# sys['Assets'] = sysassets
# total_count += len(sysassets)
# total_count += len(appendDict[d][i])
# # Sub system
# subsystem_out = []
# for j in appendDict[d][i]:
# subsys = frappe.db.sql('''select `tabSystem Mapping_Sub System`.idx as subSystemdisplayorder, systems,sub_systems, symptom,
# component, estimate_time as estimated_time, rts, mat, cover_image, `tabSub Systems`.myid,`tabSystem Mapping_Sub System`.active_status,
# `tabSystem Mapping_Sub System`.cover_image from {4}.`tabSystem Mapping_Sub System` inner join {4}.`tabSub Systems` on
# `tabSystem Mapping_Sub System`.sub_systems = `tabSub Systems`.name where `tabSystem Mapping_Sub System`.parent like '{0}-{3}%' and
# systems='{1}' and sub_systems='{2}' and `tabSystem Mapping_Sub System`.active_status = 'Active';'''.format(
# d, i, j, l_id, current_db_name), as_dict=True)
# if len(subsys) > 0:
# subsys = subsys[0]
# if subsys['active_status'] == 'Active':
# subsys['active_status'] = True
# else:
# subsys['active_status'] = False
# kms = frappe.db.sql('''SELECT kilometer as kilometer_name, idx as kilometer_IDX, applicable as kilometers_applicable
# FROM {}.`tabKilometer Mapping_Items` where sub_systems='{}' and parent Like '{}' and substring(parent,-5,2) = '{}'
# order by kilometer_IDX;'''.format(current_db_name, j, d + "%",
# l_id),
# as_dict=True)
# total_count += len(kms)
# subsys['Config Kilometer'] = kms
# for k in appendDict[d][i][j]:
# proc_details = frappe.db.sql('''select procedure_name, step_name, content_type,
# GROUP_CONCAT(case when content_type='Link' Then system_id else content end) as content,
# GROUP_CONCAT(file) as file,GROUP_CONCAT(DISTINCT idx order by idx) as display_order, idx from {}.tabProcedure_Details
# where parent ='{}' group by procedure_name,step_name,content_type,content order by idx asc; '''
# .format(current_db_name, k), as_dict=True)
# proc_data, step_length = get_parent_map(proc_details, 'procedure_name')
# procedure_status = frappe.db.sql(
# '''SELECT workflow_state FROM {1}.tabProcedure where name='{0}';'''.format(
# k, current_db_name))
# total_count += len(proc_data)
# subsys['procedure_link'] = k
# subsys['procedure_status'] = procedure_status[0][0]
# subsys['Procedure_details'] = proc_data
# step_count += step_length
# subsystem_out.append(subsys)
# sys['Subsystems'] = subsystem_out
# system_out.append(sys)
# variant_out['StepCount'] = step_count
# variant_out['Variant']['Systems'] = system_out
# variant_out['TotalCount'] = total_count + step_count
# final.append(variant_out)
# res = {'Name': '%s-%s_%s' % (iid, vehicle, l_id), 'Language': l_id,
# 'IsUpdateAvailable': 'true',
# 'CurrentVersion': float(current_version), 'Version': float(update_version)}
# try:
# dir1 = "/files/json_files/temp/"
# dir2 = base_url+ dir1
# if not os.path.exists(dir2):
# os.makedirs(dir2)
# file_name = dir1 + "%s-%s_%s.json" % (iid, vehicle, l_id)
# dicfinal = {'JSON': final}
# with open(base_url + file_name, 'w') as outfile:
# outfile.write(json.dumps(dicfinal))
# file_size = os.path.getsize(base_url + file_name)
# res['JsonURL'] = file_name
# res['FileSize'] = file_size
# res['Error'] = None
# except:
# res['JsonURL'] = None
# res['FileSize'] = None
# res['Error'] = 'File failed to save'
# Vehicle_req_list.append(res)
# else:
# Vehicle_req_list.append(
# {'Language': l_id, 'IsUpdateAvailable': 'false', 'CurrentVersion': float(current_version)})
# response['Vehicle'] = vehicle
# response['VehicleReqList'] = Vehicle_req_list
# return response
# else:
# response['JSON'] = {"status": 0, "Error": "Data Not available"}
# return response
# except Exception as e:
# response['JSON'] = {"status": 0, "error": e}
# return response
# else:
# return {"status": 0, "error": "Check Parameter: vehicle list"}
return frappe . db . sql ( ''' SELECT format(max(version),2) as version,publish_type as version,vehicle_id,language FROM `tabPublish` where vehicle= ' {} ' and language= ' {} ' and
publish_status = ' Published ' and vehicle_status = ' Active ' ; ''' .format(vehicle, l_id), as_dict=1)
@frappe . whitelist ( )
@ -809,23 +554,21 @@ def update_completed(FileName=None):
return rate_res
val = input_validation ( FileName = FileName )
if val != ' ' :
return { " status " : 0 , " error " : " Parameter missing: " + val }
# if FileName == None:
# return {'status': 0, 'error': "Parameter missing: FileName"}
return { status : 0 , error : " Parameter missing: " + val }
if FileName :
try :
os . remove ( base_url + FileName )
return { ' isSuccessful ' : True }
except Exception as e :
return { ' isSuccessful ' : False , " status" : 0 , ' error ' : e }
return { ' isSuccessful ' : False , status : 0 , ' error ' : e }
else :
return { " status" : 0 , " error" : " Parameter: FileName is null " }
return { status : 0 , error : " Parameter: FileName is null " }
@frappe . whitelist ( )
def delete_complete ( doc = None , method = None ) :
rate_res = rate_limit ( limit = 5 , seconds = 15 )
rate_res = custom_ rate_limit( limit = 5 , seconds = 15 )
if rate_res != 1 :
return rate_res
base_url1 = os . path . expanduser (