PSKManagement.py
changeset 2428 e0f16317668e
parent 2340 decf52efb7f7
child 2429 15f18dc8b56a
equal deleted inserted replaced
2340:decf52efb7f7 2428:e0f16317668e
     9 import json
     9 import json
    10 from zipfile import ZipFile
    10 from zipfile import ZipFile
    11 
    11 
    12 # PSK Management Data model :
    12 # PSK Management Data model :
    13 # [[ID,Desc, LastKnownURI, LastConnect]]
    13 # [[ID,Desc, LastKnownURI, LastConnect]]
    14 COL_ID,COL_URI,COL_DESC,COL_LAST = range(4)
    14 COL_ID, COL_URI, COL_DESC, COL_LAST = range(4)
       
    15 REPLACE, REPLACE_ALL, KEEP, KEEP_ALL, CANCEL = range(5)
    15 
    16 
    16 def _pskpath(project_path):
    17 def _pskpath(project_path):
    17     return os.path.join(project_path, 'psk')
    18     return os.path.join(project_path, 'psk')
    18 
    19 
    19 def _mgtpath(project_path):
    20 def _mgtpath(project_path):
    91         for nm in os.listdir(path):
    92         for nm in os.listdir(path):
    92             if nm.endswith('.secret') or nm == 'management.json':
    93             if nm.endswith('.secret') or nm == 'management.json':
    93                 zf.write(os.path.join(path, nm), nm)
    94                 zf.write(os.path.join(path, nm), nm)
    94 
    95 
    95 def ImportIDs(project_path, import_zip, should_I_replace_callback):
    96 def ImportIDs(project_path, import_zip, should_I_replace_callback):
       
    97     zf = ZipFile(import_zip, 'r')
    96     data = GetData(project_path)
    98     data = GetData(project_path)
    97 
    99 
    98     zip_loaded_data = json.loads(zf.open('management.json').read())
   100     zip_loaded_data = json.loads(zf.open('management.json').read())
    99     name_list = zf.namelist()
   101     name_list = zf.namelist()
   100     zip_filtered_data = _filterData(name_list, loaded_data)
   102     zip_filtered_data = _filterData(name_list, zip_loaded_data)
   101 
   103 
   102     idata = _dataByID(data)
   104     idata = _dataByID(data)
       
   105 
       
   106     keys_to_import = []
       
   107     result = None
   103 
   108 
   104     for imported_row in zip_filtered_data:
   109     for imported_row in zip_filtered_data:
   105         ID = imported_row[COL_ID]
   110         ID = imported_row[COL_ID]
   106         existing_row = idata.get(ID, None)
   111         existing_row = idata.get(ID, None)
   107         if existing_row is None:
   112         if existing_row is None:
   108             data.append(imported_row)
   113             data.append(imported_row)
   109         else:
   114         else:
   110             # callback returns the selected list for merge or none if canceled
   115             # callback returns the selected list for merge or none if canceled
   111             result = should_I_replace_callback(existing_row, imported_row)
   116             if result not in [REPLACE_ALL, KEEP_ALL]:
   112             if result is None:
   117                 result = should_I_replace_callback(existing_row, imported_row)
   113                 break
   118 
       
   119             if result == CANCEL:
       
   120                 return
   114             
   121             
   115             if result: 
   122             if result in [REPLACE_ALL, REPLACE]:
   116                 # replace with imported
   123                 # replace with imported
   117                 existing_row[:] = imported_row
   124                 existing_row[:] = imported_row
   118                 # copy the key of selected
   125                 # copy the key of selected
   119                 self.extract(ID+".secret", _pskpath(project_path))
   126                 keys_to_import.append(ID)
       
   127     
       
   128     for ID in keys_to_import:
       
   129         zf.extract(ID+".secret", _pskpath(project_path))
   120 
   130 
   121     SaveData(project_path, data)
   131     SaveData(project_path, data)
   122 
   132 
       
   133     return data
   123 
   134 
       
   135