1
0
Fork 0
mirror of https://github.com/iiab/iiab.git synced 2025-02-13 19:52:06 +00:00
iiab/roles/osm-vector/templates/iiab-update-maps
2019-04-08 16:10:38 -07:00

131 lines
4.2 KiB
Python
Executable file

#!/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='{{ iiab_dir }}'
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)
import iiab_update_menus as update_menus
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 = '/library/osm-vector'
# map_catalog will be global, assumed always available
map_catalog = {}
map_menu_defs ={}
def main():
global map_menu_defs
get_map_catalog()
#print(json.dumps(map_catalog,indent=2))
map_menu_defs = get_menu_def_names()
#print(json.dumps(map_menu_defs,indent=2))
installed_maps = get_installed_maps()
print(installed_maps)
write_osm_vector_idx(installed_maps)
def get_map_catalog():
global map_catalog
#input_json = "{{ iiab_dir }}" + '/regions.json'
input_json = "/etc/iiab" + '/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_dict = {}
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_dict[data['name']] = menuDefs + filename
return menu_def_dict
def get_installed_maps():
installed = []
os.chdir(map_doc_root)
for filename in os.listdir('.'):
if fnmatch.fnmatch(filename, '??-osm-omt*'):
print filename
region = re.sub(r'^..-osm-omt_(.*)',r'\1',filename)
print(region)
installed.append(region)
return installed
def write_osm_vector_idx(installed_maps):
map_list = []
for map in installed_maps:
data_dict = map_catalog['regions'].get(map,'')
map_list.append(data_dict)
print(map,data_dict)
def create_menu_def(perma_ref,default_name,intended_use='map'):
if default_name.find('.') > -1:
default_name = default_name[:-5].replace('.','_') + '.json'
item = map_catalog[perma_ref]
if len(item.get('language','')) > 2:
lang = item['language'][:2]
else: # default to english
lang = 'en'
filename = lang + '-' + perma_ref + '.json'
# create a stub for this zim
menuDef = {}
default_logo = get_default_logo(perma_ref,lang)
menuDef["intended_use"] = "map"
menuDef["lang"] = lang
menuDef["logo_url"] = default_logo
menuitem = lang + '-' + perma_ref
menuDef["menu_item_name"] = default_name[:-5]
menuDef["title"] = item.get('title','')
menuDef["zim_name"] = perma_ref
menuDef["start_url"] = ''
menuDef["description"] = '<p>' + item.get('description','') + '</p>'
menuDef["description"] += '<p>Size: ##SIZE##, Articles: ##ARTICLE_COUNT##, Media: ##MEDIA_COUNT##, Tags; [##tags##], Language: ##language##, Date: ##zim_date##</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
if __name__ == '__main__':
main()