def _loadjson(self, path, default=None): path = self._pathjoin(path) if self._exists(path): return json.load(open(path, "rb")) return default
def __init__(self, path): Environment.__init__(self) self.path = path self.metabook = myjson.load( open(os.path.join(self.path, "metabook.json"))) self.id2env = {}
def _makewiki(conf, metabook=None, **kw): kw = ndict(**kw) res = Environment(metabook) url = None if conf.startswith(':'): if conf[1:] not in wpwikis: wpwikis[conf[1:]] = dict(baseurl="http://%s.wikipedia.org/w/" % conf[1:], mw_license_url=None) url = wpwikis.get(conf[1:])['baseurl'] if conf.startswith("http://") or conf.startswith("https://"): url = conf if url: res.wiki = None res.wikiconf = wikiconf(baseurl=url, **kw) res.image = None return res nfo_fn = os.path.join(conf, 'nfo.json') if os.path.exists(nfo_fn): from mwlib import nuwiki from mwlib import myjson as json try: format = json.load(open(nfo_fn, 'rb'))['format'] except KeyError: pass else: if format == 'nuwiki': res.images = res.wiki = nuwiki.adapt(conf) res.metabook = res.wiki.metabook return res elif format == 'multi-nuwiki': return MultiEnvironment(conf) if os.path.exists(os.path.join(conf, "content.json")): raise RuntimeError("old zip wikis are not supported anymore") # 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.lower().endswith(".zip"): import zipfile from mwlib import myjson as json conf = os.path.abspath(conf) zf = zipfile.ZipFile(conf) try: format = json.loads(zf.read("nfo.json"))["format"] except KeyError: raise RuntimeError("old zip wikis are not supported anymore") if format == "nuwiki": from mwlib import nuwiki res.images = res.wiki = nuwiki.adapt(zf) if metabook is None: res.metabook = res.wiki.metabook return res elif format == u'multi-nuwiki': from mwlib import nuwiki import tempfile tmpdir = tempfile.mkdtemp() nuwiki.extractall(zf, tmpdir) res = MultiEnvironment(tmpdir) return res else: raise RuntimeError("unknown format %r" % (format, )) cp = res.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)) setattr(res, s, m(**args)) assert res.wiki is not None, '_makewiki should have set wiki attribute' return res
def __init__(self, path): Environment.__init__(self) self.path = path self.metabook = myjson.load(open(os.path.join(self.path, "metabook.json"))) self.id2env = {}
def _makewiki(conf, metabook=None, **kw): kw = ndict(**kw) res = Environment(metabook) url = None if conf.startswith(':'): if conf[1:] not in wpwikis: wpwikis[conf[1:]] = dict(baseurl = "http://%s.wikipedia.org/w/" % conf[1:], mw_license_url = None) url = wpwikis.get(conf[1:])['baseurl'] if conf.startswith("http://") or conf.startswith("https://"): url = conf if url: res.wiki = None res.wikiconf = wikiconf(baseurl=url, **kw) res.image = None return res nfo_fn = os.path.join(conf, 'nfo.json') if os.path.exists(nfo_fn): from mwlib import nuwiki from mwlib import myjson as json try: format = json.load(open(nfo_fn, 'rb'))['format'] except KeyError: pass else: if format == 'nuwiki': res.images = res.wiki = nuwiki.adapt(conf) res.metabook = res.wiki.metabook return res elif format == 'multi-nuwiki': return MultiEnvironment(conf) if os.path.exists(os.path.join(conf, "content.json")): raise RuntimeError("old zip wikis are not supported anymore") # 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.lower().endswith(".zip"): import zipfile from mwlib import myjson as json conf = os.path.abspath(conf) zf = zipfile.ZipFile(conf) try: format = json.loads(zf.read("nfo.json"))["format"] except KeyError: raise RuntimeError("old zip wikis are not supported anymore") if format=="nuwiki": from mwlib import nuwiki res.images = res.wiki = nuwiki.adapt(zf) if metabook is None: res.metabook = res.wiki.metabook return res elif format==u'multi-nuwiki': from mwlib import nuwiki import tempfile tmpdir = tempfile.mkdtemp() nuwiki.extractall(zf, tmpdir) res = MultiEnvironment(tmpdir) return res else: raise RuntimeError("unknown format %r" % (format,)) cp = res.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)) setattr(res, s, m(**args)) assert res.wiki is not None, '_makewiki should have set wiki attribute' return res