node_hierarchy/node_hierarchy.py

44 lines
2.3 KiB
Python
Executable file

#!/usr/bin/python
# -*- coding: utf-8 -
#Imports:
import argparse, json, sys
from domain_selector import DomainSelector
from hieraException import HieraException
parser = argparse.ArgumentParser(description='This Script generates a hierarchical nodes list for node migration using nginx geo feature.')
parser.add_argument('--json-path', required=False, default='https://service.freifunk-muensterland.de/maps/data/', help='Path of nodes.json and graph.json (can be local folder or remote URL).')
parser.add_argument('--targets-file', required=False, help='Json file of targets for nominatim geocoder.', default='./targets.json')
parser.add_argument('-t', '--targets', nargs='*', required=False, help='List of target names from target-file which should be proceeded. Example: -t citya -t cityb ...')
parser.add_argument('-a', '--all', '--all-targets', required=False, help='Proceed all targets from targets file.', action='store_true')
parser.add_argument('--out-path', required=False, help='Directory where the generated Output should stored.', default='./webserver-configuration/')
parser.add_argument('--only-specific-branch', required=False, help='Only attend nodes from specific branch.', default=None)
parser.add_argument('-p', '--print-status', required=False, action='store_true', help='Print Status (like geocoder tasks).')
args = parser.parse_args()
def prepareTargets(args):
resource = open(args.targets_file)
targets = json.loads(resource.read())
resource.close()
if len(targets) == 0:
print "\033[91mError:\033[0m No targets were found in targets file."
sys.exit(1)
if args.all == True:
return targets
elif args.targets == None or len(args.targets) == 0:
print "\033[91mError:\033[0m No target was given as argument and even --all switch was not enabled."
sys.exit(1)
else:
specific_targets = {}
for k, v in targets.iteritems():
if k in args.targets:
specific_targets[k] = v
return specific_targets
targets = prepareTargets(args)
try:
ds = DomainSelector(nodesFile = args.json_path.rstrip('/')+'/nodes.json', graphFile = args.json_path.rstrip('/')+'/graph.json', printStatus = args.print_status, dataPath = args.out_path, targets = targets, branch = args.only_specific_branch)
except HieraException:
print "\033[93mFailed:\033[0m Process was interrupted by HieraException-Exception (see error messages above)."