Esempio n. 1
0
    def _prepare_folderfilters(folders):
        content_type_id = ContentType.objects.get_for_model(Task).id

        # Ignore non-filters and those who already have FolderTask prepared.
        folders = filter(
            lambda x: x.cache_tag_ids and x.cache_searchcache_id is None,
            folders)

        if not folders:
            return

        folder_ids = [x.id for x in folders]
        FolderTask.objects.filter(folder_id__in=folder_ids).delete()

        for folder in folders:
            tag_ids = [int(x) for x in folder.cache_tag_ids.split(',')]

            folder.cache_searchcache_id = search(tag_ids=tag_ids).id
            folder.save()   # Yes, send signals.

            query = 'INSERT INTO folder_folder_tasks (folder_id, task_id, position)' \
                    ' SELECT {}, SCE.object_id, SCE.object_id FROM search_searchcacheelement SCE'\
                    ' WHERE SCE.content_type_id = {} AND SCE.cache_id = {};'.format(
                        folder.id,
                        content_type_id,
                        folder.cache_searchcache_id
                    )

            cursor = connection.cursor()
            cursor.execute(query)

        transaction.commit_unless_managed()
Esempio n. 2
0
 def _load_line(self, search_str):
     # read input file using buffering of 1 line.
     with open(file=self.search_path, buffering=self.buffer_size) as \
             line_to_parse:
         return [
             search(pattern=search_str, searched_line=parsed_line)
             for parsed_line in line_to_parse.readlines()
         ]
Esempio n. 3
0
def _invalidate_on_task_tags_change(sender, old_tag_ids, new_tag_ids, **kwargs):
    content_type = ContentType.objects.get_for_model(Folder)

    # TODO: Optimize. Filter only those folders that really need invalidation...
    search_cache_ids = []
    diff = set(old_tag_ids) ^ set(new_tag_ids)
    for tag in diff:
        search_cache = search(tag_ids=[tag])
        search_cache_ids.append(search_cache.id)

    folder_ids = SearchCacheElement.objects.filter(
            cache_id__in=search_cache_ids, content_type=content_type)
    folder_ids = list(set(folder_ids.values_list('object_id', flat=True)))

    FolderTask.objects.filter(folder_id__in=folder_ids).delete()
    invalidate_cache_for_folder_ids(folder_ids)
Esempio n. 4
0
 def search(self, **kwargs):
     logger.info("Searching for {pattern} in string: {str}".format(
         pattern=self.search_str, str=self.searched_line))
     print(
         search(pattern=self.search_str,
                searched_line=self.searched_line).string)
Esempio n. 5
0
def search_films(request):
    search_for = request.POST.get('search')
    films_list = all_films.get_all_film_names()
    result_list = utils.search(films_list, search_for)
    return JsonResponse(result_list)