Jonathan Golder
6 years ago
3 changed files with 200 additions and 25 deletions
@ -0,0 +1,47 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
# |
||||
|
# config.py |
||||
|
# |
||||
|
# Copyright 2018 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. |
||||
|
# |
||||
|
# |
||||
|
""" |
||||
|
Loads configuration of EuroExchangeBot |
||||
|
""" |
||||
|
|
||||
|
import os |
||||
|
|
||||
|
import jogobot |
||||
|
|
||||
|
|
||||
|
class Config(): |
||||
|
""" |
||||
|
Configuration container for EuroExchangeBot |
||||
|
""" |
||||
|
|
||||
|
base_dir = os.path.expanduser(jogobot.config["euroexchange"]["base_dir"]) |
||||
|
working_dir = os.path.join( base_dir, "working_dir" ) |
||||
|
gnuplot_script_dir = os.path.join(base_dir, "gnuplot_scripts") |
||||
|
gnuplot = jogobot.config["euroexchange"]["gnuplot_bin"] |
||||
|
data_source = jogobot.config["euroexchange"]["data_source"] |
||||
|
zip_file = jogobot.config["euroexchange"]["data_zip_filename"] |
||||
|
csv_file = jogobot.config["euroexchange"]["data_csv_filename"] |
||||
|
upload_comment = jogobot.config["euroexchange"]["upload_comment"] |
||||
|
gnuplot_script_comment = jogobot.config["euroexchange"]["gnuplot_script_comment"] |
||||
|
gnuplot_script_help = jogobot.config["euroexchange"]["gnuplot_script_help"] |
@ -0,0 +1,129 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
# |
||||
|
# descpage.py |
||||
|
# |
||||
|
# Copyright 2018 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. |
||||
|
# |
||||
|
# |
||||
|
|
||||
|
import os |
||||
|
import re |
||||
|
|
||||
|
import pywikibot |
||||
|
import mwparserfromhell as mwparser |
||||
|
|
||||
|
from config import Config |
||||
|
|
||||
|
class DescPageBot(pywikibot.bot.Bot): |
||||
|
""" |
||||
|
Updates file description page with EuroExchangeBot related content |
||||
|
""" |
||||
|
|
||||
|
def treat_job( self, job ): |
||||
|
""" |
||||
|
Handles work on file description page for given job |
||||
|
|
||||
|
@param job Job to work on |
||||
|
@type EuroExchangeBotJob |
||||
|
""" |
||||
|
# Store job |
||||
|
self.job = job |
||||
|
# Store file page object |
||||
|
self.current_page = job.filepage |
||||
|
|
||||
|
# Parse filepage |
||||
|
self.parse_page() |
||||
|
|
||||
|
# Update gnuplot script |
||||
|
self.update_gnuplot_script() |
||||
|
|
||||
|
# Update wiki page |
||||
|
self.update_page() |
||||
|
|
||||
|
def load_gnuplot_script(self): |
||||
|
""" |
||||
|
Load the gnuplot script for current job |
||||
|
|
||||
|
@return Gnuplot script content |
||||
|
@rtype str |
||||
|
""" |
||||
|
|
||||
|
with open( os.path.join( |
||||
|
Config.gnuplot_script_dir, self.job.script + ".plt" ), "r") as fd: |
||||
|
return fd.read() |
||||
|
|
||||
|
def prepare_gnuplot_script(self): |
||||
|
""" |
||||
|
Prepare gnuplot script code for publishing on image description page |
||||
|
""" |
||||
|
|
||||
|
# Load gnuplot script |
||||
|
gnuplot_script = self.load_gnuplot_script() |
||||
|
|
||||
|
# Strip leadig and trailing whitespace |
||||
|
gnuplot_script = gnuplot_script.strip(" \n") |
||||
|
|
||||
|
# Replace |
||||
|
gnuplot_script = gnuplot_script.\ |
||||
|
replace( "system(\"echo $INFILE\")", |
||||
|
"'{}'".format( os.path.basename( Config.csv_file ) ) ).\ |
||||
|
replace( "system(\"echo $OUTFILE\")", |
||||
|
"'{}'".format (os.path.basename( self.job.image ) ) ) |
||||
|
|
||||
|
# Locate first empty line |
||||
|
m = re.search(r"^\s*$", gnuplot_script, re.MULTILINE) |
||||
|
if m: |
||||
|
# Insert help lines |
||||
|
gnuplot_script = gnuplot_script[:m.end()] +\ |
||||
|
Config.gnuplot_script_help + gnuplot_script[m.end():] |
||||
|
|
||||
|
return gnuplot_script |
||||
|
|
||||
|
def parse_page(self): |
||||
|
""" |
||||
|
Load current page content and parse with mwparser |
||||
|
""" |
||||
|
self.current_page.wikicode = mwparser.parse(self.current_page.text) |
||||
|
|
||||
|
def update_gnuplot_script(self): |
||||
|
""" |
||||
|
Update the gnuplot script embedded in page |
||||
|
""" |
||||
|
|
||||
|
# Get source tag with gnuplot script |
||||
|
gnuplot_script = next( |
||||
|
self.current_page.wikicode.ifilter_tags( |
||||
|
matches="<source lang=\"gnuplot\">" ) ) |
||||
|
|
||||
|
# Replace script |
||||
|
gnuplot_script.contents = "\n" + self.prepare_gnuplot_script() + "\n" |
||||
|
|
||||
|
def update_page(self): |
||||
|
""" |
||||
|
Put updated content to wiki |
||||
|
""" |
||||
|
|
||||
|
# Convert wikicode back to str |
||||
|
new_text = str(self.current_page.wikicode) |
||||
|
|
||||
|
# Save new text |
||||
|
self.userPut( self.current_page, |
||||
|
self.current_page.text, |
||||
|
new_text, |
||||
|
summary=Config.gnuplot_script_comment ) |
Loading…
Reference in new issue