@ -16,6 +16,9 @@ base_url = os.path.expanduser(
internal_path = base_url + ' /files/json_files/internal/ '
global_path = base_url + ' /files/json_files/global/ '
full_update_path = base_url + ' /files/json_files/full_update/ '
STATUS = ' status '
ERROR = ' error '
PARAM_MISSING = " Parameter missing : "
def custom_rate_limit ( limit , seconds ) :
@ -58,7 +61,7 @@ def api_procedure(args, publish_type, vehicle, language, version):
val = input_validation ( args = args , publish_type = publish_type ,
vehicle = vehicle , language = language , version = version )
if val != ' ' :
return { ' status ' : 0 , ' error ' : " Parameter missing : " + val }
return { STATUS : 0 , ERROR : PARAM_MISSING + val }
try :
dir1 = base_url + " /files/json_files/ "
@ -242,10 +245,6 @@ def json_grouping(args, language):
return dicfinal
def print ( sts ) :
frappe . msgprint ( str ( sts ) )
""" New Publish """
@ -257,9 +256,9 @@ def new_publish(args, publish_type, vehicle, language, version):
val = input_validation ( args = args , publish_type = publish_type ,
vehicle = vehicle , language = language , version = version )
if val != ' ' :
return { ' status ' : 0 , ' error ' : " Parameter missing : " + val }
# Create Directory for internal,global and full_update publish
# list1 = []
return { STATUS : 0 , ERROR : PARAM_MISSING + val }
""" Create Directory for internal,global and full_update publish """
try :
try :
if not os . path . exists ( internal_path + vehicle + ' / ' ) :
@ -270,26 +269,27 @@ def new_publish(args, publish_type, vehicle, language, version):
os . makedirs ( full_update_path + vehicle + ' / ' )
except Exception as e :
return { " status " : 0 , " error " : " Failed to create Folders " }
return { STATUS : 0 , ERROR : " Failed to create Folders " }
# JSON generation
""" JSON generation """
json_file = json_grouping ( args , language )
file_name = ' '
base_file_name = ' %s - %s _v %s .json ' % ( vehicle , language , version )
# File name generation
""" File name generation """
if publish_type . lower ( ) == ' internal ' :
file_name = internal_path + vehicle + ' / ' + base_file_name
elif publish_type . lower ( ) == ' global ' :
file_name = global_path + vehicle + ' / ' + base_file_name
else :
return { " status " : 0 , ' error ' : ' Publish type not available ' }
return { STATUS : 0 , ERROR : ' Publish type not available ' }
# Save file (Internal/Global)
""" Save file (Internal/Global) """
with open ( file_name , ' w ' ) as outfile :
outfile . write ( json . dumps ( json_file ) )
# get_step_total_count(file_name)
# Remove previous internal publish file
""" Remove previous internal publish file """
if publish_type . lower ( ) == ' internal ' :
for fil in os . listdir ( internal_path + vehicle ) :
file_val = internal_path + vehicle + ' / ' + fil
@ -297,17 +297,22 @@ def new_publish(args, publish_type, vehicle, language, version):
if ( fil . split ( ' - ' ) [ 1 ] ) . split ( ' _ ' ) [ 0 ] == language :
os . remove ( file_val )
# Generate full update file
""" Generate full update file """
pub_ver = None
prev_update_ver = None
if publish_type . lower ( ) == ' global ' :
full_update_file_name = full_update_path + vehicle + ' / ' + \
' %s - %s -full_v %s .json ' % ( vehicle , language , version )
# Since full update is not available for Global version 1
if version == 1.00 :
new_full_update_file_name = full_update_path + vehicle + ' / ' + \
' %s - %s -full_update.json ' % ( vehicle , language )
""" Since full update is not available for Global version 1 """
if version == ' 1.00 ' :
with open ( full_update_file_name , ' w ' ) as outfile :
outfile . write ( json . dumps ( json_file ) )
with open ( new_full_update_file_name , ' w ' ) as outfile :
outfile . write ( json . dumps ( json_file ) )
# get_step_total_count(full_update_file_name)
else :
@ -318,14 +323,13 @@ def new_publish(args, publish_type, vehicle, language, version):
prev_full_update_file = full_update_path + vehicle + ' / ' + \
' %s - %s -full_v %s .json ' % ( vehicle ,
language , prev_update_ver )
# test_full_update_file_name = '/home/ubuntu/frappe-bench/sites/guidedsmartservice.com/public/files/json_files/full_update/XUV 0613/XUV 0613-en-full_update.json'
file_flag , final_update_file = merge_json_files (
prev_full_update_file , file_name , full_update_file_name )
# if file_flag:
# return True, file_name.split('public')[1]
# else:
# return False, final_update_file
# get_step_total_count(final_update_file)
# return prev_full_update_file, file_name, new_full_update_file_name
# file_flag, final_update_file = new_merge_json_files(
# prev_full_update_file, file_name, new_full_update_file_name)
return file_flag , final_update_file
return True , file_name . split ( ' public ' ) [ 1 ]
except Exception as e :
@ -335,17 +339,23 @@ def new_publish(args, publish_type, vehicle, language, version):
@frappe . whitelist ( allow_guest = True )
def merge_json_files ( old_json_path , new_json_path , out_file_path ) :
# old_json_path = '/home/ubuntu/frappe-bench/sites/guidedsmartservice.com/public/files/json_files/full_update/XUV 0613/XUV 0613-en-full_v1.0.json'
# new_json_path = '/home/ubuntu/frappe-bench/sites/guidedsmartservice.com/public/files/json_files/global/XUV 0613/XUV 0613-en_v2.00.json'
# out_file_path = '/home/ubuntu/frappe-bench/sites/guidedsmartservice.com/public/files/json_files/full_update/XUV 0613/XUV 0613-en-full_update_test.json'
# return old_json_path,new_json_path,out_file_path
# rate_res = custom_rate_limit(limit=5, seconds=15)
# if rate_res != 1:
# return rate_res
# val = input_validation(old_json_path=old_json_path,
# new_json_path=new_json_path, out_file_path=out_file_path)
# if val != '':
# return {' status' : 0, ' error' : "Parameter missing :" + val}
# return {status: 0, error: "Parameter missing :" + val}
try :
with open ( old_json_path , ' r ' ) as json_file :
data_old = json . load ( json_file )
# return data_old
with open ( new_json_path , ' r ' ) as json_file1 :
data_new = json . load ( json_file1 )
@ -377,7 +387,6 @@ def merge_json_files(old_json_path, new_json_path, out_file_path):
variant_asset_added . add ( variant_asset [ ' file ' ] )
except :
pass
# print('Assets not present in '+variant_new['Variant']['name'])
try :
# variant_new['Variant']['Systems']
for system in variant_new [ ' Variant ' ] [ ' Systems ' ] :
@ -514,7 +523,6 @@ def merge_json_files(old_json_path, new_json_path, out_file_path):
system_added . add ( system [ ' system_name ' ] )
except :
pass
# print('Systems not present in '+variant_new['Variant']['name'])
for old_variants in data_old [ ' JSON ' ] :
if old_variants [ ' Variant ' ] [ ' name ' ] == variant_new [ ' Variant ' ] [ ' name ' ] :
try :
@ -526,7 +534,7 @@ def merge_json_files(old_json_path, new_json_path, out_file_path):
system_added . add ( system [ ' system_name ' ] )
except :
pass
# print('Systems not present in '+variant_new['Variant']['name'])
data_consolidated [ ' JSON ' ] . append ( { ' Variant ' : { " name " : variant_new [ ' Variant ' ] [ ' name ' ] ,
" variant " : variant_new [ ' Variant ' ] [ ' variant ' ] ,
" vehicle " : variant_new [ ' Variant ' ] [ ' vehicle ' ] ,
@ -547,8 +555,224 @@ def merge_json_files(old_json_path, new_json_path, out_file_path):
if variant_old [ ' Variant ' ] [ ' name ' ] in variant_name and variant_old [ ' Variant ' ] [ ' name ' ] not in variant_added :
data_consolidated [ ' JSON ' ] . append ( { ' Variant ' : variant_old [ ' Variant ' ] ,
} )
json_object = json . dumps ( data_consolidated )
with open ( out_file_path , " w " ) as outfile :
outfile . write ( json_object )
return True , out_file_path
except Exception as e :
return False , frappe . get_traceback ( )
# return "Exception in publish"
@frappe . whitelist ( allow_guest = True )
def new_merge_json_files ( old_json_path , new_json_path , out_file_path ) :
try :
with open ( old_json_path , ' r ' ) as json_file :
data_old = json . load ( json_file )
with open ( new_json_path , ' r ' ) as json_file1 :
data_new = json . load ( json_file1 )
data_consolidated = { ' JSON ' : [ ] }
variant_name = set ( )
sub_system_name = set ( )
variant_added = set ( )
for variant in data_old [ ' JSON ' ] :
variant_name . add ( variant [ ' Variant ' ] [ ' name ' ] )
for variant in data_new [ ' JSON ' ] :
variant_name . add ( variant [ ' Variant ' ] [ ' name ' ] )
for variant_new in data_new [ ' JSON ' ] :
if variant_new [ ' Variant ' ] [ ' name ' ] in variant_name and variant_new [ ' Variant ' ] [ ' name ' ] not in variant_added :
system_name = set ( )
system_added = set ( )
system_list = [ ]
variant_asset_name = set ( )
variant_asset_added = set ( )
variant_asset_list = [ ]
try :
# variant_new['Variant']['Assets']
for variant_asset in variant_new [ ' Variant ' ] [ ' Assets ' ] :
variant_asset_name . add ( variant_asset [ ' file ' ] )
if variant_asset [ ' file ' ] not in variant_asset_added and variant_asset [
' file ' ] in variant_asset_name :
variant_asset_list . append ( variant_asset )
variant_asset_added . add ( variant_asset [ ' file ' ] )
except :
pass
try :
# variant_new['Variant']['Systems']
for system in variant_new [ ' Variant ' ] [ ' Systems ' ] :
system_asset_name = set ( )
system_asset_added = set ( )
system_asset_list = [ ]
system_name . add ( system [ ' system_name ' ] )
if system [ ' system_name ' ] not in system_added and system [ ' system_name ' ] in system_name :
sub_system_name = set ( )
sub_system_added = set ( )
sub_system_list = [ ]
for subsystem in system [ ' Subsystems ' ] :
sub_system_name . add ( subsystem [ ' sub_systems ' ] )
if subsystem [ ' sub_systems ' ] not in sub_system_added and subsystem [ ' sub_systems ' ] in sub_system_name :
conf_km_name = set ( )
conf_km_added = set ( )
conf_km_list = [ ]
for ck in subsystem [ ' Config Kilometer ' ] :
conf_km_name . add ( ck [ ' kilometer_name ' ] )
if ck [ ' kilometer_name ' ] not in conf_km_added and ck [ ' kilometer_name ' ] in conf_km_name :
conf_km_list . append ( {
" kilometer_name " : ck [ ' kilometer_name ' ] ,
" kilometer_IDX " : ck [ ' kilometer_IDX ' ] ,
" kilometers_applicable " : ck [ ' kilometers_applicable ' ]
} )
conf_km_added . add (
ck [ ' kilometer_name ' ] )
for old_variants in data_old [ ' JSON ' ] :
if old_variants [ ' Variant ' ] [ ' name ' ] == variant_new [ ' Variant ' ] [ ' name ' ] :
for old_system in old_variants [ ' Variant ' ] [ ' Systems ' ] :
if old_system [ ' system_name ' ] == system [ ' system_name ' ] :
for old_sub_system in old_system [ ' Subsystems ' ] :
if old_sub_system [ ' sub_systems ' ] == subsystem [ ' sub_systems ' ] :
for old_ck in old_sub_system [ ' Config Kilometer ' ] :
conf_km_name . add (
old_ck [ ' kilometer_name ' ] )
if old_ck [ ' kilometer_name ' ] not in conf_km_added and \
old_ck [ ' kilometer_name ' ] in conf_km_name :
sub_system_list . append (
old_ck )
conf_km_added . add (
old_ck [ ' kilometer_name ' ] )
proc_det_name = set ( )
proc_det_added = set ( )
proc_det_list = [ ]
for pd in subsystem [ ' Procedure_details ' ] :
proc_det_name . add ( pd [ ' procedure_name ' ] )
if pd [ ' procedure_name ' ] not in proc_det_added and pd [
' procedure_name ' ] in proc_det_name :
proc_det_list . append ( {
" procedure_name " : pd [ ' procedure_name ' ] ,
" steps " : pd [ ' steps ' ] ,
} )
proc_det_added . add (
pd [ ' procedure_name ' ] )
for old_variants in data_old [ ' JSON ' ] :
if old_variants [ ' Variant ' ] [ ' name ' ] == variant_new [ ' Variant ' ] [ ' name ' ] :
for old_system in old_variants [ ' Variant ' ] [ ' Systems ' ] :
if old_system [ ' system_name ' ] == system [ ' system_name ' ] :
for old_sub_system in old_system [ ' Subsystems ' ] :
if old_sub_system [ ' sub_systems ' ] == subsystem [ ' sub_systems ' ] :
for old_pd in old_sub_system [ ' Procedure_details ' ] :
proc_det_name . add (
old_pd [ ' kilometer_name ' ] )
if old_pd [ ' procedure_name ' ] not in proc_det_added and \
old_pd [ ' procedure_name ' ] in proc_det_name :
sub_system_list . append (
old_pd )
proc_det_added . add (
old_pd [ ' kilometer_name ' ] )
sub_system_list . append ( { " subSystemdisplayorder " : subsystem [ ' subSystemdisplayorder ' ] ,
" systems " : subsystem [ ' systems ' ] ,
" sub_systems " : subsystem [ ' sub_systems ' ] ,
" symptom " : subsystem [ ' symptom ' ] ,
" component " : subsystem [ ' component ' ] ,
" estimated_time " : subsystem [ ' estimated_time ' ] ,
" rts " : subsystem [ ' rts ' ] ,
" mat " : subsystem [ ' mat ' ] ,
" cover_image " : subsystem [ ' cover_image ' ] ,
" myid " : subsystem [ ' myid ' ] ,
" active_status " : subsystem [ ' active_status ' ] ,
" Config Kilometer " : conf_km_list ,
" procedure_status " : subsystem [ ' procedure_status ' ] ,
" procedure_link " : subsystem [ ' procedure_link ' ] ,
" Procedure_details " : proc_det_list ,
} )
sub_system_added . add (
subsystem [ ' sub_systems ' ] )
for old_variants in data_old [ ' JSON ' ] :
if old_variants [ ' Variant ' ] [ ' name ' ] == variant_new [ ' Variant ' ] [ ' name ' ] :
for old_system in old_variants [ ' Variant ' ] [ ' Systems ' ] :
if old_system [ ' system_name ' ] == system [ ' system_name ' ] :
for old_sub_system in old_system [ ' Subsystems ' ] :
sub_system_name . add (
old_sub_system [ ' sub_systems ' ] )
if old_sub_system [ ' sub_systems ' ] not in sub_system_added and \
old_sub_system [ ' sub_systems ' ] in sub_system_name :
sub_system_list . append (
old_sub_system )
sub_system_added . add (
old_sub_system [ ' sub_systems ' ] )
for asset in system [ ' Assets ' ] :
system_asset_name . add ( asset [ ' system_asset ' ] )
if asset [ ' system_asset ' ] not in system_asset_added and asset [
' system_asset ' ] in system_asset_name :
system_asset_list . append ( { " system_asset " : asset [ ' system_asset ' ] ,
" systemdisplayorder " : asset [ ' systemdisplayorder ' ] ,
" active_status " : asset [ ' active_status ' ] ,
} )
system_asset_added . add (
asset [ ' system_asset ' ] )
for old_variants in data_old [ ' JSON ' ] :
if old_variants [ ' Variant ' ] [ ' name ' ] == variant_new [ ' Variant ' ] [ ' name ' ] :
for old_system in old_variants [ ' Variant ' ] [ ' Systems ' ] :
if old_system [ ' system_name ' ] == system [ ' system_name ' ] :
for old_system_asset in old_system [ ' Assets ' ] :
system_asset_name . add (
old_system_asset [ ' system_asset ' ] )
if old_system_asset [ ' system_asset ' ] not in system_asset_added and \
old_system_asset [ ' system_asset ' ] in system_asset_name :
system_asset_list . append (
old_system_asset )
system_asset_added . add (
old_system_asset [ ' system_asset ' ] )
system_list . append ( { " systemdisplayorder " : system [ ' systemdisplayorder ' ] ,
" system_name " : system [ ' system_name ' ] ,
" icon_file " : system [ ' icon_file ' ] ,
" myid " : system [ ' myid ' ] ,
" active_status " : system [ ' active_status ' ] ,
" Assets " : system_asset_list ,
" Subsystems " : sub_system_list ,
" Config Kilometer " : conf_km_list ,
} )
system_added . add ( system [ ' system_name ' ] )
except :
pass
for old_variants in data_old [ ' JSON ' ] :
if old_variants [ ' Variant ' ] [ ' name ' ] == variant_new [ ' Variant ' ] [ ' name ' ] :
try :
old_variants [ ' Variant ' ] [ ' Systems ' ]
for system in old_variants [ ' Variant ' ] [ ' Systems ' ] :
system_name . add ( system [ ' system_name ' ] )
if system [ ' system_name ' ] not in system_added and system [ ' system_name ' ] in system_name :
system_list . append ( system )
system_added . add ( system [ ' system_name ' ] )
except :
pass
data_consolidated [ ' JSON ' ] . append ( { ' Variant ' : { " name " : variant_new [ ' Variant ' ] [ ' name ' ] ,
" variant " : variant_new [ ' Variant ' ] [ ' variant ' ] ,
" vehicle " : variant_new [ ' Variant ' ] [ ' vehicle ' ] ,
" family_code " : variant_new [ ' Variant ' ] [ ' family_code ' ] ,
" vehicle_segment " : variant_new [ ' Variant ' ] [
' vehicle_segment ' ] ,
" fuel " : variant_new [ ' Variant ' ] [ ' fuel ' ] ,
" transmission " : variant_new [ ' Variant ' ] [ ' transmission ' ] ,
" drive " : variant_new [ ' Variant ' ] [ ' drive ' ] ,
" active_status " : variant_new [ ' Variant ' ] [ ' active_status ' ] ,
" kms_mapping_active_status " : variant_new [ ' Variant ' ] [
' kms_mapping_active_status ' ] ,
" Assets " : variant_asset_list ,
" Systems " : system_list
} } )
variant_added . add ( variant_new [ ' Variant ' ] [ ' name ' ] )
for variant_old in data_old [ ' JSON ' ] :
if variant_old [ ' Variant ' ] [ ' name ' ] in variant_name and variant_old [ ' Variant ' ] [ ' name ' ] not in variant_added :
data_consolidated [ ' JSON ' ] . append ( { ' Variant ' : variant_old [ ' Variant ' ] ,
} )
return True , data_consolidated
json_object = json . dumps ( data_consolidated )
# return True, json_object
with open ( out_file_path , " w " ) as outfile :
outfile . write ( json_object )
@ -565,16 +789,14 @@ def new_update(vehicle_list=None):
return rate_res
val = input_validation ( vehicle_list = vehicle_list )
if val != ' ' :
return { ' status ' : 0 , ' error ' : " Parameter missing : " + val }
return { STATUS : 0 , ERROR : PARAM_MISSING + val }
req_list = json . loads ( vehicle_list )
vehicle = req_list [ ' Vehicle ' ]
iid = req_list [ ' InstallationId ' ]
vehicle_data = req_list [ ' VehicleReqList ' ]
list_val = [ ]
json_val = [ ]
for v in vehicle_data :
lang = v [ ' LanguageID ' ]
cur_ver = v [ ' CurrentVersion ' ]
# cur_ver = v['CurrentVersion' ]
# publish_list = frappe.db.sql(''' SELECT vehicle,`language`,version,publish_type FROM tabPublish where vehicle = '{}'
# and publish_type='Global' AND `language` = '{}';'''.format(vehicle,lang),as_dict=True)
@ -654,6 +876,7 @@ def calculate_total(data):
@frappe . whitelist ( )
def upv ( ) :
frappe . db . sql (
f ''' update `tabPublish` set version = 1.00 where name = ' THAR-en -2023-05-21 16:57:54.119826 ' ; ''' )
frappe . db . commit ( )
# frappe.db.sql(
# f'''update `tabPublish` set version = 1.00 where name = 'THAR-en -2023-05-21 16:57:54.119826';''')
# frappe.db.commit()
return 1