def bot_info(botid): """ This function renders the page showing bot information including username, token, ID and messages logged by the bot. :param botid: ID of the bot whose information is requested. :return: .../bot_info """ page = request.args.get('page', 1, type=int) bot = MyBot.objects(bot_id=botid).first() if bot is None: # Requested bot not found, redirect to selection page for choosing # another bot. web_logger.warn('Web request to get bot info with ID:{bid} which does ' 'not exist in database.'.format(bid=botid)) flash('Requested bot with ID:{bid} does not exist in the ' 'database.'.format(bid=botid)) return redirect(url_for('.get_bot_info', bot_choice=0)) msgs = procedures.filter_messages(botid=botid) pagination = msgs.paginate( page, error_out=False, per_page=current_app.config['MESSAGES_PER_PAGE']) return render_template('botinfo.html', bot=bot, messages=pagination.items, pagination=pagination)
def test_filter_messages_by_sender_lastname(self): # Add dummy messages Message.generate_fake(5) # Add 2 legit messages Message(sender_firstname='doe', sender_lastname='john').save() Message(sender_firstname='angel', sender_lastname='johnny').save() # Get messages msgs = procedures.filter_messages(name='john') self.assertEqual(len(msgs), 2)
def test_filter_messages_by_sender_text(self): # Add dummy messages Message.generate_fake(5) # Add 2 legit messages Message(text_content='text-12345').save() Message(text_content='TEXT-abcde').save() # Get messages msgs = procedures.filter_messages(text='text') self.assertEqual(len(msgs), 2)
def test_filter_messages_by_sender_username(self): # Add dummy messages Message.generate_fake(5) # Add 2 legit messages Message(sender_username='******').save() Message(sender_username='******').save() # Get messages msgs = procedures.filter_messages(username='******') self.assertEqual(len(msgs), 2)
def test_filter_messages_by_botid(self): # Add dummy messages Message.generate_fake(5) # Add 2 legit messages Message(bot_id=1234).save() Message(bot_id=1234).save() # Get messages msgs = procedures.filter_messages(botid=1234) self.assertEqual(len(msgs), 2)
def test_filter_messages_by_time(self): # Add dummy messages Message.generate_fake(10) # Add 2 legit messages Message(date=datetime.now() - timedelta(minutes=30)).save() Message(date=datetime.now() - timedelta(minutes=60)).save() # Get messages msgs = procedures.filter_messages(time_min=90) self.assertEqual(len(msgs), 2)
def test_filter_messages_by_all_criteria(self): # Add dummy messages Message.generate_fake(5) # Add partially matching messages. Message( date=datetime.now() - timedelta(minutes=30), # Un-match time. sender_username='******', sender_firstname='test', sender_lastname='bot', text_content='testmessage', bot_id=12345).save() Message( date=datetime.now() - timedelta(minutes=10), sender_username='******', # Non-matching sender-username. sender_firstname='test', sender_lastname='bot', text_content='testmessage', bot_id=12345).save() Message( date=datetime.now() - timedelta(minutes=10), sender_username='******', sender_firstname='abc', # Non-matching first-name, last-name sender_lastname='def', text_content='testmessage', bot_id=12345).save() Message( date=datetime.now() - timedelta(minutes=10), sender_username='******', sender_firstname='test', sender_lastname='bot', text_content='message', # Non-matching text content bot_id=12345).save() Message(date=datetime.now() - timedelta(minutes=10), sender_username='******', sender_firstname='Test', sender_lastname='Bot', text_content='testmessage', bot_id=11111).save() # Non-matching botid # Add expected message. Message(date=datetime.now() - timedelta(minutes=10), sender_username='******', sender_firstname='test', sender_lastname='bot', text_content='testmessage', bot_id=12345).save() # Get messages msgs = procedures.filter_messages(botid=12345, time_min=15, text='test', username='******', name='test') self.assertEqual(len(msgs), 1)
def test_filter_messages_by_sender_firstname_lastname(self): # Add dummy messages Message.generate_fake(10) # Remove any message with (possibly) matching names. Message.objects( Q(sender_firstname__icontains='john') | Q(sender_lastname__icontains='john')).delete() # Add 2 legit messages Message(sender_firstname='doe', sender_lastname='john').save() Message(sender_firstname='johnathen', sender_lastname='angel').save() # Get messages msgs = procedures.filter_messages(name='john') self.assertEqual(len(msgs), 2)
def index(): """ This function renders the Index page for application. It shows list of all messages logged by all bots and also provides a form for filtered messages. Upon filtering, it redirects to a page showing filtered messages. :return: ../index """ # get all messages. page = request.args.get('page', 1, type=int) pagination = procedures.filter_messages(time_min=int(time.time())/60)\ .paginate(page, per_page=current_app.config['MESSAGES_PER_PAGE'], error_out=False) msgs = pagination.items web_logger.info( 'index page displayed with {count} messages.'.format(count=len(msgs))) return render_template('index.html', messages=msgs, pagination=pagination)
def filtered_messages(botid, time_off, text, username, name): """ This function renders the filtered messages page based on the criteria chosen in index page. :param botid: ID of telegram.bot :param time_off: Time offset (in minutes). :param text: Message text (partially matched). :param username: Sender username (exactly matched). :param name: Sender firstname/lastname (partially matched). :return: .../filtered/botid/time_off/text/username/name """ # Resolve wildcards username_field = username if username != '#' else '#' botid = botid if botid != -1 else None text = text name = name # Filter messages msgs = procedures.filter_messages(username=username_field, botid=botid, time_min=time_off, text=text, name=name) fc = FilterCriteria(botid=botid, time_off=time_off, text=text, name=name, username=username_field) # get filtered messages. page = request.args.get('page', 1, type=int) pagination = msgs.paginate( page, error_out=False, per_page=current_app.config['MESSAGES_PER_PAGE']) msgs = pagination.items return render_template('filtered_msgs.html', criteria=fc, messages=msgs, pagination=pagination)