mirror of
				https://github.com/iiab/iiab.git
				synced 2025-03-09 15:40:17 +00:00 
			
		
		
		
	move to rpi for testing
This commit is contained in:
		
							parent
							
								
									f20dc98788
								
							
						
					
					
						commit
						145c7ad160
					
				
					 2 changed files with 12 additions and 174 deletions
				
			
		| 
						 | 
				
			
			@ -105,13 +105,24 @@ def get_installed_regions():
 | 
			
		|||
def write_osm_vector_idx(installed_maps):
 | 
			
		||||
   map_dict ={} 
 | 
			
		||||
   map_dict['regions'] = {}
 | 
			
		||||
   idx_dict = {}
 | 
			
		||||
   for fname in installed_maps:
 | 
			
		||||
      region = extract_region_from_filename(fname)
 | 
			
		||||
      if map == 'maplist': continue # not a real region
 | 
			
		||||
      data_dict = map_catalog['regions'].get(region,'')
 | 
			
		||||
      map_dict['regions'][region] = data_dict
 | 
			
		||||
      if data_dict == '': continue
 | 
			
		||||
 | 
			
		||||
      # Create the idx file in format required bo js-menu system
 | 
			
		||||
      idx_dict[region] = {}
 | 
			
		||||
      idx_dict[region]['file_name'] = os.path.basename(map_dict[region][:-4])
 | 
			
		||||
      idx_dict[region]['menu_item'] = map_dict[region]['perma_ref']
 | 
			
		||||
      idx_dict[region]['size'] = map_dict[region]['size']
 | 
			
		||||
      idx_dict[region]['zim_date'] = map_dict[region]['date']
 | 
			
		||||
      idx_dict[region]['language'] = map_dict[region]['perma_ref'][:2]
 | 
			
		||||
 | 
			
		||||
   with open(osm_vector_idx_dir + '/osm-vector-idx.json','w') as idx:
 | 
			
		||||
      idx.write(json.dumps(map_dict,indent=2)) 
 | 
			
		||||
      idx.write(json.dumps(idx_dict,indent=2)) 
 | 
			
		||||
 | 
			
		||||
def create_menu_def(region,default_name,intended_use='map'):
 | 
			
		||||
   item = map_catalog['regions'][region]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,173 +0,0 @@
 | 
			
		|||
#!/usr/bin/env python
 | 
			
		||||
# Scan the osm-vector directory, update the osm-vector-idx.json, add menu-defs
 | 
			
		||||
 | 
			
		||||
from geojson import Feature, Point, FeatureCollection, Polygon
 | 
			
		||||
import geojson
 | 
			
		||||
import json
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
import fnmatch
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
IIAB_PATH='/etc/iiab'
 | 
			
		||||
if not IIAB_PATH in sys.path:
 | 
			
		||||
    sys.path.append(IIAB_PATH)
 | 
			
		||||
from iiab_env import get_iiab_env
 | 
			
		||||
 | 
			
		||||
SCRIPT_DIR = '/opt/admin/cmdsrv/scripts'
 | 
			
		||||
if not SCRIPT_DIR in sys.path:
 | 
			
		||||
    sys.path.append(SCRIPT_DIR)
 | 
			
		||||
if os.path.exists(os.path.join(SCRIPT_DIR,'iiab_update_menus.py')):
 | 
			
		||||
   import iiab_update_menus as menus
 | 
			
		||||
   console_installed = True
 | 
			
		||||
else:
 | 
			
		||||
   console_installed = False
 | 
			
		||||
 | 
			
		||||
doc_root = get_iiab_env('WWWROOT')
 | 
			
		||||
menuDefs = doc_root + "/js-menu/menu-files/menu-defs/"
 | 
			
		||||
osm_vector_idx_dir = doc_root + "/common/assets"
 | 
			
		||||
#map_doc_root = '{{ osm_vector_path }}'
 | 
			
		||||
map_doc_root = '/library/www/osm-vector'
 | 
			
		||||
# map_catalog will be global, assumed always available
 | 
			
		||||
map_catalog = {}
 | 
			
		||||
