Mercurial > libervia-backend
annotate src/plugins/plugin_blog_import_dokuwiki.py @ 1841:7717975b3ec3
plugin blog_import_dokuwiki: first draft
author | souliane <souliane@mailoo.org> |
---|---|
date | Thu, 04 Feb 2016 12:29:43 +0100 |
parents | |
children | 9fd517248dc8 |
rev | line source |
---|---|
1841
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
4 # SàT plugin to import external blogs |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
5 # Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
6 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # This program is free software: you can redistribute it and/or modify |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # it under the terms of the GNU Affero General Public License as published by |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # the Free Software Foundation, either version 3 of the License, or |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 # (at your option) any later version. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # This program is distributed in the hope that it will be useful, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 # GNU Affero General Public License for more details. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # You should have received a copy of the GNU Affero General Public License |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
20 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
21 from sat.core.i18n import _, D_ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
22 from sat.core.constants import Const as C |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 from sat.core.log import getLogger |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
24 log = getLogger(__name__) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 from sat.core import exceptions |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 from sat.tools import xml_tools |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
27 from twisted.internet import threads |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 from collections import OrderedDict |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
29 import calendar |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
30 import urllib |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
31 import urlparse |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
32 import tempfile |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
33 import re |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 import time |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
35 import os.path |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
36 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
37 from dokuwiki import DokuWiki, DokuWikiError # this is a new dependency |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
38 except ImportError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
39 raise exceptions.MissingModule(u'Missing module dokuwiki, please install it with "pip install dokuwiki"') |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
40 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
41 from PIL import Image # this is already needed by plugin XEP-0054 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
42 except: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 raise exceptions.MissingModule(u"Missing module pillow, please download/install it from https://python-pillow.github.io") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
45 from plugin_blog_import import OPT_HOST, OPT_UPLOAD_IMAGES |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 except: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 raise exceptions.MissingModule(u'Missing module plugin_blog_import, please install the Salut à Toi "BLOG_IMPORT" plugin') |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
48 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
49 PLUGIN_INFO = { |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 "name": "Dokuwiki import", |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 "import_name": "IMPORT_DOKUWIKI", |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
52 "type": C.PLUG_TYPE_BLOG, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 "dependencies": ["BLOG_IMPORT"], |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
54 "main": "DokuwikiImport", |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
55 "handler": "no", |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
56 "description": _("""Blog importer for Dokuwiki blog engine.""") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
57 } |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
58 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
59 SHORT_DESC = D_(u"import posts from Dokuwiki blog engine") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
60 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
61 LONG_DESC = D_(u"""This importer handle Dokuwiki blog engine. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
62 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
63 To use it, you need an admin access to a running Dokuwiki website |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
64 (local or on the Internet). The importer retrieves the data using |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
65 the XMLRPC Dokuwiki API. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
66 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
67 You can specify a namespace (that could be a namespace directory |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
68 or a single post) or leave it empty to use the root namespace "/" |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
69 and import all the posts. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
70 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
71 You can specify a new media repository to modify the internal |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
72 media links and make them point to the URL of your choice, but |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
73 note that the upload is not done automatically: a temporary |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
74 directory will be created on your local drive and you will |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
75 need to upload it yourself to your repository via SSH or FTP. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
76 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
77 Following options are recognized: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
78 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
79 location: DokuWiki site URL |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
80 user: DokuWiki admin user |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
81 passwd: DokuWiki admin password |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
82 namespace: DokuWiki namespace to import (default: root namespace "/") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
83 media_repo: URL to the new remote media repository (default: none) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
84 limit: maximal number of posts to import (default: 100) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
85 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
86 Example of usage: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
87 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
88 jp import dokuwiki -p dave --pwd xxxxxx --connect |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
89 http://127.0.1.1 -o user souliane -o passwd qwertz |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
90 -o namespace public:2015:10 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
91 -o media_repo http://media.diekulturvermittlung.at |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
92 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
93 This retrieves the 100 last blog posts from http://127.0.1.1 that |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
94 are inside the namespace "public:2015:10" using the Dokuwiki user |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
95 "souliane", and it imports them to sat profile dave's microblog node. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
96 Internal Dokuwiki media that were hosted on http://127.0.1.1 are now |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
97 pointing to http://media.diekulturvermittlung.at. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
98 """) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
99 DEFAULT_MEDIA_REPO = "" |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
100 DEFAULT_NAMESPACE = "/" |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
101 DEFAULT_LIMIT = 100 # you might get a DBUS timeout (no reply) if it lasts too long |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
102 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
103 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
104 class Importer(DokuWiki): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
105 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
106 def __init__(self, url, user, passwd, media_repo=DEFAULT_MEDIA_REPO, limit=DEFAULT_LIMIT): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
107 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
108 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
109 @param url (unicode): DokuWiki site URL |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
110 @param user (unicode): DokuWiki admin user |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
111 @param passwd (unicode): DokuWiki admin password |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
112 @param media_repo (unicode): New remote media repository |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
113 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
114 DokuWiki.__init__(self, url, user, passwd) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
115 self.url = url |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
116 self.media_repo = media_repo |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
117 self.temp_dir = None |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
118 if self.media_repo: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
119 self.temp_dir = tempfile.mkdtemp() |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
120 self.info_msg = _("DokuWiki media files will be downloaded to %s - to finish the import you will need to upload them to %s" % (self.temp_dir, self.media_repo)) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
121 else: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
122 self.info_msg = _("DokuWiki media files will stay on %s - some of them may be protected by DokuWiki ACL and will not be accessible from XMPP." % url) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
123 self.limit = limit |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
124 self.posts_data = OrderedDict() |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
125 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
126 def process(self, client, namespace=DEFAULT_NAMESPACE): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
127 """Process a namespace or a single page. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
128 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
129 @param namespace (unicode): DokuWiki namespace (or page) to import |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
130 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
131 profile_jid = client.jid |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
132 log.info("Importing data from DokuWiki %s" % self.version) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
133 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
134 pages_list = self.pages.list(namespace) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
135 except DokuWikiError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
136 log.warning('Could not list Dokuwiki pages: please turn the "display_errors" setting to "Off" in the php.ini of the webserver hosting DokuWiki.') |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
137 return |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
138 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
139 if not pages_list: # namespace is actually a page? |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
140 names = namespace.split(":") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
141 real_namespace = ":".join(names[0:-1]) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
142 pages_list = self.pages.list(real_namespace) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
143 pages_list = [page for page in pages_list if page["id"] == namespace] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
144 namespace = real_namespace |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
145 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
146 count = 0 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
147 for page in pages_list: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
148 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
149 # get main information |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
150 id_, updated, published = unicode(page['id']), unicode(page['mtime']), self.getOriginalDate(page) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
151 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
152 # manage links |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
153 backlinks = self.pages.backlinks(id_) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
154 for link in self.pages.links(id_): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
155 if link["type"] != "extern": |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
156 assert link["type"] == "local" |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
157 page = link["page"] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
158 backlinks.append(page[1:] if page.startswith(":") else page) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
159 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
160 content = self.pages.get(id_) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
161 content_xhtml = self.processContent(self.pages.html(id_), backlinks, profile_jid) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
162 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
163 # XXX: title is already in content_xhtml and difficult to remove, so leave it |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
164 # title = content.split("\n")[0].strip(u"\ufeff= ") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
165 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
166 # build the extra data dictionary |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
167 mb_data = {"id": id_, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
168 "published": published, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
169 "updated": updated, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
170 "author": profile_jid.user, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
171 # "content": content, # when passed, it is displayed in Libervia instead of content_xhtml |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
172 "content_xhtml": content_xhtml, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
173 # "title": title, |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
174 "allow_comments": "true", |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
175 } |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
176 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
177 # find out if the message access is public or restricted |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
178 namespace = id_.split(":")[0] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
179 if namespace and namespace.lower() not in ("public", "/"): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
180 mb_data["group"] = namespace # roster group must exist |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
181 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
182 self.posts_data[id_] = {'blog': mb_data, 'comments':[[]]} |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
183 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
184 count += 1 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
185 if count >= self.limit : |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
186 break |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
187 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
188 return (self.posts_data.itervalues(), len(self.posts_data)) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
189 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
190 def getOriginalDate(self, page): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
191 """Try to parse the date from the message ID, else use "mtime". |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
192 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
193 The date can be extracted if the message ID looks like one of: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
194 - namespace:YYMMDD_short_title |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
195 - namespace:YYYYMMDD_short_title |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
196 @param page (dict): message page |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
197 @return unicode |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
198 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
199 id_, default = unicode(page["id"]), unicode(page["mtime"]) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
200 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
201 date = id_.split(":")[-1].split("_")[0] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
202 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
203 return default |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
204 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
205 time_struct = time.strptime(date, "%y%m%d") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
206 except ValueError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
207 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
208 time_struct = time.strptime(date, "%Y%m%d") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
209 except ValueError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
210 return default |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
211 return unicode(calendar.timegm(time_struct)) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
212 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
213 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
214 def processContent(self, text, backlinks, profile_jid): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
215 """Do text substitutions and file copy. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
216 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
217 @param text (unicode): message content |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
218 @param backlinks (list[unicode]): list of backlinks |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
219 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
220 text = text.strip(u"\ufeff") # this is at the beginning of the file (BOM) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
221 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
222 for backlink in backlinks: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
223 src = '/doku.php?id=%s"' % backlink |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
224 tgt = '/blog/%s/%s" target="#"' % (profile_jid.user, backlink) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
225 text = text.replace(src, tgt) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
226 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
227 subs = [] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
228 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
229 link_pattern = r"""<(img|a)[^>]* (src|href)="([^"]+)"[^>]*>""" |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
230 for tag in re.finditer(link_pattern, text): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
231 type_, attr, link = tag.group(1), tag.group(2), tag.group(3) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
232 assert (type_ == "img" and attr == "src") or (type_ == "a" and attr == "href") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
233 if re.match(r"^\w*://", link): # absolute URL to link directly |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
234 continue |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
235 if self.media_repo: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
236 self.moveMedia(link, subs) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
237 else: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
238 subs.append((link, urlparse.urljoin(self.url, link))) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
239 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
240 for url, new_url in subs: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
241 text = text.replace(url, new_url) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
242 return text |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
243 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
244 def moveMedia(self, link, subs): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
245 """Move a media from the DokuWiki host to the new repository. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
246 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
247 @param link (unicode): media link |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
248 @param subs (set(couple)): substitutions list |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
249 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
250 url = urlparse.urljoin(self.url, link) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
251 user_media = re.match(r"(/lib/exe/\w+.php\?)(.*)", link) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
252 thumb_width = None |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
253 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
254 if user_media: # media that has been added by the user |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
255 params = urlparse.parse_qs(urlparse.urlparse(url).query) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
256 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
257 media = params["media"][0] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
258 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
259 log.warning("No media found in fetch URL: %s" % user_media.group(2)) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
260 return |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
261 if re.match(r"^\w*://", media): # external URL to link directly |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
262 subs.append((link, media)) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
263 return |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
264 try: # create thumbnail |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
265 thumb_width = params["w"][0] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
266 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
267 pass |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
268 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
269 filename = media.replace(":", "/") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
270 # XXX: avoid "precondition failed" error (only keep the media parameter) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
271 url = urlparse.urljoin(self.url, "/lib/exe/fetch.php?media=%s" % media) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
272 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
273 elif link.startswith("/lib/plugins/"): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
274 # other link added by a plugin or something else |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
275 filename = link[13:] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
276 else: # fake alert... there's no media (or we don't handle it yet) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
277 return |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
278 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
279 filepath = os.path.join(self.temp_dir, filename) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
280 self.downloadMedia(url, filepath) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
281 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
282 if thumb_width: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
283 filename = os.path.join("thumbs", thumb_width, filename) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
284 thumbnail = os.path.join(self.temp_dir, filename) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
285 self.createThumbnail(filepath, thumbnail, thumb_width) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
286 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
287 new_url = os.path.join(self.media_repo, filename) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
288 subs.append((link, new_url)) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
289 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
290 def downloadMedia(self, source, dest): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
291 """Copy media to localhost. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
292 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
293 @param source (unicode): source url |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
294 @param dest (unicode): target path |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
295 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
296 dirname = os.path.dirname(dest) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
297 if not os.path.exists(dest): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
298 if not os.path.exists(dirname): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
299 os.makedirs(dirname) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
300 urllib.urlretrieve(source, dest) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
301 log.debug("DokuWiki media file copied to %s" % dest) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
302 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
303 def createThumbnail(self, source, dest, width): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
304 """Create a thumbnail. |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
305 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
306 @param source (unicode): source file path |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
307 @param dest (unicode): destination file path |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
308 @param width (unicode): thumbnail's width |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
309 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
310 thumb_dir = os.path.dirname(dest) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
311 if not os.path.exists(thumb_dir): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
312 os.makedirs(thumb_dir) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
313 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
314 im = Image.open(source) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
315 im.thumbnail((width, int(width) * im.size[0] / im.size[1])) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
316 im.save(dest) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
317 log.debug("DokuWiki media thumbnail created: %s" % dest) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
318 except IOError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
319 log.error("Cannot create DokuWiki media thumbnail %s" % dest) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
320 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
321 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
322 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
323 class DokuwikiImport(object): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
324 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
325 def __init__(self, host): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
326 log.info(_("plugin Dokuwiki Import initialization")) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
327 self.host = host |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
328 host.plugins['BLOG_IMPORT'].register('dokuwiki', self.DkImport, SHORT_DESC, LONG_DESC) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
329 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
330 def DkImport(self, client, location, options=None): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
331 """Import from DokuWiki to PubSub |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
332 |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
333 @param location (unicode): DokuWiki site URL |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
334 @param options (dict, None): DokuWiki import parameters |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
335 - user (unicode): DokuWiki admin user |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
336 - passwd (unicode): DokuWiki admin password |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
337 - namespace (unicode): DokuWiki namespace to import |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
338 - media_repo (unicode): New remote media repository |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
339 """ |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
340 options[OPT_HOST] = location |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
341 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
342 user = options["user"] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
343 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
344 raise exceptions.DataError('parameter "user" is required') |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
345 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
346 passwd = options["passwd"] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
347 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
348 raise exceptions.DataError('parameter "passwd" is required') |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
349 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
350 media_repo = options["media_repo"] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
351 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
352 media_repo = DEFAULT_MEDIA_REPO |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
353 if options.get(OPT_UPLOAD_IMAGES, None): |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
354 # TODO: when media_repo is not defined or empty, we should not force this option |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
355 options[OPT_UPLOAD_IMAGES] = False |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
356 msg = _(u"Option --no-images-upload will be used by force.") |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
357 self.host.actionNew({'xmlui': xml_tools.note(msg).toXml()}, profile=client.profile) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
358 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
359 namespace = options["namespace"] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
360 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
361 namespace = DEFAULT_NAMESPACE |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
362 try: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
363 limit = options["limit"] |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
364 except KeyError: |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
365 limit = DEFAULT_LIMIT |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
366 dk_importer = Importer(location, user, passwd, media_repo, limit) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
367 self.host.actionNew({'xmlui': xml_tools.note(dk_importer.info_msg).toXml()}, profile=client.profile) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
368 d = threads.deferToThread(dk_importer.process, client, namespace) |
7717975b3ec3
plugin blog_import_dokuwiki: first draft
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
369 return d |