def get_files(ids): ''' Recibe lista de tuplas de tamaño 3 (como devueltas por get_ids de search) y devuelve los ficheros del mongo correspondiente que no estén bloqueados. Si se recibe un fichero bloqueado, lo omite y bloquea en el sphinx. @type ids: iterable de tuplas de tamaño 3 o mayor @param ids: lista de tuplas (mongoid, id servidor, id sphinx) @yield: cada uno de los resultados de los ids en los mongos ''' toblock = [] already = False for f in filesdb.get_files(ids, servers_known = True, bl = None): if f["bl"] == 0 or f["bl"] is None: yield f else: toblock.append(mid2bin(f["_id"])) # bloquea en sphinx los ficheros bloqueados if toblock: cache.cacheme = False id_list = {i[0]:i[2] for i in ids} block_files( sphinx_ids=[id_list[i] for i in toblock] )
def get_files(ids): ''' Recibe lista de tuplas de tamaño 3 (como devueltas por get_ids de search) y devuelve los ficheros del mongo correspondiente que no estén bloqueados. Si se recibe un fichero bloqueado, lo omite y bloquea en el sphinx. @type ids: iterable de tuplas de tamaño 3 o mayor @param ids: lista de tuplas (mongoid, id servidor, id sphinx) @yield: cada uno de los resultados de los ids en los mongos ''' already = False files = filesdb.get_files(ids, servers_known = True, bl = None) for r in files: if r["bl"] == 0 or r["bl"] is None: yield r elif not already: already = True id_list = {i[0]:i[2] for i in ids} block_files( sphinx_ids=[id_list[mid2bin(i["_id"])] for i in files if i["bl"] != 0 and not i["bl"] is None ])