def is_deleted(self): username = self.username if username and isinstance(username, str): username = self.username.decode('utf-8') data = ModelsDadosFuncdetails().store.find(ModelsDadosFuncdetails, ModelsDadosFuncdetails.username==self.username.decode('utf-8')) L_field = [] for field in data: if field.deleted == True: L_field.append(True) if len(L_field) == data.count(): return True return False
def get_FuncDetailsByField(fields={}, case_sensitive=False, if_empty_return_all=True): L_username = [] L_retorno = [] expressions = [] expression_name = [] campos = [] data = [] data_username = [] for item in fields.items(): field, value = item[0], item[1] if value: if field == 'name': if not isinstance(value, unicode): value = unicode(value, 'utf-8') expression_name += [ModelsDadosFuncdetails.value.like(value,case_sensitive=case_sensitive)] expression_name += [ModelsDadosFuncdetails.username.like(value,case_sensitive=case_sensitive)] else: if isinstance(value, list): for val in value: expressions += [ModelsDadosFuncdetails.value.like(unicode(val, 'utf-8'),case_sensitive=case_sensitive)] else: expressions += [ModelsDadosFuncdetails.value.like(unicode(value, 'utf-8'),case_sensitive=case_sensitive)] campos += [unicode(field, 'utf-8')] if campos and expressions: data = ModelsDadosFuncdetails().store.find(ModelsDadosFuncdetails, ModelsConfgMyvindula.name.is_in(campos), ModelsDadosFuncdetails.field_id==ModelsConfgMyvindula.id, ModelsDadosFuncdetails.deleted==False, Or(*expressions),) if expression_name: data_username = ModelsDadosFuncdetails().store.find(ModelsDadosFuncdetails, ModelsConfgMyvindula.name.is_in([u'name', u'nickname']), ModelsDadosFuncdetails.field_id==ModelsConfgMyvindula.id, ModelsDadosFuncdetails.deleted==False, Or(*expression_name),) if (data and data.count() > 0) or (data_username and data_username.count() > 0): L_username_aux = [] L_username_aux2 = [] for item in data: if not item.username in L_username_aux: L_username_aux.append(item.username) for item in data_username: if not item.username in L_username_aux2: L_username_aux2.append(item.username) #verifica se a busca foi feita tanto por nome quando pelos outros filtros if expressions and expression_name: if L_username_aux and L_username_aux2: for i in L_username_aux: if (i in L_username_aux2) and (i not in L_username): L_username.append(i) #verifica se a busca foi feita apenas por filtro elif expressions: L_username = L_username_aux #verifica se a busca foi feita apenas por nome e username else: L_username = L_username_aux2 elif if_empty_return_all: #Pegando os usuarios com distinct select = Select(ModelsDadosFuncdetails.username, ModelsDadosFuncdetails.deleted==False, distinct=True) data = ModelsDadosFuncdetails().store.execute(select) for item in data: L_username.append(item[0]) key = generate_cache_key('FuncDetails:get_FuncDetailsByField', L_retorno=str(L_username), fields=str(fields)) sorted_user_list = get_redis_cache(key) if not sorted_user_list: for user in L_username: L_retorno.append(FuncDetails(user)) sorted_user_list = sorted(L_retorno, key=por_name) try: set_redis_cache(key,'FuncDetails:get_FuncDetailsByField:keys',sorted_user_list,600) except: sorted_user_list = [i.username for i in L_retorno] set_redis_cache(key,'FuncDetails:get_FuncDetailsByField:keys',sorted_user_list,600) return sorted_user_list
def get_AllFuncUsernameList(filter=None,b_size=None,b_start=None,sorted_by=por_name,reverse=False,search_all_fields=True): #Nao usar o b_size, b_start #TODO: Consertar a forma que esta sendo ordenada a lista #TODO: Melhorar, ainda nao está bom, tempo melhorado de 11 para 2 sec key = generate_cache_key(domain='FuncDetails:get_AllFuncUsernameList', filter=filter, b_size=b_size, b_start=b_start, sorted_by=str(sorted_by), search_all_fields=str(search_all_fields)) L_username = get_redis_cache(key) if not L_username: L_username = [] L_retorno = [] if b_size != None and b_start != None: b_start = int(b_start) b_size = b_start + int(b_size) else: b_start = None b_size = None if filter: #Ajustando filtro para o caso de busca #por mais de uma palavra Ex: '%palavra1%palavra2%' filter = filter.split(' ') filter = '%'.join(filter) data = [] if search_all_fields: data = ModelsDadosFuncdetails().store.find(ModelsDadosFuncdetails, ModelsDadosFuncdetails.deleted==False, ModelsDadosFuncdetails.value.like('%'+filter+'%',case_sensitive=False)) else: #Faz a busca só pelos campos de NOME, EMAIL E APELIDO! fields = ModelsConfgMyvindula().store.find(ModelsConfgMyvindula, ModelsConfgMyvindula.deleted==False, ModelsConfgMyvindula.name.is_in([u'nickname', u'name', u'email'])) id_fields = [] for field in fields: id_fields.append(field.id) if id_fields: data = ModelsDadosFuncdetails().store.find(ModelsDadosFuncdetails, ModelsDadosFuncdetails.deleted==False, ModelsDadosFuncdetails.field_id.is_in(id_fields), ModelsDadosFuncdetails.value.like('%'+filter+'%',case_sensitive=False)) if data and data.count() > 0: for item in data: if not item.username in L_username: L_username.append(item.username) else: #Pegando os usuarios com distinct select = Select(ModelsDadosFuncdetails.username, ModelsDadosFuncdetails.deleted==False, distinct=True) data = ModelsDadosFuncdetails().store.execute(select) for item in data: L_username.append(item[0]) for user in L_username[b_start:b_size]: L_retorno.append(FuncDetails(user)) #O reverse é utilizado para quando se trata de um campo de DATA L_username = [i.username for i in sorted(L_retorno, key=sorted_by, reverse=reverse)] set_redis_cache(key,'FuncDetails:get_AllFuncUsernameList:keys',L_username,1800) return L_username
def get_AllFuncFakeList(filter=None): L_username = [] data = ModelsDadosFuncdetails().store.find(ModelsDadosFuncdetails) if filter: data = data.find(ModelsDadosFuncdetails.value.like('%'+filter+'%',case_sensitive=False)) return range(data.count())