From d8cf8dffc278ce84dbc1a2265ccfdab620da88c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20M=C3=A9taireau?= Date: Sun, 10 Jan 2016 23:07:58 +0100 Subject: [PATCH] Add a way to specify the location of the output folder --- zimit.ini | 6 ++++-- zimit/utils.py | 15 +++++++++++++++ zimit/worker.py | 40 +++++++++++++++++++--------------------- 3 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 zimit/utils.py diff --git a/zimit.ini b/zimit.ini index 0da53a4..71e3dff 100644 --- a/zimit.ini +++ b/zimit.ini @@ -3,13 +3,15 @@ use = egg:zimit zimit.zimwriterfs_bin = /home/alexis/dev/openzim/zimwriterfs/zimwriterfs zimit.httrack_bin = /usr/bin/httrack +zimit.output_location = /tmp/ +zimit.output_url = http://zimit.notmyidea.org/zims + mail.host = localhost mail.port = 2525 -mail.default_sender = Zim It! +mail.default_sender = zimit@notmyidea.org pyramid.includes = pyramid_mailer - pyramid_mailer.debug [server:main] use = egg:waitress#main diff --git a/zimit/utils.py b/zimit/utils.py new file mode 100644 index 0000000..0b9f39d --- /dev/null +++ b/zimit/utils.py @@ -0,0 +1,15 @@ +import os +import shlex +import subprocess + + +def spawn(cmd): + """Quick shortcut to spawn a command on the filesystem""" + return subprocess.Popen(shlex.split(cmd)) + + +def ensure_paths_exists(*paths): + for path in paths: + if not os.path.exists(path): + msg = '%s does not exist.' % path + raise OSError(msg) diff --git a/zimit/worker.py b/zimit/worker.py index 8079588..660ae0c 100644 --- a/zimit/worker.py +++ b/zimit/worker.py @@ -1,45 +1,41 @@ -import os -import shlex +import os.path import shutil -import subprocess import tempfile +import urlparse + from pyramid_mailer import Mailer from slugify import slugify from zimit.messages import ZimReadyMessage - +from zimit import utils HTTRACK_BIN = "/usr/bin/httrack" DEFAULT_AUTHOR = "BSF" -def spawn(cmd): - """Quick shortcut to spawn a command on the filesystem""" - return subprocess.Popen(shlex.split(cmd)) - - class ZimCreator(object): def __init__(self, settings): if 'zimit.zimwriterfs_bin' not in settings: raise ValueError('Please define zimit.zimwriterfs_bin config.') - if not os.path.exists(settings['zimit.zimwriterfs_bin']): - msg = '%s does not exist.' % settings['zimit.zimwriterfs_bin'] - raise OSError(msg) - + zimwriterfs_bin = settings['zimit.zimwriterfs_bin'] httrack_bin = settings.get('zimit.httrack_bin', HTTRACK_BIN) - if not os.path.exists(httrack_bin): - raise OSError('%s does not exist.' % httrack_bin) + output_location = settings.get('zimit.output_location') + + utils.ensure_paths_exists( + zimwriterfs_bin, httrack_bin, output_location) self.zimwriterfs_bin = settings.get('zimit.zimwriterfs_bin') self.httrack_bin = httrack_bin self.author = settings.get('zimit.default_author', DEFAULT_AUTHOR) + self.output_location = settings.get('zimit.output_location') + self.output_url = settings.get('zimit.output_url') self.settings = settings def download_website(self, url): path = tempfile.mkdtemp("website") - p = spawn("%s --path %s %s" % (self.httrack_bin, path, url)) + p = utils.spawn("%s --path %s %s" % (self.httrack_bin, path, url)) p.wait() shutil.copy('./favicon.ico', path) return path @@ -49,21 +45,23 @@ class ZimCreator(object): config.update({ 'bin': self.zimwriterfs_bin, 'location': html_location, - 'output': zim_file, + 'output': os.path.join(self.output_location, zim_file), 'icon': 'favicon.ico', 'publisher': self.author, }) # Spawn zimwriterfs with the correct options. - p = spawn(('{bin} -w "{welcome}" -l "{language}" -t "{title}"' - ' -d "{description}" -f {icon} -c "{author}"' - ' -p "{publisher}" {location} {output}').format(**config)) + p = utils.spawn( + ('{bin} -w "{welcome}" -l "{language}" -t "{title}"' + ' -d "{description}" -f {icon} -c "{author}"' + ' -p "{publisher}" {location} {output}').format(**config)) p.wait() return zim_file def send_email(self, email, zim_file): mailer = Mailer.from_settings(self.settings) - msg = ZimReadyMessage(email, zim_file) + zim_file_url = urlparse.urljoin(self.output_url, zim_file) + msg = ZimReadyMessage(email, zim_file_url) mailer.send_immediately(msg) def create_zim_from_website(self, config):