[cpif] r114 - in trunk: . backend frontend-web
svn at argo.es
svn at argo.es
Tue Jun 5 18:04:50 CEST 2007
Author: jcea
Date: Tue Jun 5 18:04:45 2007
New Revision: 114
Log:
Primeros pasos en la visualizacion de "metatags" (subforos).
Modified:
trunk/TODO
trunk/backend/database.py
trunk/backend/upgrade.py
trunk/frontend-web/init.py
trunk/frontend-web/url_.py
Modified: trunk/TODO
==============================================================================
--- trunk/TODO (original)
+++ trunk/TODO Tue Jun 5 18:04:45 2007
@@ -70,3 +70,9 @@
hayan leido ese hilo. Ojito con esto. No se puede
usar como la posicion de lectura mas comun para
los usuarios, por ejemplo.
+
+- 20070605: La estructura "punto de lectura no leido"
+ local a cada usuario se usara tambien como
+ mecanismo de control de acceso. Es decir, ahi
+ apareceran los metatags a los que tenemos acceso.
+
Modified: trunk/backend/database.py
==============================================================================
--- trunk/backend/database.py (original)
+++ trunk/backend/database.py Tue Jun 5 18:04:45 2007
@@ -1,7 +1,7 @@
# $Id$
-VERSION_DB="2007052401"
+VERSION_DB="2007060504"
from globales import thread_len
@@ -33,9 +33,13 @@
usuarios["num_usuarios"]=0
root["usuarios"]=usuarios
+ metatags=PersistentDict()
+ metatags["metatags"]=BTree()
+ metatags["num_metatags"]=0
+ root["metatags"]=metatags
+
hilos=PersistentDict()
hilos["hilos"]=BTree()
- hilos["TS2hilo"]=BTree()
hilos["num_hilos"]=0
root["hilos"]=hilos
@@ -99,9 +103,12 @@
import random,sys
clave=str(random.randint(0,sys.maxint))
+ bt=BTree()
+ for i in root["metatags"].iterkeys() :
+ bt[i]=BTree()
usuarios["usuarios"][nick_normalizado]=PersistentDict(
{"ultimo mensaje conocido":root["mensajes"]["num_mensajes"],
- "punto de lectura no leidos":BTree(),
+ "punto de lectura no leidos":bt,
"punto de lectura":BTree(),
"TS creacion":time.time(),
"TS ultima entrada":0,
@@ -125,7 +132,21 @@
return usuarios["usuarios"].get(nick_normalizado,None)
-def mensaje_add(conn,texto,nick,hilo=None,titulo=None) :
+def metatag_add(conn,nombre) :
+ from durus.btree import BTree
+
+ root=conn.get_root()
+ metatags=root["metatags"]
+ num_mt=metatags["num_metatags"]
+ metatags["num_metatags"]+=1
+ metatags["metatags"][num_mt]=PersistentDict({"nombre":nombre,"num_hilos":0,"TS2hilo":BTree()})
+
+ for usuario in root["usuarios"]["usuarios"].itervalues() :
+ usuarios["punto de lectura no leidos"][num_mt]=BTree()
+
+ return num_mt
+
+def mensaje_add(conn,texto,nick,hilo=None,titulo=None,metatag=None) :
from durus.btree import BTree
from durus.persistent_dict import PersistentDict
import time
@@ -136,6 +157,7 @@
hilos=root["hilos"]
mensajes=root["mensajes"]
seguimiento_no_leidos=root["seguimiento_no_leidos"]
+ metatags=root["metatags"]["metatags"]
ts=time.time()
mensaje=PersistentDict(
@@ -153,8 +175,11 @@
hilo=hilos["hilos"][hilo]
last=hilo["mensajes"].get_max_item()[0]
del seguimiento_no_leidos["last_msg2hilo"][last]
- del hilos["TS2hilo"][hilo["TS"]]
+ TS=hilo["TS"]
+ for metatag in hilo["metatags"] :
+ del metatags[metatag]["TS2hilo"][TS]
else : # Empezamos un hilo nuevo
+ from durus.persistent_set import PersistentSet
hilos["num_hilos"]+=1
h=hilos["num_hilos"]
root["punto_de_lectura_global"][h]=0
@@ -164,6 +189,7 @@
{"creador":nick,
"TS creacion":ts,
"titulo":titulo,
+ "metatags":PersistentSet([metatag]),
"num_mensajes":0,
"mensajes":BTree(),
"numeros":BTree()})
@@ -178,7 +204,8 @@
hilo["mensajes"][num_msg]=(num_mensajes,mensaje)
hilo["numeros"][num_mensajes]=num_msg
hilo["TS"]=ts
- hilos["TS2hilo"][ts]=(h,hilo)
+ for metatag in hilo["metatags"] :
+ metatags[metatag]["TS2hilo"][ts]=(h,hilo)
usuario=root["usuarios"]["usuarios"][usuario]
usuario["num mensajes"]+=1
@@ -189,7 +216,7 @@
punto_de_lectura_global=root["punto_de_lectura_global"]
usuario=root["usuarios"]["usuarios"][normaliza_nick(usuario)]
l=usuario["ultimo mensaje conocido"]
- posicion_hilos_no_leidos=usuario["punto de lectura no leidos"]
+ posicion_hilos_no_leidos=dict(usuario["punto de lectura no leidos"])
posicion_hilos=usuario["punto de lectura"]
last_msg2hilo=root["seguimiento_no_leidos"]["last_msg2hilo"]
@@ -201,19 +228,22 @@
if not ultimo : ultimo=punto_de_lectura_global[hilo]
if ultimo < last : # Este hilo tiene mensajes nuevos...
# Lo marcamos como pendiente de leer y nos vamos al primero no leido
- posicion_hilos_no_leidos[hilo]=hilos[hilo]["mensajes"].items_from(ultimo,closed=False).next()[0]
+ h=hilos[hilo]
+ ultimo=h["mensajes"].items_from(ultimo,closed=False).next()[0]
+ for metatag in h["metatags"] :
+ posicion_hilos_no_leidos[metatag][hilo]=ultimo
usuario["ultimo mensaje conocido"]=root["mensajes"]["num_mensajes"]
-def listado_hilos_personal(conn,usuario,ts,ts2) :
+def listado_hilos_personal(conn,usuario,ts,ts2,metatag=0) :
root=conn.get_root()
hilos=root["hilos"]["hilos"]
usuario=root["usuarios"]["usuarios"][normaliza_nick(usuario)]
- no_leidos=usuario["punto de lectura no leidos"]
+ no_leidos=usuario["punto de lectura no leidos"][metatag]
resultado=[]
- for ts,hilo in root["hilos"]["TS2hilo"].items_range(ts,ts2) :
+ for ts,hilo in root["metatags"]["metatags"][metatag]["TS2hilo"].items_range(ts,ts2) :
hilo_num,hilo=hilo
if hilo_num in no_leidos :
resultado.append((hilo_num,hilo["titulo"],True))
@@ -247,12 +277,19 @@
pl=u["punto de lectura"].get(hilo_num,0)
if not pl : # Nunca hemos visitado ese hilo, o hace mucho que no cambia
pl=root["punto_de_lectura_global"][hilo_num]
+ metatags=hilo["metatags"]
if pl<msg_num :
u["punto de lectura"][hilo_num]=msg_num
- nl=u["punto de lectura no leidos"].get(hilo_num)
- if nl and (nl<=msg_num) :
- if finished : del u["punto de lectura no leidos"][hilo_num]
- else : u["punto de lectura no leidos"][hilo_num]=iterador_mensajes.next()[0] # El primer no leido
+ pnl=0
+ for metatag in metatags :
+ plnl=u["punto de lectura no leidos"][metatag]
+ nl=plnl.get(hilo_num)
+ if nl and (nl<=msg_num) :
+ if finished : del plnl[hilo_num]
+ else :
+ if not pnl :
+ pnl=iterador_mensajes.next()[0] # El primer no leido
+ plnl[hilo_num]=pnl
return (meta,mensajes,finished)
@@ -260,9 +297,9 @@
# viendo en pantalla. Si hay mensajes adicionales
# que todavia no hemos visualizado en el indice,
# los mantenemos como "no leidos".
-def marca_todo_leido(conn,usuario) :
+def marca_todo_leido(conn,usuario,metatag=0) :
usuario=conn.get_root()["usuarios"]["usuarios"][normaliza_nick(usuario)]
- posicion_hilos_no_leidos=usuario["punto de lectura no leidos"]
+ posicion_hilos_no_leidos=usuario["punto de lectura no leidos"][metatag]
posicion_hilos=usuario["punto de lectura"]
for hilo,last_msg in posicion_hilos_no_leidos.items() :
Modified: trunk/backend/upgrade.py
==============================================================================
--- trunk/backend/upgrade.py (original)
+++ trunk/backend/upgrade.py Tue Jun 5 18:04:45 2007
@@ -2,6 +2,8 @@
def do(conn) :
from durus.btree import BTree
+ from durus.persistent_dict import PersistentDict
+ from durus.persistent_set import PersistentSet
root=conn.get_root()
@@ -16,4 +18,44 @@
i["mensajes"][j]=(n,k)
n+=1
conn.commit()
+
+ if root["version del foro"]=="2007052401" :
+ print "Actualizando la base de datos: 2007052401 -> 2007060501"
+ root["version del foro"]="2007060501"
+ # Migracion interna...
+ conn.commit()
+
+ if root["version del foro"]=="2007060501" :
+ print "Actualizando la base de datos: 2007060501 -> 2007060502"
+ root["version del foro"]="2007060502"
+ metatags=PersistentDict()
+ bt=BTree()
+ bt[0]=PersistentDict({"nombre":"Varios","num_hilos":root["hilos"]["num_hilos"],"TS2hilo":root["hilos"]["TS2hilo"]})
+ del root["hilos"]["TS2hilo"]
+ metatags["metatags"]=bt
+ metatags["num_metatags"]=1
+ root["metatags"]=metatags
+ for usuario in root["usuarios"]["usuarios"].itervalues() :
+ bt=BTree()
+ bt[0]=usuario["punto de lectura no leidos"]
+ usuario["punto de lectura no leidos"]=bt
+ for hilo in root["hilos"]["hilos"].itervalues() :
+ hilo["metatags"]=PersistentSet([0])
+ conn.commit()
+
+ if root["version del foro"]=="2007060502" :
+ print "Actualizando la base de datos: 2007060502 -> 2007060503"
+ root["version del foro"]="2007060503"
+ # Migracion interna...
+ conn.commit()
+
+ if root["version del foro"]=="2007060503" :
+ print "Actualizando la base de datos: 2007060503 -> 2007060504"
+ root["version del foro"]="2007060504"
+ for usuario in root["usuarios"]["usuarios"].itervalues() :
+ for mt in usuario["punto de lectura no leidos"].itervalues() :
+ for i in mt.keys() : # Se cargan todas de un golpe, asi que podemos modificar el diccionario
+ if not isinstance(i,int) : del mt[i]
+ conn.commit()
+
Modified: trunk/frontend-web/init.py
==============================================================================
--- trunk/frontend-web/init.py (original)
+++ trunk/frontend-web/init.py Tue Jun 5 18:04:45 2007
@@ -59,6 +59,10 @@
if not database.usuario_get(conn,i) :
database.usuario_add(conn,i,None)
+ if not conn.get_root()["metatags"]["num_metatags"] :
+ v=database.metatag_add(conn,"Varios")
+ assert v==0
+
num_hilos=conn.get_root()["hilos"]["num_hilos"]
if not num_hilos :
import time,random
Modified: trunk/frontend-web/url_.py
==============================================================================
--- trunk/frontend-web/url_.py (original)
+++ trunk/frontend-web/url_.py Tue Jun 5 18:04:45 2007
@@ -54,7 +54,8 @@
database.actualiza_no_leidos(conn,usuario)
texto=[]
num_hilos=0
- punto_no_leido=root["usuarios"]["usuarios"][database.normaliza_nick(usuario)]["punto de lectura no leidos"]
+ punto_no_leido=root["usuarios"]["usuarios"][database.normaliza_nick(usuario)]["punto de lectura no leidos"][0]
+ print punto_no_leido.items()
while (num_hilos<50) and (fecha>=fecha_min) :
ts2=timegm(fecha)
@@ -77,12 +78,13 @@
@monitor
def init(conn) :
- import datetime
+ import datetime,sys,time
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()
+ fecha_min=time.time()
+ root=conn.get_root()
+ for metatag in root["metatags"]["metatags"].itervalues() :
+ fecha_min=min(fecha_min,metatag["TS2hilo"].get_min_item()[0])
+
+ fecha_min=datetime.date.fromtimestamp(fecha_min)
More information about the cpif
mailing list