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