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