This repository has been archived by the owner on Feb 9, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpull-static
executable file
·143 lines (113 loc) · 4.58 KB
/
pull-static
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
136
137
138
139
140
141
142
143
#!/usr/bin/python
#
# This script will write out static versions of all pages
# in all supported languages, starting in the current
# directory.
#
from Globals import *
from HTML import page_factory
from URLParse import URI
import os
import sys
import fpformat
from CoreDM import dms
# TODO: Also pull static versions of a big OMF file.
class StaticWriter:
def __init__(self):
self.total_time = 0
self.page_count = 0
self.average_time = 0
def write_url(self, page, url):
uri = URI(url)
page_html = page_factory.build_page(page, uri)
self.total_time = self.total_time + page_factory.elapsed_time
self.page_count = self.page_count + 1
self.average_time = self.total_time / self.page_count
print 'It took ' + fpformat.fix(page_factory.elapsed_time, 3) + ' to generate ' + url
fh = open(url, 'w')
fh.write(page_html)
fh.close()
def write_site(self):
languages = dms.language.get_by_keys([['supported', '=', 1]])
pages = dms.page.get_all()
collections = dms.collection.get_all()
topics = dms.topic.get_all()
types = dms.type.get_all()
docs = dms.document.get_all()
for lang_key in languages.sort_by('code'):
language = languages[lang_key]
lang_ext = '.' + language.code.lower()
for page_key in pages.sort_by('code'):
page = pages[page_key]
# Do not render pages that require privileges
if page.only_registered==1 or page.only_admin==1 or page.only_sysadmin==1:
continue
# Write index page
if page.code=='index':
url = page.code + lang_ext + '.html'
self.write_url(page, url)
url = page.code + '.html'
self.write_url(page, url)
# Write collection pages
elif page.code=='collection':
if os.access('collection', os.F_OK)==0:
os.mkdir('collection')
for coll_key in collections.keys():
collection = collections[coll_key]
url = 'collection/' + collection.code + lang_ext + '.html'
self.write_url(page, url)
# Write topic pages
elif page.code=='topic':
if os.access('topic', os.F_OK)==0:
os.mkdir('topic')
for topic_key in topics.keys():
topic = topics[topic_key]
url = 'topic/' + topic.code + lang_ext + '.html'
self.write_url(page, url)
# Write type pages
elif page.code=='type':
if os.access('type', os.F_OK)==0:
os.mkdir('type')
for type_key in types.keys():
type = types[type_key]
url = 'type/' + type.code + lang_ext + '.html'
self.write_url(page, url)
# Write document views
elif page.code=='view_document':
if os.access('view_document', os.F_OK)==0:
os.mkdir('view_document')
for doc_key in docs.keys():
doc = docs[doc_key]
url = 'view_document/' + str(doc.id) + lang_ext + '.html'
self.write_url(page, url)
# Do not generate pages that are not listed in menus.
elif page.section_code=='':
continue
else:
url = page.code + lang_ext + '.html'
self.write_url(page, url)
print 'Total: ' + fpformat.fix(self.total_time, 3)
print 'Average: ' + fpformat.fix(self.average_time, 3)
staticwriter = StaticWriter()
def benchmark_run():
staticwriter.write_site()
def benchmark(reps):
for x in range(0, reps):
benchmark_run()
def profile_suite():
import sys
import profile
import pstats
profile_reps = 100
if len(sys.argv[1:]):
for arg in sys.argv[1:]:
profile_reps = int(arg)
print 'Profiling, ' + str(profile_reps) + ' repetitions...'
profile.run('benchmark(' + str(profile_reps) + ')', 'profile_stats')
p = pstats.Stats('profile_stats')
p.sort_stats('time').print_stats(30)
def main():
staticwriter.write_site()
# profile_suite()
state.static = 1
main()