changeset 1827:74014a9cc203

jp: added a blog/import command to handle new blog import plugin
author Goffi <goffi@goffi.org>
date Fri, 22 Jan 2016 20:24:17 +0100
parents d80ccf4bf201
children cb4be663a4a7
files frontends/src/jp/cmd_blog.py
diffstat 1 files changed, 88 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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 <http://www.gnu.org/licenses/>.
+
+
+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'))