# HG changeset patch # User Goffi # Date 1453490657 -3600 # Node ID 74014a9cc20311d7e3d76069c8ba09a68bf73212 # Parent d80ccf4bf20126bbc7b55e052d4ac6d4ea406ce1 jp: added a blog/import command to handle new blog import plugin diff -r d80ccf4bf201 -r 74014a9cc203 frontends/src/jp/cmd_blog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/frontends/src/jp/cmd_blog.py Fri Jan 22 20:24:17 2016 +0100 @@ -0,0 +1,88 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +# jp: a SàT command line tool +# Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 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 Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +import base +from sat.core.i18n import _ +from sat.core.constants import Const as C + +__commands__ = ["Blog"] + + +class Import(base.CommandBase): + def __init__(self, host): + super(Import, self).__init__(host, 'import', help=_(u'import an external blog')) + + def add_parser_options(self): + self.parser.add_argument("importer", type=base.unicode_decoder, nargs='?', help=_(u"importer name, nothing to display importers list")) + self.parser.add_argument('--host', type=base.unicode_decoder, help=_(u"original blog host")) + self.parser.add_argument('--no-images-upload', action='store_true', help=_(u"do *NOT* upload images (default: do upload images)")) + self.parser.add_argument('--upload-ignore-host', help=_(u"do not upload images from this host (default: upload all images)")) + self.parser.add_argument("--ignore-tls-errors", action="store_true", help=_("ignore invalide TLS certificate for uploads")) + self.parser.add_argument('-o', '--option', action='append', nargs=2, default={}, metavar=(u'NAME', u'VALUE'), + help=_(u"importer specific options (see importer description)")) + self.parser.add_argument('--service', type=base.unicode_decoder, default=u'', metavar=u'PUBSUB_SERVICE', + help=_(u"PubSub service where the items must be uploaded (default: server)")) + self.parser.add_argument("location", type=base.unicode_decoder, nargs='?', + help=_(u"importer data location (see importer description), nothing to show importer description")) + + def connected(self): + """Send files to jabber contact""" + super(Import, self).connected() + if self.args.location is None: + for name in ('option', 'service', 'no_images_upload'): + if getattr(self.args, name): + self.parser.error(_(u"{name} argument can't be used without location argument").format(name=name)) + if self.args.importer is None: + print u''.join([u'{}: {}'.format(name, desc) for name, desc in self.host.bridge.blogImportList()]) + else: + try: + short_desc, long_desc = self.host.bridge.blogImportDesc(self.args.importer) + except Exception as e: + msg = [l for l in unicode(e).split('\n') if l][-1] # we only keep the last line + print msg + self.host.quit(1) + else: + print u"{name}: {short_desc}\n\n{long_desc}".format(name=self.args.importer, short_desc=short_desc, long_desc=long_desc) + self.host.quit() + else: + # we have a location, an import is requested + options = dict(self.args.option) + if self.args.host: + options['host'] = self.args.host + if self.args.ignore_tls_errors: + options['ignore_tls_errors'] = C.BOOL_TRUE + if self.args.no_images_upload: + options['upload_images'] = C.BOOL_FALSE + if self.args.upload_ignore_host: + self.parser.error(u"upload-ignore-host option can't be used when no-images-upload is set") + elif self.args.upload_ignore_host: + options['upload_ignore_host'] = self.args.upload_ignore_host + try: + self.host.bridge.blogImport(self.args.importer, self.args.location, options, self.args.service, self.profile) + except Exception as e: + print e + self.host.quit(1) + + +class Blog(base.CommandBase): + subcommands = (Import,) + + def __init__(self, host): + super(Blog, self).__init__(host, 'blog', use_profile=False, help=_('blog/microblog management'))