/[skencil]/website/trunk/updatepages.py
ViewVC logotype

Annotation of /website/trunk/updatepages.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 672 - (hide annotations)
Tue Apr 11 17:38:28 2006 UTC (18 years, 10 months ago) by bernhard
File MIME type: text/x-python
File size: 8314 byte(s)
updatepages.py(doit): fixed that the generation of pages used the right subdir.

1 torsten 665 #!/usr/bin/env python
2    
3     # updatepages.py - Simple web site templating system
4 torsten 670 # Copyright (C) 2006 Torsten Irlaender
5 torsten 665 # Copyright (C) 2004 Joonas Paalasmaa
6    
7 torsten 666 # This script is based on a script developed by Joonas Paalasmaa
8     # written in 2004.
9    
10 torsten 665 # This program is free software; you can redistribute it and/or modify
11     # it under the terms of the GNU General Public License as published by
12     # the Free Software Foundation; either version 2 of the License, or
13     # (at your option) any later version.
14    
15     # This program is distributed in the hope that it will be useful,
16     # but WITHOUT ANY WARRANTY; without even the implied warranty of
17     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18     # GNU General Public License for more details.
19    
20     # You should have received a copy of the GNU General Public License
21     # along with this program; if not, write to the Free Software
22     # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23    
24     """\n
25     Generate Skencil website from templates into a given directory. If no
26     directory is set, a directory "skencil-webiste" will be created in
27     this directory.
28    
29     On default only changed sites will be generated but you can force to
30     generate all pages by providing -f option.
31    
32     Usage: updatepages.py [Option] target
33    
34     Possible targets are
35    
36     all - generate all
37     pages - generate website and images
38     gallery - generate the gallery
39     screenshots - generate screenshots
40    
41     Options:
42     -h / --help Print this message and exit.
43    
44     -f force generation of all pages
45    
46     -d dir
47     --dest-dir=dir
48     skencil website will be generated in this directory
49    
50     --gen-gallery
51     you may want to generate the gallery files.
52    
53     --gen-screenshots
54     you may want to generate the screenshot files.
55    
56     """
57    
58     __version__="$Revison:$"[9:-1]
59    
60    
61     import glob, os, time, string, getopt, sys, shutil, re
62    
63     templatefile = "pages/template.xhtml"
64     includeformat = "<!--%s-->"
65     destdir = "skencil-website"
66    
67     globaldata = {
68     "fileinfo":
69     "<!-- This file was generated by updatepages.py. Please don't modify. -->",
70     "download root":
71     "http://wald.intevation.de/projects/skecil"}
72    
73     def main():
74     global destdir
75    
76     try:
77 torsten 670 opts, args = getopt.getopt(sys.argv[1:], "fhd:",
78     ["force","dest-dir","gen-screenshots","gen-gallery","help"])
79 torsten 665 except getopt.GetoptError:
80     sys.exit(2)
81    
82     force = False
83     gen_gallery = False
84     gen_screenshots = False
85    
86     for o, a in opts:
87 torsten 670 if o in ("-h", "--help"):
88     usage(1)
89 torsten 665 if o in ("-f", "--force"):
90     force = True
91     if o in ("-d", "--dest-dir"):
92     destdir = a
93     if o == "--gen-gallery":
94     gen_gallery = True
95     if o == "--gen-screenshots":
96     gen_screenshots = True
97 torsten 670
98     if len (args) < 1:
99     usage(1)
100    
101 torsten 665 doit(force,gen_gallery,gen_screenshots,args)
102    
103    
104     def usage(code, msg=''):
105     print >> sys.stderr, __doc__
106     if msg:
107     print >> sys.stderr, msg
108     sys.exit(code)
109    
110     def newer(filename1, filename2):
111     """Check if filename1 was modified after filename2."""
112     if not os.path.isfile(filename2):
113     return True
114     return ( os.path.getmtime(filename1) > os.path.getmtime(filename2) )
115    
116     def parseheader(header):
117     d = {}
118     for line in header.split("\n"):
119     name, value = line.split(": ")
120     d[name] = value
121    
122     return d
123    
124     def doit(force=False,gen_gallery=False,gen_screenshots=False,args=[]):
125    
126     print "\n"
127     print "###########################################"
128     print "# Generation #"
129     print "###########################################\n"
130     print "Webpages will be generated now.\n"
131    
132     genpages_flag = False
133     genscreens_flag = False
134     gengallery_flag = False
135    
136     for target in args:
137     if target == "all":
138     genpages_flag = True
139     genscreens_flag = True
140     gengallery_flag= True
141     if target == "pages":
142     genpages_flag = True
143     if target == "screenshots":
144     genscreens_flag = True
145     if target == "gallery":
146     gengallery_flag = True
147    
148     #generate pages
149     if genpages_flag:
150 bernhard 672 if os.path.isdir("pages"):
151 torsten 670 print("Generating html files... "),
152     genpages(force)
153     print("Done.")
154     #copy common file (.css,license...)
155     copycommon()
156     else:
157     print("No pages directory found. Nothing to be done")
158 torsten 665
159     #copy screenshots
160     if genscreens_flag:
161     if os.path.isdir("screenshots"):
162     print("Copying screenshots... "),
163     genscreenshots(force,gen_screenshots)
164     print("Done.")
165     else:
166     print("No screenshot directory found. Nothing to be done.")
167    
168     #copy gallery
169     if gengallery_flag:
170     if os.path.isdir("gallery"):
171     print("Generating gallery... "),
172     gengallery(force,gen_gallery)
173     print("Done.")
174     else:
175     print("No gallery directory found. Nothing to be done.")
176    
177     print("All files generated. You can now rsync them to the server")
178    
179     def copycommon():
180     common_files = ("pages/LGPL","pages/skencil.css")
181     for file in common_files:
182     shutil.copy(file,destdir)
183    
184     def genpages(force):
185 torsten 670 template = file(templatefile).read()
186 torsten 665 faq_xml = 'pages/faq/faq.xml'
187     #generate faq
188     faq_html = os.path.join('pages/','faq.html')
189     if newer(faq_xml,faq_html):
190     os.chdir('pages/faq')
191     output = os.popen('python faqdom.py -x faq.xml ../faq.html')
192     os.chdir('../../')
193    
194     #create destination dir
195     if not os.path.isdir(destdir):
196     os.mkdir(destdir)
197    
198     #generate files
199     pagefiles = glob.glob("pages/*.html")
200     for pagefile in pagefiles:
201     destfile = os.path.splitext(os.path.split(pagefile)[-1])[0]+".html"
202     destpath = os.path.join(destdir, destfile)
203    
204     if newer(templatefile, destpath) or newer(pagefile, destpath) or force:
205    
206     header, body = file(pagefile).read().split("\n\n", 1)
207     metadata = parseheader(header)
208     pagedata = {}
209     pagedata["body text"] = body
210     pagedata["last updated"] = time.ctime(os.path.getmtime(pagefile))
211     pagedata.update(globaldata)
212     pagedata.update(metadata)
213    
214     page = template
215     for type, value in pagedata.items():
216     page = page.replace(includeformat % type, value)
217    
218     file(destpath, "w").write(page)
219     #print destpath
220    
221     #copy images
222     images = glob.glob("pages/images/*")
223     destpath = os.path.join(destdir,"images/")
224     if not os.path.isdir(destpath):
225     os.mkdir(destpath)
226    
227     for image in images:
228     destpath_ = os.path.join(destpath,image)
229     if newer(image,destpath_) or force:
230     shutil.copy(image,destpath)
231    
232     def genscreenshots(force,gen_screenshots):
233     """Copy screenshot to the dest directory"""
234     destpath = os.path.join(destdir, "screenshots/")
235     screenshots = glob.glob("screenshots/*")
236     if not os.path.isdir(destpath):
237     os.mkdir(destpath)
238    
239     for picture in screenshots:
240     destpath_ = os.path.join(destpath,picture)
241     if newer(picture,destpath_) or force:
242     shutil.copy(picture,destpath)
243    
244    
245     def gengallery(force,gen_gallery):
246     """Copy gallery files in the dest directory after generating"""
247     #First we need to generate the image files from source
248     if gen_gallery:
249     os.chdir("gallery")
250     os.system("make")
251     os.chdir("..")
252    
253     destpath = os.path.join(destdir, "gallery/")
254    
255     # read all files from gallery directory
256     matchobject = re.compile("^.*\\.[jpg|tar.gz|ppm]")
257     allfiles = os.listdir("gallery/")
258     gallery = filter(matchobject.match, allfiles)
259     if not os.path.isdir(destpath):
260     os.mkdir(destpath)
261    
262     for file in gallery:
263     if not os.path.isdir(file):
264     destpath_ = os.path.join(destpath,file)
265     srcpath = os.path.join("gallery",file)
266     if newer(srcpath,destpath_) or force:
267     #as wen do not want any leave additional files
268     #in the repository we will move instead of copying the
269     #files into destdir.
270     shutil.move(srcpath,destpath)
271    
272     if __name__ == "__main__":
273     main()
274    

Properties

Name Value
svn:executable *

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26