1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#! /usr/bin/env python
# Copyright (c) 2007-2008 PediaPress GmbH
# See README.txt for additional licensing information.
import os
from ConfigParser import ConfigParser
def wiki_mwapi(base_url=None, license=None, template_blacklist=None):
from mwlib import mwapidb
return mwapidb.WikiDB(base_url, license, template_blacklist)
def wiki_zip(path=None, url=None, name=None):
from mwlib import zipwiki
return zipwiki.Wiki(path)
def wiki_net(articleurl=None, url=None, name=None, imagedescriptionurls=None,
templateurls=None, templateblacklist=None, defaultarticlelicense=None,
defaultauthors=None, **kwargs):
from mwlib import netdb
if templateurls:
templateurls = [x for x in templateurls.split() if x]
else:
raise RuntimeError("templateurls parameter for netdb not set in [wiki] section")
if imagedescriptionurls:
imagedescriptionurls = [x for x in imagedescriptionurls.split() if x]
else:
raise RuntimeError("imagedescriptionurls parameter for netdb not set in [wiki] section")
if defaultauthors:
defaultauthors = [a.strip() for a in defaultauthors.split(',')]
return netdb.NetDB(articleurl,
imagedescriptionurls=imagedescriptionurls,
templateurls=templateurls,
templateblacklist=templateblacklist,
defaultauthors=defaultauthors,
)
def wiki_cdb(path=None, **kwargs):
from mwlib import cdbwiki
path = os.path.expanduser(path)
db=cdbwiki.WikiDB(path)
return db
def image_mwapi(base_url=None, shared_base_url=None):
from mwlib import mwapidb
return mwapidb.ImageDB(base_url, shared_base_url)
def image_download(url=None, localpath=None, knownlicenses=None):
assert url, "must supply url in [images] section"
from mwlib import netdb
if localpath:
localpath = os.path.expanduser(localpath)
urls = [x for x in url.split() if x]
assert urls
if knownlicenses:
knownlicenses = [x for x in knownlicenses.split() if x]
else:
knownlicenses = None
imgdb = netdb.ImageDB(urls, cachedir=localpath, knownLicenses=knownlicenses)
return imgdb
def image_zip(path=None):
from mwlib import zipwiki
return zipwiki.ImageDB(path)
dispatch = dict(
images = dict(mwapi=image_mwapi, download=image_download, zip=image_zip),
wiki = dict(mwapi=wiki_mwapi, cdb=wiki_cdb, net=wiki_net, zip=wiki_zip)
)
def _makewiki(conf):
res = {}
# yes, I really don't want to type this everytime
wc = os.path.join(conf, "wikiconf.txt")
if os.path.exists(wc):
conf = wc
if conf.startswith("http://") or conf.startswith("https://"):
res['wiki'] = wiki_mwapi(conf)
res['images'] = image_mwapi(conf)
return res
if conf.lower().endswith(".zip"):
from mwlib import zipwiki
res['wiki'] = zipwiki.Wiki(conf)
res['images'] = zipwiki.ImageDB(conf)
return res
cp=ConfigParser()
if not cp.read(conf):
raise RuntimeError("could not read config file %r" % (conf,))
for s in ['images', 'wiki']:
if not cp.has_section(s):
continue
args = dict(cp.items(s))
if "type" not in args:
raise RuntimeError("section %r does not have key 'type'" % s)
t = args['type']
del args['type']
try:
m = dispatch[s][t]
except KeyError:
raise RuntimeError("cannot handle type %r in section %r" % (t, s))
res[s] = m(**args)
assert "wiki" in res
return res
def makewiki(conf):
res = _makewiki(conf)
try:
overlaydir = os.environ['MWOVERLAY']
assert os.path.isdir(overlaydir)
import mwlib.overlay
res['wiki'] = mwlib.overlay.OverlayDB(res['wiki'], overlaydir)
except:
pass
return res
|