import os from django.contrib.auth import logout as do_logout from django.shortcuts import render from django.contrib import auth from MeteorClient import MeteorClient import requests import json dataMaps = '' flag = True loginMaps = False client = None username = '' requestAux = [] config = None atlas = False def getMaps(clave, request): groupsAux = [] if request is not None: userLogin = request.user if userLogin.is_authenticated: #USUARIO AUTENTICADO EN DJANGO groups = request.user.groups.all() if clave == '': for group in groups: groupsAux.append(group.name) else: groupsAux.append(clave) else: #USUARIO AUTENTICADO EN MAPS if clave == '': for solucion in config["soluciones"]: groupsAux.append(solucion["nombre"]) else: groupsAux.append(clave) if len(groupsAux) > 0: data = getDataMaps(config, groupsAux, clave) else: data = {} else: for solucion in config["soluciones"]: groupsAux.append(solucion["nombre"]) data = getDataMaps(config, groupsAux, clave) data["username"] = username return data def getDataMaps(config, groupsAux, clave): global dataMaps headers = {'content-type': 'application/json'} labelsAux = [] url = [config["url"], {'user': 'user_id', 'input': {"PalabraClave": groupsAux}}] try: response = requests.post(url[0], data=json.dumps(url[1]), headers=headers) print("###############################################################") print("TEST:{}".format(url)) print("PARAMETERS:{}".format(json.dumps(url[1]))) responseJson = response.json() if responseJson is not None: print("RESULTADO({}):{}".format(response.status_code, responseJson)) data = responseJson if clave == '': links = data["links"] else: links = dataMaps["links"] i = 0 for link in links: labelExists = False link["i"] = str(i) i = i + 1 if len(labelsAux) > 0: for label in labelsAux: if label["nombre"] in link["etiqueta"]: labelExists = True if not labelExists: for solucion in config["soluciones"]: if solucion["nombre"] in link["etiqueta"]: solucion["descripcion"] labelsAux.append(solucion) break for link in data["links"]: if len(link["miniatura"]) > 0 and "www.dropbox.com" in link["miniatura"]: link["miniatura"] = link["miniatura"].replace("www.dropbox.com", "dl.dropboxusercontent.com") data["labels"] = labelsAux if clave == '': dataMaps = data if clave == '': data["imagenFondo"] = '/Tierra_2/static/images/Tierra2.jpg' else: data["imagenFondo"] = '/Tierra_2/static/images/' + clave + '.jpg' return data except Exception as error: print(" ** ERROR ** :" + str(error)) def getImageMini(url): #subprocess.call(['C://Program Files (x86)//Google//Chrome//Application//chrome.exe', '--headless', '--hide-scrollbars', '--screenshot', '--timeout=10000', # '--default-background-color=0', 'http://192.168.1.43:30008/shared/maps/YWZutpJ2L45wCp2']) CHROME = os.path.join('C:\\', 'Program Files (x86)', 'Google', 'Chrome', 'Application', 'chrome.exe') # subprocess.call([CHROME, '--headless', '--hide-scrollbars', '--screenshot', '--timeout=10000', '--default-background-color=0', 'http://maps.geomotionvideo.com:30014/shared/maps/UjJHOV4OwVI_i7j']) def index(request): global config global atlas atlas = True do_logout(request) try: if config is None: with open("Tierra_2/core/dataMaps.json", "r", encoding='utf8') as file: config_file = file.read() config = json.loads(config_file) except Exception as error: print("Error al abrir JSON de mapeo: " + error.message) raise Exception("Error al abrir JSON de mapeo: " + error.message) context = getMaps('', request) return render(request, 'indexmaps.html', context) def indexTierra2(request): global flag global loginMaps global client global username global config global atlas flag = True loginMaps = False atlas = False username = request.POST.get('username', '') password = request.POST.get('password', '') print("USERNAME FORM LOGIN --> " + username) print("PASSWORD FORM LOGIN --> " + password) try: if config is None: with open("Tierra_2/core/dataMaps.json", "r", encoding='utf8') as file: config_file = file.read() config = json.loads(config_file) except Exception as error: print("Error al abrir JSON de mapeo: " + error.message) raise Exception("Error al abrir JSON de mapeo: " + error.message) try: client = MeteorClient(config["urlsocket"], debug=False, auto_reconnect=False, auto_reconnect_timeout=0) def connected_on(): client.login(username, password.encode(), callback=login_callback) print("client login") def failed(): print("** SOCKET FAILED **") client.on('connected', connected_on) client.on("failed", failed) client.connect() print("client connect") except Exception as e: print ("Error conexion--> ", e) while flag: pass try: client.logout(callback=logout_callback) print("client logout") except Exception as e: print(" ** CLIENT LOGOUT ** --> " + e) del client if loginMaps: print("LOGIN CORRECTO A MAPS") context = getMaps('', None) urlRender = 'index.html' else: print("CONEXIÓN FALLIDA CON MAPS. CONECTA A DJANGO ") username = request.POST.get('username', '') password = request.POST.get('password', '') print("DJANGO USERNAME --> " + username) print("DJANGO PASSWORD --> " + password) user = auth.authenticate(username=username, password=password) if user is not None and user.is_active: auth.login(request, user) context = getMaps('', request) print("LOGIN CORRECTO A DJANGO") if context.get("links"): urlRender = 'index.html' else: urlRender = 'indexVacio.html' else: print("ERROR LOGIN A DJANGO") context = getMaps('', request) if context.get("links"): urlRender = 'loginFromError.html' else: urlRender = 'indexVacio.html' return render(request, urlRender, context) def logout_callback(*args): print(args) def login_callback(*args): global flag global loginMaps print(args) if args[0] == None: print("ARGS[0] --> None --> conectado correctamente a MAPS") loginMaps = True else: print("FALLO EN LA CONEXIÓN a MAPS --> " + args[0]["reason"]) loginMaps = False flag = False def cartografia(request): context = getMaps('Cartografia', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def bienesculturales(request): context = getMaps('BienesCulturales', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def edificaciones(request): context = getMaps('Edificaciones', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def hidrologia(request): context = getMaps('Hidrologia', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def infraagrarias(request): context = getMaps('Agraria', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def infraestructuras(request): context = getMaps('Infraestructuras', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def rutas(request): context = getMaps('Rutas', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def transportepublico(request): context = getMaps('Transporte', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def urbanistico(request): context = getMaps('Urbanistico', request) if atlas: return render(request, 'indexmaps.html', context) else: return render(request, 'index.html', context) def detalle(request, link, labels): print('LINK:: ' + link) link = link.replace("\'", "\"") link = json.loads(link) context = { 'link': link, 'imagenFondo': '/Tierra_2/static/images/' + link["etiqueta"].replace("#", "") + '.jpg', 'labels': json.loads(labels.replace("\'", "\"")), 'username': username } return render(request, 'procedimientos.html', context) def detallemaps(request, link, labels): print('LINK:: ' + link) link = link.replace("\'", "\"") link = json.loads(link) context = { 'link': link, 'imagenFondo': '/Tierra_2/static/images/' + link["etiqueta"].replace("#", "") + '.jpg', 'labels': json.loads(labels.replace("\'", "\"")), 'username': username } return render(request, 'procedimientosmaps.html', context)