1
0
mirror of https://github.com/gryf/slack-backup.git synced 2025-12-17 11:30:25 +01:00
Files
slack-backup/slack_backup/reporters.py
2016-11-25 07:45:37 +01:00

78 lines
2.1 KiB
Python

"""
Reporters module.
There are several classes for specific format reporting, and also some of the
slack conversation/convention parsers.
"""
import os
import logging
from slack_backup import objects as o
class Reporter(object):
"""Base reporter class"""
ext = ''
def __init__(self, args, query):
self.out = args.output
self.q = query
self.channels = self._get_channels(args.channels)
def _get_channels(self, selected_channels):
"""
Retrive channels from db and return those which names matched from
selected_channels list
"""
result = []
all_channels = self.q(o.Channel).all()
if not selected_channels:
return all_channels
for channel in all_channels:
if channel.name in selected_channels:
result.append(channel)
return channel
def generate(self):
"""Generate raport it's a dummmy one - for use with none reporter"""
return
def get_log_path(self, name):
"""Return relative log file name """
return os.path.join(self.out, name + self.ext)
def write_msg(self, message, log):
"""Write message to file"""
raise NotImplementedError()
class TextReporter(Reporter):
"""Text aka IRC reporter"""
ext = '.log'
def generate(self):
"""Generate raport"""
for channel in self.channels:
log_path = self.get_log_path(channel.name)
for message in self.q(o.Message).\
filter(o.Message.channel == channel).\
order_by(o.Message.ts).all():
self.write_msg(message, log_path)
def write_msg(self, message, log):
"""Write message to file"""
def get_reporter(args, query):
"""Return object of right reporter class"""
reporters = {'text': TextReporter}
klass = reporters.get(args.format, Reporter)
if klass.__name__ == 'Reporter':
logging.warning('None, or wrong (%s) formatter selected, falling to'
' None Reporter', args.format)
return klass(args, query)