forked from stlemme/python-dokuwiki-export
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfidoc.py
114 lines (82 loc) · 2.52 KB
/
fidoc.py
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
import json
import wikiutils
import logging
import mirror
# import releases
import date
from publisher import *
from licenses import Licenses
from partners import Partners
from entities import SpecificEnabler
from metastructure import MetaStructure
meta_page = {
'partners': ':ficontent:private:meta:partner',
'licenses': ':ficontent:private:meta:license',
'structure': ':ficontent:private:meta:start'
}
class FIdoc(object):
def __init__(self, dw, skipchecks = []):
self.dw = dw
self.partners = Partners(self.load_json_from_wiki(self.get_meta_page('partners'), None))
self.licenses = Licenses(self.load_json_from_wiki(self.get_meta_page('licenses'), None))
# pub_pages = mirror.public_pages(self.dw)
self.pub = wikipublisher(self.dw, mirror.export_ns)
self.skipchecks = skipchecks
self.meta = MetaStructure.load(
self.dw,
self.get_meta_page('structure'),
self.partners,
self.licenses,
self.pub,
self.skipchecks
)
self.ses = {}
def get_wiki(self):
return self.dw
def get_partners(self):
return self.partners
def get_licenses(self):
return self.licenses
def get_publisher(self):
logging.debug("FIdoc publisher in use!")
return self.pub
def get_specific_enabler(self, metapage):
if metapage not in self.ses:
self.ses[metapage] = SpecificEnabler.load(self.dw, metapage, self.licenses, self.partners, self.pub)
return self.ses[metapage]
def get_meta_structure(self):
return self.meta
def list_all_se_meta_pages(self):
all_pages_info = self.dw.allpages()
meta_pages = []
for info in all_pages_info:
fullname = self.dw.resolve(info['id'])
if fullname is None:
continue
if mirror.rx_meta_pages.match(fullname) is None:
continue
meta_pages.append(fullname)
return meta_pages
def load_json_from_file(self, filename, default = {}):
with open(filename) as json_file:
return json.load(json_file)
return default
def load_json_from_wiki(self, wikipage, default = {}):
page = self.dw.getpage(wikipage)
doc = wikiutils.strip_code_sections(page)
data = '\n'.join(doc)
try:
return json.loads(data)
except ValueError as e:
logging.warning("Unable to read json data from page %s. No valid JSON!" % wikipage)
return default
def load_code_from_wiki(self, wikipage):
page = self.dw.getpage(wikipage)
if page is None:
return None
doc = wikiutils.strip_code_sections(page)
return '\n'.join(doc)
def get_meta_page(self, page_name):
if page_name not in meta_page:
return None
return meta_page[page_name]