[cpif] r219 - trunk/frontend-web

svn at argo.es svn at argo.es
Sun Jul 1 03:20:19 CEST 2007


Author: jcea
Date: Sun Jul  1 03:20:16 2007
New Revision: 219

Log:
Enviamos "ETags" con la mayor parte de las paginas HTML
que servimos, y las usamos para validar las peticiones
que nos llegan. Si nos estan pidiendo una pagina que no
ha cambiado, enviamos un 304.

Es de notar que la pagina se sigue generando, y el ETag
es el MD5 de la pagina en si. Asi que no ahorramos
CPU, pero ahorramos mucho ancho de banda.



Modified:
   trunk/frontend-web/skins.py
   trunk/frontend-web/url_.py
   trunk/frontend-web/url_hilo.py
   trunk/frontend-web/url_indice.py

Modified: trunk/frontend-web/skins.py
==============================================================================
--- trunk/frontend-web/skins.py	(original)
+++ trunk/frontend-web/skins.py	Sun Jul  1 03:20:16 2007
@@ -67,8 +67,7 @@
 print available_skins.keys()
 
 class Skin:
-
-  def __init__(self,url,user=None):
+  def __init__(self,url,user=None,headers={}) :
     import pytz
     self._tz = pytz.timezone("Europe/Madrid")
     self._skin = "default"
@@ -77,6 +76,7 @@
     self._style = ["odd","even"]
     self._text = []
     self._user = user
+    self._header_if_none_match=headers.get("if-none-match",None)
     self._dict = {
         "version": globales.version,
         "page_title": "cpif",
@@ -235,4 +235,17 @@
     return available_skins[self._skin]['footer'] % self._dict
 
   def web(self,code=200):
-    return code, {"Content-Type":"text/html; charset=utf-8"}, "\r\n".join([self._header(),self._body(),self._footer()])
+    headers={}
+    text="\r\n".join([self._header(),self._body(),self._footer()])
+    if code==200 :
+      import md5
+      etag='"%s"' %md5.new(text).hexdigest()
+      if_none_match=self._header_if_none_match
+      if if_none_match :
+        for i in if_none_match.split(",") :
+          if etag==i.strip() :
+            return (304,headers,"")
+      headers["ETag"]=etag
+    headers["Content-Type"]="text/html; charset=utf-8"
+    return (code, headers, text)
+

Modified: trunk/frontend-web/url_.py
==============================================================================
--- trunk/frontend-web/url_.py	(original)
+++ trunk/frontend-web/url_.py	Sun Jul  1 03:20:16 2007
@@ -10,7 +10,7 @@
   database.actualiza_no_leidos(conn,usuario)
   
   import skins
-  pagina = skins.Skin(path,usuario)
+  pagina = skins.Skin(path,usuario,handler.headers)
 
   d = {
       "page_title": "cpif - listado de subforos",

Modified: trunk/frontend-web/url_hilo.py
==============================================================================
--- trunk/frontend-web/url_hilo.py	(original)
+++ trunk/frontend-web/url_hilo.py	Sun Jul  1 03:20:16 2007
@@ -30,7 +30,7 @@
   assert len(metatags)==1 # De momento no permitimos multiples metatags para un hilo
   metatag=metatags[0]
   import skins 
-  pagina = skins.Skin(path,usuario)
+  pagina = skins.Skin(path,usuario,handler.headers)
 
   d = {
       "page_title":"cpif - %s" % meta["titulo"],

Modified: trunk/frontend-web/url_indice.py
==============================================================================
--- trunk/frontend-web/url_indice.py	(original)
+++ trunk/frontend-web/url_indice.py	Sun Jul  1 03:20:16 2007
@@ -48,7 +48,7 @@
   ts=timegm(fecha_max)
 
   import skins
-  pagina = skins.Skin(path,usuario)
+  pagina = skins.Skin(path,usuario,handler.headers)
   import calendario
   d = {
       "page_title": "cpif - listado de hilos",



More information about the cpif mailing list