[cpif] r46 - in trunk: . frontend-web

svn at argo.es svn at argo.es
Sat May 12 16:27:55 CEST 2007


Author: jcea
Date: Sat May 12 16:27:55 2007
New Revision: 46

Log:
Nos podemos mover por el calendario y listar
los hilos modificados en cada dia.



Added:
   trunk/frontend-web/calendario.py
      - copied, changed from r43, /trunk/frontend-web/url_stop.py
Modified:
   trunk/TODO
   trunk/frontend-web/servidor_web.py
   trunk/frontend-web/url_.py

Modified: trunk/TODO
==============================================================================
--- trunk/TODO	(original)
+++ trunk/TODO	Sat May 12 16:27:55 2007
@@ -24,4 +24,9 @@
   hay que asegurarse de que no hay valores duplicados (granularidad
   del reloj) al introducir valores nuevos.
 
+- 20070513: FRONTAL WEB: Cuando estamos listando los hilos,
+  vamos revisando dia por dia. Eso es eficiente si todos los dias
+  tienen un hilo modificado. Pero si no es asi, seria mas
+  eficiente saltarse los dias intermedios hasta encontrar el siguiente
+  dia con actividad.
 

Copied: trunk/frontend-web/calendario.py (from r43, /trunk/frontend-web/url_stop.py)
==============================================================================
--- /trunk/frontend-web/url_stop.py	(original)
+++ trunk/frontend-web/calendario.py	Sat May 12 16:27:55 2007
@@ -1,13 +1,27 @@
 # $Id$
 
-from globales import monitor
+cache_meses={}
+nombres_meses=["","Enero","Febrero","Marzo","Abril","Mayo","Junio",
+               "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"]
+cabecera_mes="<table><tr><th colspan=7>%s %d</th></tr>\r\n" \
+  "<tr><th>L</th><th>M</th><th>X</th><th>J</th><th>V</th><th>S</th><th>D</th></tr>"
 
-def gestiona_url(handler,path,usuario) :
-  handler.must_stop=True
-
-  return (200,"text/html",
-"""
-<html><head></head><body>
-<h1>PARAMOS EL SERVICIO!!</h1>
-</body></html>""")
+def vista_mensual(conn,fecha,usuario) :
+  import calendar
+  fecha=(fecha.year,fecha.month)
+  mes=cache_meses.get(fecha)
+  if not mes :
+    mes=calendar.Calendar().monthdatescalendar(*fecha)
+    texto=[cabecera_mes %(nombres_meses[fecha[1]],fecha[0])]
+    while len(mes) :
+      texto.append("<tr>")
+      semana=mes.pop(0)
+      for i in xrange(7) :
+        dia=semana.pop(0)
+        texto.append("<td align=center><a href='/indice/%d%.2d%.2d/%s'>%s</a></td>"
+                       %(dia.year,dia.month,dia.day,"%(usuario)s",dia.day))
+      texto.append("</tr>")
+    mes="".join(texto)
+    cache_meses[fecha]=mes
+  return mes %{"usuario":usuario}
 

Modified: trunk/frontend-web/servidor_web.py
==============================================================================
--- trunk/frontend-web/servidor_web.py	(original)
+++ trunk/frontend-web/servidor_web.py	Sat May 12 16:27:55 2007
@@ -77,7 +77,10 @@
     if i.startswith("url_") and i.endswith(".py") :
       modulo=i[:-len(".py")]
       nombre=modulo[len("url_"):]
-      urls[nombre]=getattr(__import__(modulo),"gestiona_url")
+      modulo=__import__(modulo)
+      urls[nombre]=getattr(modulo,"gestiona_url")
+      init=getattr(modulo,"init",None)
+      if init : init()
 
   assert "indice" not in urls
   urls["indice"]=urls[""]

Modified: trunk/frontend-web/url_.py
==============================================================================
--- trunk/frontend-web/url_.py	(original)
+++ trunk/frontend-web/url_.py	Sat May 12 16:27:55 2007
@@ -5,6 +5,9 @@
 import datetime
 delta_dia=datetime.timedelta(1)
 
+# La fecha del hilo modificado hace mas tiempo
+fecha_min=None
+
 @monitor
 def gestiona_url(conn,handler,path,usuario) :
   import time,database,datetime,calendar
@@ -20,7 +23,9 @@
       fecha=path[1]
       assert len(fecha)==8
       fecha=datetime.date(int(fecha[:4]),int(fecha[4:6]),int(fecha[6:8]))
+      print fecha_min,fecha,fecha_max
       if fecha>fecha_max : return None
+      if fecha<fecha_min : return None
     except :
       return None
 
@@ -37,7 +42,7 @@
   estilos=["impar","par"]
   punto_no_leido=root["usuarios"]["usuarios"][database.normaliza_nick(usuario)]["punto de lectura no leidos"]
 
-  while num_hilos<50 :
+  while (num_hilos<50) and (fecha>=fecha_min) :
     ts2=timegm(fecha)
     texto.append("<div>%s</div>" %time.ctime(ts2))
     h=database.listado_hilos_personal(conn,usuario,ts,ts2)
@@ -54,6 +59,8 @@
     ts=ts2
     fecha-=delta_dia
 
+  import calendario
+
   return(200,"text/html",
 """
 <html><head></head><body>
@@ -65,6 +72,8 @@
 <h1>P&aacute;gina principal</h1>
 %s
 <hr>
+%s
+<hr>
 <form action="/nuevo_hilo_POST/%s" method="post" enctype="multipart/form-data">
 <table>
 <tr><td>T&iacute;tulo:</td><td><input type="text" name="titulo" size="60" value="" /></td></tr>
@@ -73,5 +82,16 @@
 </table>
 </form>
 <p><a href="/stop/cualquier_usuario">Parar la demo</a>
-</body></html>""" %("\r\n".join(texto),usuario))
+</body></html>""" %("\r\n".join(texto),calendario.vista_mensual(conn,fecha_max,usuario),usuario))
+
+ at monitor
+def init(conn) :
+  import datetime
+  global fecha_min
+
+  TS2hilo=conn.get_root()["hilos"]["TS2hilo"]
+  try :
+    fecha_min=datetime.date.fromtimestamp(TS2hilo.get_min_item()[0])
+  except :
+    fecha_min=datetime.date.today()
 



More information about the cpif mailing list