Exemple #1
0
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)
Exemple #9
0
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)
Exemple #10
0
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)