#!/usr/bin/env python #-*- coding: iso8859-15 -*- ########################################################## # MEMORIA REGISTROS v1.0 # ########################################################## # Autor: Juan Miguel Taboada Godoy # # Fecha: Malaga, 01 de noviembre de 2006 # # Descripción: Controla los registros pendientes de ser # # procesados por el sistema que usa estas funciones # # Versión: 2006110100 # # # # Codigo fuente bajo licencia GNU/GPL # # Centrologic (Computational Logistic Center) # # http://www.centrologic.com - info@centrologic.com # ########################################################## ## \defgroup memoria_registros memoria_registros: Libreria para el control de registros procesados o pendientes de ser procesados ## \version 01/11/2006 1740 Szczecin import os import fcntl # Lee la memoria interna {{{1 ## \ingroup memoria_registros ## Lee la memoria de registros ## \param [in] lista Lista original de registros que va a ser filtrada quitando aquellos que no hay que procesar ## \param [in] modo Fichero que almacena la memoria, o una tupla que indica el fichero y el indice/metodo a usar en la comparacion (fichero,indice) ## \return Devuelve la lista original sin aquellos registros que ya fueron procesados y que no estan pendientes de ser procesados def memory_read(lista,modo): # Descompongo el modo de lectura if (type(modo)==type(())): (fichero,indice)=modo else: fichero=modo indice="internal_id" # Inicializo la lista de resultados nueva_lista=[] # Abro el fichero FILE=open(fichero,"r") # Consigue el candado de bloqueo (espera ACTIVA) fcntl.flock(FILE.fileno(), fcntl.LOCK_EX) # Leo su contenido contenido=FILE.readlines() if (contenido==[]): # Si no hay contenido, devuelvo que el fichero está vacío nueva_lista=[] else: # Si hay contenido, devuelvo las que hay for linea in contenido: # Busco en la línea en la lista de elementos for elemento in lista: if (type(indice)==type("abc")): valor=eval("elemento.%s()" % (indice)) elif (type(indice)==type(123)): valor=elemento[indice] elif (type(indice)==type(None)): valor=elemento else: raise IOError,"Tipo del indice desconocido" if (str(valor)==str(linea[0:-1])): nueva_lista.append(elemento) break # Cierro el fichero FILE.close() # Devuelvo la lista a procesar return nueva_lista # }}}1 # Escribe la memoria interna {{{1 ## \ingroup memoria_registros ## Escribe la memoria interna ## \param [in] lista Lista a escribir en la memoria ## \param [in] modo Fichero que almacena la memoria, o una tupla que indica el fichero y el indice/metodo a usar en para guardar (fichero,indice) def memory_write(lista,modo): # Descompongo el modo de lectura if (type(modo)==type(())): (fichero,indice)=modo else: fichero=modo indice="internal_id" # Abro el fichero FILE=open(fichero,"w") # Consigue el candado de bloqueo (espera ACTIVA) fcntl.flock(FILE.fileno(), fcntl.LOCK_EX) # Escribo la lista for elemento in lista: if (type(indice)==type("abc")): valor=eval("elemento.%s()" % (indice)) elif (type(indice)==type(123)): valor=elemento[indice] elif (type(indice)==type(None)): valor=elemento else: raise IOError,"Tipo del indice desconocido" FILE.write("%s\n" % (valor)) # Cierro el fichero FILE.close() # }}}1