#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # descpage.py # # Copyright 2018 Jonathan Golder # # 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="" ) ) # 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 )