def test__send_mod_mail_not_enabled(self): mock_response_handler = Mock(send_mod_mail=Mock()) sub_monitor = SubMonitor(MagicMock(), MagicMock(), MagicMock(), MagicMock(), mock_response_handler, config=MagicMock()) mock_monitored_sub = Mock(send_repost_modmail=False) sub_monitor._send_mod_mail(mock_monitored_sub, 'test') mock_response_handler.send_mod_mail.assert_not_called()
def test__send_mod_mail_not_enabled(self, mock_len): mock_len.return_value = 5 mock_response_handler = Mock(send_mod_mail=Mock()) sub_monitor = SubMonitor(MagicMock(), MagicMock(), MagicMock(), MagicMock(), mock_response_handler, config=MagicMock()) monitored_sub = MonitoredSub(name='testsubreddit', send_repost_modmail=True) sub_monitor._send_mod_mail(monitored_sub, Mock(matches=[], checked_post=Mock(post_id='abc123'))) expected_message_body = 'Post [https://redd.it/abc123](https://redd.it/abc123) looks like a repost. I found 5 matches' mock_response_handler.send_mod_mail.assert_called_with('testsubreddit', 'Repost found in r/testsubreddit', expected_message_body)
def test__should_check_post__already_checked_reject(self): sub_monitor = SubMonitor(MagicMock(), MagicMock(), MagicMock(), MagicMock(), MagicMock(), config=Config(redis_host='dummy')) post = Post(left_comment=True) self.assertFalse(sub_monitor.should_check_post(post, True, True))
def test__should_check_post__title_filter_accept(self): sub_monitor = SubMonitor(MagicMock(), MagicMock(), MagicMock(), MagicMock(), MagicMock(), config=Config(redis_host='dummy', supported_post_types=['image'])) post = Post(left_comment=False, post_type='image', title='some post') self.assertTrue(sub_monitor.should_check_post(post, True, True))
def test__should_check_post__reject_crosspost(self): sub_monitor = SubMonitor(MagicMock(), MagicMock(), MagicMock(), MagicMock(), MagicMock(), config=Config(redis_host='dummy', supported_post_types=['image'])) post = Post(left_comment=False, post_type='image', crosspost_parent='dkjlsd') self.assertFalse(sub_monitor.should_check_post(post, True, True))
def __init__(self): self.config = Config() self.reddit = get_reddit_instance(self.config) self.reddit_manager = RedditManager(self.reddit) self.uowm = SqlAlchemyUnitOfWorkManager(get_db_engine(self.config)) event_logger = EventLogging(config=self.config) response_handler = ResponseHandler( self.reddit_manager, self.uowm, event_logger, source='submonitor', live_response=self.config.live_responses) dup_image_svc = DuplicateImageService(self.uowm, event_logger, self.reddit, config=self.config) response_builder = ResponseBuilder(self.uowm) self.sub_monitor = SubMonitor(dup_image_svc, self.uowm, self.reddit_manager, response_builder, response_handler, event_logger=event_logger, config=self.config)
from redditrepostsleuth.submonitorsvc.submonitor import SubMonitor if __name__ == '__main__': config = Config() event_logger = EventLogging(config=config) uowm = SqlAlchemyUnitOfWorkManager(get_db_engine(config)) response_builder = ResponseBuilder(uowm) reddit = get_reddit_instance(config) reddit_manager = RedditManager(reddit) dup = DuplicateImageService(uowm, event_logger, reddit, config=config) monitor = SubMonitor(dup, uowm, reddit_manager, response_builder, ResponseHandler(reddit_manager, uowm, event_logger, source='submonitor', live_response=config.live_responses), event_logger=event_logger, config=config) redis = get_redis_client(config) while True: while True: queued_items = redis.lrange('submonitor', 0, 20000) if len(queued_items) == 0: log.info('Sub monitor queue empty. Starting over') break log.info('Sub monitor queue still has %s tasks', len(queued_items)) time.sleep(60) with uowm.start() as uow:
config = Config( r'/home/barry/PycharmProjects/RedditRepostSleuth/sleuth_config.json') reddit = get_reddit_instance(config) uowm = SqlAlchemyUnitOfWorkManager(get_db_engine(config)) reddit_manager = RedditManager(reddit) event_logger = EventLogging(config=config) response_handler = ResponseHandler(reddit_manager, uowm, event_logger, source='submonitor') dup_image_svc = DuplicateImageService(uowm, event_logger, config=config) response_builder = ResponseBuilder(uowm) sub_monitor = SubMonitor(dup_image_svc, uowm, reddit_manager, response_builder, response_handler, event_logger=event_logger, config=config) with uowm.start() as uow: post = uow.posts.get_by_post_id('iirpkm') target_hashes = get_image_hashes(post.searched_url, hash_size=32) with uowm.start() as uow: monitored_subs = uow.monitored_sub.get_all() for sub in monitored_subs: #sub.target_image_match = 100 - (sub.target_hamming / 64) * 100 sub.target_image_meme_match = 92 uow.commit()