map_menu_def_list = []
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
   global map_menu_def_list
 | 
			
		||||
   get_map_catalog()
 | 
			
		||||
   #print(json.dumps(map_catalog,indent=2))
 | 
			
		||||
   
 | 
			
		||||
   map_menu_def_list = get_menu_def_names()
 | 
			
		||||
   print(json.dumps(map_menu_def_list,indent=2))
 | 
			
		||||
 | 
			
		||||
   installed_maps = get_installed_regions()
 | 
			
		||||
   print(installed_maps)
 | 
			
		||||
 | 
			
		||||
   write_osm_vector_idx(installed_maps)
 | 
			
		||||
   for fname in installed_maps:
 | 
			
		||||
      region = extract_region_from_filename(fname)
 | 
			
		||||
      print('checking for %s region'%region)
 | 
			
		||||
      if region != 'maplist':
 | 
			
		||||
         item = map_catalog['regions'][region]
 | 
			
		||||
         menu_ref = item['perma_ref']
 | 
			
		||||
      else:
 | 
			
		||||
         menu_ref = 'en-map_test'
 | 
			
		||||
         item = { "perma_ref" : "en-map_test" }
 | 
			
		||||
      if region != 'maplist' and not (region in map_menu_def_list):
 | 
			
		||||
         print('creating menu def for %s'%item['perma_ref'])
 | 
			
		||||
         create_menu_def(region,item['perma_ref'] + '.json')
 | 
			
		||||
      if fetch_menu_json_value('autoupdate_menu'):
 | 
			
		||||
         print('fetch_menu returned %s'%fetch_menu_json_value('autoupdate_menu'))
 | 
			
		||||
         # add this new menu def to home page
 | 
			
		||||
         print('calling to insert %s.json'%menu_ref)
 | 
			
		||||
         menus.update_menu_json(menu_ref)
 | 
			
		||||
      print('fetch_menu returned %s'%fetch_menu_json_value('autoupdate_menu'))
 | 
			
		||||
 | 
			
		||||
def get_map_catalog():
 | 
			
		||||
   global map_catalog
 | 
			
		||||
   input_json = map_doc_root + '/maplist/assets/regions.json'
 | 
			
		||||
   with open(input_json,'r') as regions:
 | 
			
		||||
      reg_str = regions.read()
 | 
			
		||||
      map_catalog = json.loads(reg_str)
 | 
			
		||||
   #print(json.dumps(map_catalog,indent=2))
 | 
			
		||||
 | 
			
		||||
def get_menu_def_names(intended_use='map'):
 | 
			
		||||
   menu_def_list =[] 
 | 
			
		||||
   os.chdir(menuDefs)
 | 
			
		||||
   for filename in os.listdir('.'):
 | 
			
		||||
      if fnmatch.fnmatch(filename, '*.json'):
 | 
			
		||||
         try:
 | 
			
		||||
            with open(filename,'r') as json_file:
 | 
			
		||||
                readstr = json_file.read()
 | 
			
		||||
                data = json.loads(readstr)
 | 
			
		||||
         except:
 | 
			
		||||
            print("failed to parse %s"%filename)
 | 
			
		||||
            print(readstr)
 | 
			
		||||
         if data.get('intended_use','') != intended_use:
 | 
			
		||||
            continue
 | 
			
		||||
         map_name = data.get('name','')
 | 
			
		||||
         if map_name != '':
 | 
			
		||||
            menu_def_list.append(data['name'])
 | 
			
		||||
   return menu_def_list
 | 
			
		||||
 | 
			
		||||
def get_installed_regions():
 | 
			
		||||
   installed = []
 | 
			
		||||
   os.chdir(map_doc_root)
 | 
			
		||||
   for filename in os.listdir('.'):
 | 
			
		||||
      if fnmatch.fnmatch(filename, '??-osm-omt*'):
 | 
			
		||||
         region = re.sub(r'^..-osm-omt_(.*)',r'\1',filename)
 | 
			
		||||
         installed.append(region)
 | 
			
		||||
   # add the splash page if no other maps are present
 | 
			
		||||
   if len(installed) == 0:
 | 
			
		||||
         installed.append('maplist')
 | 
			
		||||
   return installed
 | 
			
		||||
 | 
			
		||||
