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)}')
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
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
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
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
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