Esempio n. 1
0
def build_log_message(nick, msg, date=None, typ=1):
    """
    Create a log message from a nick, a message, optionally a date and type
    message types:
        0 = Don’t log
        1 = Message
        2 = Status/whatever
    """
    if not typ:
        return ''

    msg = clean_text(msg)
    if date is None:
        str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ')
    else:
        str_time = common.get_utc_time(date).strftime('%Y%m%dT%H:%M:%SZ')
    if typ == 1:
        prefix = 'MR'
    else:
        prefix = 'MI'
    lines = msg.split('\n')
    first_line = lines.pop(0)
    nb_lines = str(len(lines)).zfill(3)
    if nick:
        nick = '<' + nick + '>'
        logged_msg = '%s %s %s %s  %s\n' % (prefix, str_time, nb_lines, nick,
                                            first_line)
    else:
        logged_msg = '%s %s %s %s\n' % (prefix, str_time, nb_lines, first_line)
    return logged_msg + ''.join(' %s\n' % line for line in lines)
Esempio n. 2
0
def test_log_and_parse_messages():
    msg1 = {
        'nick': 'toto',
        'msg': 'coucou',
        'date': datetime.datetime.now().replace(microsecond=0)
    }
    msg1_utc = get_utc_time(msg1['date'])
    built_msg1 = build_log_message(**msg1)
    assert built_msg1 == 'MR %s 000 <toto>  coucou\n' % (
        msg1_utc.strftime('%Y%m%dT%H:%M:%SZ'))

    msg2 = {
        'nick': 'toto',
        'msg': 'coucou\ncoucou',
        'date': datetime.datetime.now().replace(microsecond=0)
    }
    built_msg2 = build_log_message(**msg2)
    msg2_utc = get_utc_time(msg2['date'])
    assert built_msg2 == 'MR %s 001 <toto>  coucou\n coucou\n' % (
        msg2_utc.strftime('%Y%m%dT%H:%M:%SZ'))

    assert parse_log_lines((built_msg1 + built_msg2).split('\n')) == [
        {
            'time': msg1['date'],
            'history': True,
            'txt': '\x195,-1}coucou',
            'nickname': 'toto'
        },
        {
            'time': msg2['date'],
            'history': True,
            'txt': '\x195,-1}coucou\ncoucou',
            'nickname': 'toto'
        },
    ]
Esempio n. 3
0
def build_log_message(nick: str,
                      msg: str,
                      date: Optional[datetime] = None,
                      typ: int = 1) -> str:
    """
    Create a log message from a nick, a message, optionally a date and type
    message types:
        0 = Don’t log
        1 = Message
        2 = Status/whatever
    """
    if not typ:
        return ''

    msg = clean_text(msg)
    time = common.get_utc_time() if date is None else common.get_utc_time(date)
    str_time = time.strftime('%Y%m%dT%H:%M:%SZ')
    prefix = 'MR' if typ == 1 else 'MI'
    lines = msg.split('\n')
    first_line = lines.pop(0)
    nb_lines = str(len(lines)).zfill(3)
    if nick:
        nick = '<' + nick + '>'
        logged_msg = '%s %s %s %s  %s\n' % (prefix, str_time, nb_lines, nick,
                                            first_line)
    else:
        logged_msg = '%s %s %s %s\n' % (prefix, str_time, nb_lines, first_line)
    return logged_msg + ''.join(' %s\n' % line for line in lines)
Esempio n. 4
0
    def log_message(self, jid, nick, msg, date=None, typ=1):
        """
        log the message in the appropriate jid's file
        type:
              0 = Don’t log
              1 = Message
              2 = Status/whatever
        """
        if not typ:
            return True

        jid = str(jid).replace('/', '\\')
        if not config.get_by_tabname('use_log', jid):
            return True
        if jid in self._fds.keys():
            fd = self._fds[jid]
        else:
            fd = self._check_and_create_log_dir(jid)
        if not fd:
            return True
        try:
            msg = clean_text(msg)
            if date is None:
                str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ')
            else:
                str_time = common.get_utc_time(date).strftime(
                    '%Y%m%dT%H:%M:%SZ')
            if typ == 1:
                prefix = 'MR'
            else:
                prefix = 'MI'
            lines = msg.split('\n')
            first_line = lines.pop(0)
            nb_lines = str(len(lines)).zfill(3)

            if nick:
                nick = '<' + nick + '>'
                fd.write(' '.join((prefix, str_time, nb_lines, nick,
                                   ' ' + first_line, '\n')))
            else:
                fd.write(' '.join(
                    (prefix, str_time, nb_lines, first_line, '\n')))
            for line in lines:
                fd.write(' %s\n' % line)
        except:
            log.error('Unable to write in the log file (%s)',
                      os.path.join(log_dir, jid),
                      exc_info=True)
            return False
        else:
            try:
                fd.flush()  # TODO do something better here?
            except:
                log.error('Unable to flush the log file (%s)',
                          os.path.join(log_dir, jid),
                          exc_info=True)
                return False
        return True
Esempio n. 5
0
    def log_message(self, jid, nick, msg, date=None, typ=1):
        """
        log the message in the appropriate jid's file
        type:
              0 = Don’t log
              1 = Message
              2 = Status/whatever
        """
        if not typ:
            return True

        jid = str(jid).replace('/', '\\')
        if not config.get_by_tabname('use_log', jid):
            return True
        if jid in self._fds.keys():
            fd = self._fds[jid]
        else:
            fd = self._check_and_create_log_dir(jid)
        if not fd:
            return True
        try:
            msg = clean_text(msg)
            if date is None:
                str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ')
            else:
                str_time = common.get_utc_time(date).strftime('%Y%m%dT%H:%M:%SZ')
            if typ == 1:
                prefix = 'MR'
            else:
                prefix = 'MI'
            lines = msg.split('\n')
            first_line = lines.pop(0)
            nb_lines = str(len(lines)).zfill(3)

            if nick:
                nick = '<' + nick + '>'
                fd.write(' '.join((prefix, str_time, nb_lines, nick, ' '+first_line, '\n')))
            else:
                fd.write(' '.join((prefix, str_time, nb_lines, first_line, '\n')))
            for line in lines:
                fd.write(' %s\n' % line)
        except:
            log.error('Unable to write in the log file (%s)',
                    os.path.join(log_dir, jid),
                    exc_info=True)
            return False
        else:
            try:
                fd.flush()          # TODO do something better here?
            except:
                log.error('Unable to flush the log file (%s)',
                        os.path.join(log_dir, jid),
                        exc_info=True)
                return False
        return True
Esempio n. 6
0
 def log_roster_change(self, jid, message):
     """
     Log a roster change
     """
     if not config.get_by_tabname('use_log', jid):
         return True
     self._check_and_create_log_dir('', open_fd=False)
     if not self._roster_logfile:
         try:
             self._roster_logfile = open(os.path.join(
                 log_dir, 'roster.log'),
                                         'a',
                                         encoding='utf-8')
         except IOError:
             log.error('Unable to create the log file (%s)',
                       os.path.join(log_dir, 'roster.log'),
                       exc_info=True)
             return False
     try:
         str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ')
         message = clean_text(message)
         lines = message.split('\n')
         first_line = lines.pop(0)
         nb_lines = str(len(lines)).zfill(3)
         self._roster_logfile.write('MI %s %s %s %s\n' %
                                    (str_time, nb_lines, jid, first_line))
         for line in lines:
             self._roster_logfile.write(' %s\n' % line)
         self._roster_logfile.flush()
     except:
         log.error('Unable to write in the log file (%s)',
                   os.path.join(log_dir, 'roster.log'),
                   exc_info=True)
         return False
     return True
Esempio n. 7
0
 def log_roster_change(self, jid: str, message: str) -> bool:
     """
     Log a roster change
     """
     if not config.get_by_tabname('use_log', jid):
         return True
     self._check_and_create_log_dir('', open_fd=False)
     filename = log_dir / 'roster.log'
     if not self._roster_logfile:
         try:
             self._roster_logfile = filename.open('a', encoding='utf-8')
         except IOError:
             log.error(
                 'Unable to create the log file (%s)',
                 filename,
                 exc_info=True)
             return False
     try:
         str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ')
         message = clean_text(message)
         lines = message.split('\n')
         first_line = lines.pop(0)
         nb_lines = str(len(lines)).zfill(3)
         self._roster_logfile.write(
             'MI %s %s %s %s\n' % (str_time, nb_lines, jid, first_line))
         for line in lines:
             self._roster_logfile.write(' %s\n' % line)
         self._roster_logfile.flush()
     except:
         log.error(
             'Unable to write in the log file (%s)',
             filename,
             exc_info=True)
         return False
     return True
Esempio n. 8
0
def test_utc_time():
    delta = timedelta(seconds=-3600)
    d = datetime.datetime.now()
    time.timezone = -3600
    time.altzone = -3600
    assert get_utc_time(local_time=d) == d + delta
Esempio n. 9
0
def test_utc_time():
    delta = timedelta(seconds=-3600)
    d = datetime.datetime.now()
    time.timezone = -3600; time.altzone = -3600
    assert get_utc_time(local_time=d) == d + delta