def write_osm_vector_idx(installed_maps):
 | 
			
		||||
   map_dict ={} 
 | 
			
		||||
   map_dict['regions'] = {}
 | 
			
		||||
   for fname in installed_maps:
 | 
			
		||||
      region = extract_region_from_filename(fname)
 | 
			
		||||
      if map == 'maplist': continue # not a real region
 | 
			
		||||
      data_dict = map_catalog['regions'].get(region,'')
 | 
			
		||||
      map_dict['regions'][region] = data_dict
 | 
			
		||||
   with open(osm_vector_idx_dir + '/osm-vector-idx.json','w') as idx:
 | 
			
		||||
      idx.write(json.dumps(map_dict,indent=2)) 
 | 
			
		||||
 | 
			
		||||
def create_menu_def(region,default_name,intended_use='map'):
 | 
			
		||||
   item = map_catalog['regions'][region]
 | 
			
		||||
   if len(item.get('language','')) > 2:
 | 
			
		||||
     lang = item['language'][:2]
 | 
			
		||||
   else: # default to english
 | 
			
		||||
     lang = 'en'
 | 
			
		||||
   filename = lang + '-' + item['perma_ref'] + '.json'
 | 
			
		||||
   # create a stub for this zim
 | 
			
		||||
   menuDef = {}
 | 
			
		||||
   default_logo = 'osm.jpg'
 | 
			
		||||
   menuDef["intended_use"] = "map"
 | 
			
		||||
   menuDef["lang"] = lang
 | 
			
		||||
   menuDef["logo_url"] = default_logo
 | 
			
		||||
   menuitem = lang + '-' + item['perma_ref']
 | 
			
		||||
   menuDef["menu_item_name"] = default_name
 | 
			
		||||
   menuDef["title"] = "OpenStreetMap: 18 Levels of Zoom for <b> " + item.get('title','ERROR') + '</b>'
 | 
			
		||||
   menuDef["map_name"] = item['perma_ref']
 | 
			
		||||
   menuDef["start_url"] = lang + '-' + item['perma_ref']
 | 
			
		||||
   menuDef["description"] = '<p>Resolution of the Whole World to 5 KM. OpenStreetMap data for <b>' + item.get('title','') + '</b> with details down to 5 Meters</p>'
 | 
			
		||||
   menuDef["extra_html"] = ""
 | 
			
		||||
   menuDef["automatically_generated"] = "true"
 | 
			
		||||
   if not os.path.isfile(menuDefs + default_name): # logic to here can still overwrite existing menu def
 | 
			
		||||
       print("creating %s"%menuDefs + default_name)
 | 
			
		||||
       with open(menuDefs + default_name,'w') as menufile:
 | 
			
		||||
          menufile.write(json.dumps(menuDef,indent=2))
 | 
			
		||||
   return default_name[:-5]
 | 
			
		||||
 | 
			
		||||
def human_readable(num):
 | 
			
		||||
    # return 3 significant digits and unit specifier
 | 
			
		||||
    num = float(num)
 | 
			
		||||
    units = [ '','K','M','G']
 | 
			
		||||
    for i in range(4):
 | 
			
		||||
        if num<10.0:
 | 
			
		||||
            return "%.2f%s"%(num,units[i])
 | 
			
		||||
        if num<100.0:
 | 
			
		||||
            return "%.1f%s"%(num,units[i])
 | 
			
		||||
        if num < 1000.0:
 | 
			
		||||
            return "%.0f%s"%(num,units[i])
 | 
			
		||||
        num /= 1000.0
 | 
			
		||||
 | 
			
		||||
def fetch_menu_json_value(key):
 | 
			
		||||
   with open( doc_root + '/home/menu.json','r') as menudef:
 | 
			
		||||
      data = json.loads(menudef.read())
 | 
			
		||||
      return data.get(key,'')
 | 
			
		||||
 | 
			
		||||
def extract_region_from_filename(fname):
 | 
			
		||||
   substitutions = { "north": "north_america",\
 | 
			
		||||
                     "central": "central_america",\
 | 
			
		||||
                     "southeast": "southeast_asia",
 | 
			
		||||
                     "south": "south_america" }
 | 
			
		||||
   # wish I had used - as separator between key and date
 | 
			
		||||
   nibble = fname.split('_')[1]
 | 
			
		||||
   nibble = substitutions.get(nibble,nibble)
 | 
			
		||||
   return(nibble)
 | 
			
		||||
      
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
   if console_installed:
 | 
			
		||||
      main()
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue