Beispiel #1
0
def get_link_search_results_no_match():
    search_times = ImageSearchTimes()
    search_times.total_search_time = 10
    return SearchResults('test.com',
                         get_search_settings(),
                         checked_post=Post(post_id='abc123',
                                           post_type='link',
                                           subreddit='test'),
                         search_times=search_times)
    def _get_matches(
            self,
            hash: Text,
            target_hamming_distance: float,
            target_annoy_distance: float,
            max_matches: int = 50,
            max_depth: int = 4000,
            search_times: ImageSearchTimes = None) -> ImageIndexApiResult:
        """
        Take a given hash and search the image index API for matches
        :param hash: Hash of image to search
        :param target_hamming_distance: Target hamming distance
        :param target_annoy_distance: Target annoy distance
        :param max_matches: Max results to fetch from index API
        :param max_depth: Max depth to search index
        :param search_times: Optional time tracking
        :rtype: ImageIndexApiResult
        """
        try:
            if search_times:
                search_times.start_timer('image_search_api_time')
            params = {
                'hash': hash,
                'max_results': max_matches,
                'max_depth': max_depth,
                'a_filter': target_annoy_distance,
                'h_filter': target_hamming_distance
            }
            r = requests.get(f'{self.config.index_api}/image', params=params)
            if search_times:
                search_times.stop_timer('image_search_api_time')
        except ConnectionError:
            log.error('Failed to connect to Index API')
            raise NoIndexException('Failed to connect to Index API')
        except Exception as e:
            log.exception('Problem with image index api', exc_info=True)
            raise

        if r.status_code != 200:
            log.error('Unexpected status from index API: %s', r.status_code)
            raise NoIndexException(f'Unexpected status: {r.status_code}')

        res_data = json.loads(r.text)

        try:
            return ImageIndexApiResult(**res_data)
        except TypeError as e:
            raise NoIndexException(f'Failed to convert API result: {str(e)}')
Beispiel #3
0
def get_image_search_results_multi_match():
    search_results = ImageSearchResults('test.com',
                                        get_image_search_settings(),
                                        checked_post=Post(post_id='abc123',
                                                          post_type='image',
                                                          subreddit='test'))
    search_results.search_times = ImageSearchTimes()
    search_results.search_times.total_search_time = 10
    search_results.matches.append(
        ImageSearchMatch(
            'test.com', 1,
            Post(id=1,
                 post_id='1111',
                 created_at=datetime.strptime('2019-01-28 05:20:03',
                                              '%Y-%m-%d %H:%M:%S')), 10, 10,
            32))
    search_results.matches.append(
        ImageSearchMatch(
            'test.com', 1,
            Post(id=2,
                 post_id='2222',
                 created_at=datetime.strptime('2019-06-28 05:20:03',
                                              '%Y-%m-%d %H:%M:%S')), 10, 10,
            32))
    search_results.matches.append(
        ImageSearchMatch('test.com', 1,
                         Post(id=3, post_id='3333', title='some normal title'),
                         10, 0.250, 32))
    return search_results
Beispiel #4
0
 def _get_image_search_results_multi_match(self):
     search_results = ImageSearchResults('test.com', self._get_image_search_settings(),
                                         checked_post=Post(post_id='abc123', post_type='image', subreddit='test'))
     search_results.search_times = ImageSearchTimes()
     search_results.search_times.total_search_time = 10
     search_results.matches.append(
         ImageSearchMatch(
             'test.com',
             1,
             Post(post_id='abc123', created_at=datetime.strptime('2019-01-28 05:20:03', '%Y-%m-%d %H:%M:%S')),
             10,
             10,
             32
         )
     )
     search_results.matches.append(
         ImageSearchMatch(
             'test.com',
             1,
             Post(post_id='123abc', created_at=datetime.strptime('2019-06-28 05:20:03', '%Y-%m-%d %H:%M:%S')),
             10,
             10,
             32
         )
     )
     return search_results
Beispiel #5
0
def get_link_search_results_matches_match():
    search_times = ImageSearchTimes()
    search_times.total_search_time = 10
    search_results = SearchResults('test.com',
                                   get_search_settings(),
                                   checked_post=Post(post_id='abc123',
                                                     post_type='link',
                                                     subreddit='test'),
                                   search_times=search_times)
    search_results.matches.append(
        SearchMatch(
            'test.com',
            Post(post_id='123abc',
                 created_at=datetime.strptime('2019-06-28 05:20:03',
                                              '%Y-%m-%d %H:%M:%S')),
        ))

    return search_results
Beispiel #6
0
 def __init__(self, checked_url: Text, search_settings: ImageSearchSettings, checked_post: Post = None,
              search_times: ImageSearchTimes = None):
     super().__init__(checked_url, search_settings, checked_post)
     self.search_times = search_times or ImageSearchTimes()
     self.search_settings = search_settings
     self.checked_url = checked_url
     self.checked_post = checked_post
     self._target_hash = None
     if self.checked_post:
         self._target_hash = self.checked_post.dhash_h
     self.meme_template: Optional[MemeTemplate] = None
     self.closest_match: Optional[ImageSearchMatch] = None
     self.matches: List[ImageSearchMatch] = []
     self.logged_search: Optional[ImageSearch] = None
     self.meme_hash: Optional[Text] = None
Beispiel #7
0
 def _get_image_search_results_no_match(self):
     search_results = ImageSearchResults('test.com', self._get_image_search_settings(),
                                         checked_post=Post(post_id='abc123', post_type='image', subreddit='test'))
     search_results.search_times = ImageSearchTimes()
     search_results.search_times.total_search_time = 10
     return search_results