/
sillaRodante.py
171 lines (157 loc) · 6.58 KB
/
sillaRodante.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# para generar los archivos json!!!
import json
# para generar un template de String
from string import Template
# Utileria
from util.Util import Util
# Modelos de la base de datos
from modelos.PuntoClave import PuntoClave
# Herramienta para el manejo de mapas
from util.MapTool import MapTool
from util.Punto import Punto
import logging as logger
import webapp2
#clases de utileria
utileria = Util()
#clase para las herramientas de mapas
mapTool = MapTool()
MAIN_PAGE = Template("""\
<html>
<body>
<hr>
Mensaje del Sistema : $mensaje
<hr>
<h2>Formulario de caaarga </h2>
$formularioACargar
<hr>
<h2>Formulario de consulta </h2>
$formularioConsulta
DevF Team 2014
<hr>
</body>
</html>
""")
#formularios
GUARDAR_PUNTOS_CLAVE_FORM = """
<form action="/test" method="post">
<p>
latitud <input type="text" name="latitud">
</p>
<p>
longitud <input type="text" name="longitud">
</p>
valoracion <input type="text" name="valoracion">
<p>
<input type="submit" value="guardar">
</p>
</form>
"""
OBTENER_PUNTOS_ENTRE_AREA_FORM = """
<form action="/obtenerPuntos" method="post" target="respuesta">
<p>
latitud Origen <input type="text" name="latitudOrigen">
</p>
<p>
longitud Origen<input type="text" name="longitudOrigen">
</p>
latitudDestino <input type="text" name="latitudDestino">
<p>
</p>
longitudDestino <input type="text" name="longitudDestino">
<p>
<input type="submit" value="Obtener">
</p>
</form>
<iframe id="respuesta" name="respuesta" width="100%" height="100%"></iframe>
"""
class GuardarPuntosClavePage(webapp2.RequestHandler):
def get(self):
mensajeExito = 'Guardaro Correctamente!'
try:
puntoAGuardar = PuntoClave()
puntoAGuardar.latitud = float(self.request.get('latitud'))
puntoAGuardar.longitud = float(self.request.get('longitud'))
puntoAGuardar.tipo = int(self.request.get('tipo'))
puntoAGuardar.valoracion = 0.0
puntoAGuardar.numeroValoraciones = 1
puntoEncontrado = utileria.esPuntoSemejante(puntoAGuardar)
logger.error(puntoEncontrado)
logger.error(puntoEncontrado)
logger.error(puntoEncontrado)
if not (puntoEncontrado):
logger.error("No existe el punto, se guarda uno nuevo!!")
puntoAGuardar.put()
else:
logger.error("Existe, solo se actualiza!")
puntoEncontrado.tipo = int(self.request.get('tipo'))
#puntoEncontrado.numeroValoraciones = puntoEncontrado.numeroValoraciones + 1
puntoEncontrado.put()
if bool(self.request.get('dev')): #Si existe el parametro debug!, se genera la pagina web
print("Guardado!!!!")
self.response.write(
MAIN_PAGE.substitute(mensaje=mensajeExito, formularioACargar=GUARDAR_PUNTOS_CLAVE_FORM,
formularioConsulta=OBTENER_PUNTOS_ENTRE_AREA_FORM))
#significa que solo necesitan la respuesta en JSON, posiblemente en produccion
else:
mapaRespuesta = {'mensaje': 'Guardado Correctamente!'}
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(json.dumps(mapaRespuesta))
#self.redirect('/test')
except Exception as e:
self.response.write(MAIN_PAGE.substitute(mensaje=e, formularioACargar=GUARDAR_PUNTOS_CLAVE_FORM,
formularioConsulta=OBTENER_PUNTOS_ENTRE_AREA_FORM))
def post(self):
self.get()
class MostrarPuntosClavePage(webapp2.RequestHandler):
def get(self):
utileria = Util()
listadoDePuntos = utileria.obtenerPuntosArea(self.request,0.03)
jsonAMostrar = json.dumps([punto.to_dict() for punto in listadoDePuntos])
mapaRespuesta = {'puntosClave': [punto.to_dict() for punto in listadoDePuntos]}
self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
self.response.write(json.dumps(mapaRespuesta))
#self.redirect('/?' + urllib.urlencode(query_params))
def post(self):
self.get()
class ObtenerRutasPage(webapp2.RequestHandler):
def get(self):
puntoOrigen, puntoDestino = mapTool.obtenerPuntos(self.request)
#Se imprime el error en caso de existir, y se regresan los objetos
puntosClave = utileria.obtenerPuntos(self.request)
logger.error("PUNTOS CLAVE")
logger.error("PUNTOS CLAVE")
logger.error("PUNTOS CLAVE")
logger.error(len(puntosClave))
logger.error("PUNTOS CLAVE")
logger.error("PUNTOS CLAVE")
logger.error("PUNTOS CLAVE")
#logger.warn(" -- "+puntoOrigen)
#logger.warn(" -- "+puntoDestino)
#json.dumps([p.to_dict() for p in Pasta.query(Pasta.name == "Ravioli").fetch()])
puntosLimpios = utileria.porVecinosIntercalados(puntosClave,puntoOrigen,puntoDestino)
logger.error("PUNTOS LIMPIOS")
logger.error("PUNTOS LIMPIOS")
logger.error("PUNTOS LIMPIOS")
logger.error(len(puntosLimpios))
logger.error("PUNTOS LIMPIOS")
logger.error("PUNTOS LIMPIOS")
logger.error("PUNTOS LIMPIOS")
#
rutaPropuesta = mapTool.obtenerRutasOptimasEntrePuntos(puntoOrigen, puntoDestino, puntosLimpios)
rutaMaps = mapTool.obtenerRutasOptimasEntrePuntos(puntoOrigen, puntoDestino, [])
#
mapaRespuesta = {'puntosClave': [punto.to_dict() for punto in puntosClave],
'rutaPropuesta': json.loads(rutaPropuesta),
'rutaMaps':json.loads(rutaMaps)
}
self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
self.response.out.write(json.dumps(mapaRespuesta))
#Un little hack para que funcione por ambos metodos,se usara POST, por motivos de encapsulamiento de la informacion
def post(self):
self.get()
application = webapp2.WSGIApplication([
('/generarPunto', GuardarPuntosClavePage),
('/', GuardarPuntosClavePage),
('/obtenerPuntos', MostrarPuntosClavePage),
('/obtenerRutas', ObtenerRutasPage )
], debug=True)