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

Annotation of /website/trunk/updatepages.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 665 - (hide annotations)
Tue Apr 11 14:00:50 2006 UTC (18 years, 10 months ago) by torsten
File MIME type: text/x-python
File size: 8177 byte(s)
Added first version of the new updatepages.py script. It is now
adopted to the new repository layout and should be much more
userfriendly.

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

Properties

Name Value
svn:executable *

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26