Browse Source

Merge branch 'jogobot-config' into test-v1

develop
Jonathan Golder 8 years ago
parent
commit
fbe9799df7
  1. 2
      __init__.py
  2. 96
      config.py
  3. 16
      jogobot.py

2
__init__.py

@ -26,4 +26,4 @@ Scripts for our redundances bot
""" """
# noqa needed to prevent pyflakes from warning about unused imports # noqa needed to prevent pyflakes from warning about unused imports
from jogobot.jogobot import ( output, sendmail, is_active ) # noqa from jogobot.jogobot import ( output, sendmail, is_active ) # noqa
import jogobot.config as config # noqa from jogobot.config import config # noqa

96
config.py

@ -0,0 +1,96 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# config.py
#
# Copyright 2016 GOLDERWEB – Jonathan Golder <jonathan@golderweb.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#
"""
This module will read config for jogobot from config file (ini-style) using
python standard library module configparser
"""
import configparser
import ast
import pywikibot
def load_config():
"""
Reads raw configuration from file and provides it as attribute
@param Config-Object
@r-type configparser.ConfigParser
"""
# Load configparser
config = configparser.ConfigParser(interpolation=None)
# Load config file
config.read(pywikibot.config.get_base_dir() + "/jogobot.conf")
return config
def parse_config( raw_config ):
"""
Converts config to normal dictionary
Parses each entry with ast.literal_eval
@param config Config-Object to parse
@type config configparser.ConfigParser
@return Parsed configuration
@rtype dict
"""
# Convert to dict as configparser could contain only strings
config = dict( raw_config )
# Parse all sections
for section in raw_config.sections():
# Convert to dict as configparser could contain only strings
config[section] = dict( raw_config[section] )
# Parse config with ast.literal_eval to get python datatypes
for key, value in config[section].items():
config[section][key] = ast.literal_eval( value )
return config
def root_section( config, section="jogobot" ):
"""
Make 'section' entrys available in root level (without sections)
@param config Config-Object to parse
@type config dict
@return Parsed configuration
@rtype dict
"""
for key, value in config[section].items():
config[key] = value
return config
# Load config
config = load_config()
# Parse config to get python datatypes
config = parse_config( config )
# Make jogobot section available as root
config = root_section( config )

16
jogobot.py

@ -23,6 +23,7 @@
# #
import os import os
import shlex
from datetime import datetime from datetime import datetime
from email.mime.text import MIMEText from email.mime.text import MIMEText
from subprocess import Popen, PIPE, TimeoutExpired from subprocess import Popen, PIPE, TimeoutExpired
@ -32,7 +33,7 @@ import pywikibot
from pywikibot.bot import( from pywikibot.bot import(
DEBUG, INFO, WARNING, ERROR, CRITICAL, STDOUT, VERBOSE, logoutput ) DEBUG, INFO, WARNING, ERROR, CRITICAL, STDOUT, VERBOSE, logoutput )
import jogobot.config as config from jogobot.config import config
def output( text, level="INFO", decoder=None, newline=True, def output( text, level="INFO", decoder=None, newline=True,
@ -41,7 +42,7 @@ def output( text, level="INFO", decoder=None, newline=True,
Wrapper for pywikibot output functions Wrapper for pywikibot output functions
""" """
text = datetime.utcnow().strftime( "%Y-%m-%d %H:%M:%S (UTC) " ) + text text = datetime.utcnow().strftime( config["log_timestamp"] ) + " " + text
if ( level.upper() == "STDOUT" ): if ( level.upper() == "STDOUT" ):
_level = STDOUT _level = STDOUT
@ -102,7 +103,7 @@ pywikibot.output = pywikibot_output
def sendmail( Subject, Body, To=None, CC=None, BCC=None, def sendmail( Subject, Body, To=None, CC=None, BCC=None,
From="JogoBot <tools.jogobot@tools.wmflabs.org>" ): From=config["mail_from"] ):
""" """
Provides a simple wrapper for exim (MTA) on tool labs Provides a simple wrapper for exim (MTA) on tool labs
Params should be formated according related fields in RFC 5322 Params should be formated according related fields in RFC 5322
@ -143,7 +144,7 @@ def sendmail( Subject, Body, To=None, CC=None, BCC=None,
# We have no local MTA so we need to catch errors and write to file instead # We have no local MTA so we need to catch errors and write to file instead
try: try:
# Send the message via exim # Send the message via exim
with Popen( config.mail_cmd, stdin=PIPE, with Popen( shlex.split(config['mail_cmd']), stdin=PIPE,
universal_newlines=True ) as MTA: universal_newlines=True ) as MTA:
MTA.communicate(msg.as_string()) MTA.communicate(msg.as_string())
@ -164,9 +165,9 @@ def sendmail( Subject, Body, To=None, CC=None, BCC=None,
except FileNotFoundError: except FileNotFoundError:
# Local fallback # Local fallback
with open( config.bot_dir + "/Mail.txt", "a" ) as mail: with open( config["dir"] + "/Mail.txt", "a" ) as mail:
mail.write( "\n\n" ) mail.write( "\n\n" )
mail.write( datetime.utcnow().strftime( "%Y-%m-%d %H:%M:%S (UTC)")) mail.write( datetime.utcnow().strftime( config["log_timestamp"]))
mail.write( "\n" + msg.as_string() ) mail.write( "\n" + msg.as_string() )
@ -218,8 +219,7 @@ class StatusAPI:
self.site = pywikibot.Site() self.site = pywikibot.Site()
# We need the shell working directory # We need the shell working directory
self.cwd = "/home/joni/GOLDERWEB/Daten/Projekte/" +\ self.cwd = config["dir"]
"05_Wikimedia/62_BOT/bot"
def is_disabled_on_wiki( self, task_slug=None ): def is_disabled_on_wiki( self, task_slug=None ):
""" """

Loading…
Cancel
Save