Mercurial > hg > decoupage
comparison decoupage/web.py @ 48:af73a3fda723
add more metadata to files: modification time, type
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Wed, 03 Nov 2010 07:22:39 -0700 |
parents | 8621a6e2fe38 |
children | ac693b8df32c |
comparison
equal
deleted
inserted
replaced
47:0cfb84d788d6 | 48:af73a3fda723 |
---|---|
5 import os | 5 import os |
6 import sys | 6 import sys |
7 | 7 |
8 from contenttransformer.app import FileTypeTransformer | 8 from contenttransformer.app import FileTypeTransformer |
9 from contenttransformer.app import transformers | 9 from contenttransformer.app import transformers |
10 from datetime import datetime | |
10 from formatters import formatters | 11 from formatters import formatters |
11 | |
12 from genshi.builder import Markup | 12 from genshi.builder import Markup |
13 from genshi.template import TemplateLoader | 13 from genshi.template import TemplateLoader |
14 from genshi.template.base import TemplateError | 14 from genshi.template.base import TemplateError |
15 from genshi.template.base import TemplateSyntaxError | 15 from genshi.template.base import TemplateSyntaxError |
16 from martini.config import ConfigMunger | 16 from martini.config import ConfigMunger |
106 | 106 |
107 def get(self, request): | 107 def get(self, request): |
108 """ | 108 """ |
109 return response to a GET requst | 109 return response to a GET requst |
110 """ | 110 """ |
111 | |
111 # ensure a sane path | 112 # ensure a sane path |
112 path = request.path_info.strip('/') | 113 path = request.path_info.strip('/') |
113 directory = os.path.join(self.directory, path) | 114 directory = os.path.join(self.directory, path) |
114 path = '/%s' % path | 115 path = '/%s' % path |
115 | 116 |
119 ### build data dictionary | 120 ### build data dictionary |
120 files = self.filedata(path, directory, conf) | 121 files = self.filedata(path, directory, conf) |
121 data = {'path': path, 'files': files, 'request': request } | 122 data = {'path': path, 'files': files, 'request': request } |
122 | 123 |
123 # defaults; TODO: make this better | 124 # defaults; TODO: make this better |
125 # there shouldn't need to be defaults; | |
126 # iirc, genshi has a mode where these will default to None | |
124 data['title'] = conf.get('/title') | 127 data['title'] = conf.get('/title') |
125 data['directory'] = directory | 128 data['directory'] = directory |
126 data['include'] = None | 129 data['include'] = None |
127 data['css'] = () | 130 data['css'] = () |
128 data['scripts'] = () | 131 data['scripts'] = () |
163 for directory in self.template_directories: | 166 for directory in self.template_directories: |
164 if template in os.listdir(directory): | 167 if template in os.listdir(directory): |
165 break | 168 break |
166 else: | 169 else: |
167 raise IOError("template %s not found" % template) | 170 raise IOError("template %s not found" % template) |
168 | |
169 try: | 171 try: |
170 template = self.loader.load(template) | 172 template = self.loader.load(template) |
171 res = template.generate(**data).render('html', doctype='html') | 173 res = template.generate(**data).render('html', doctype='html') |
172 except (TemplateError, TemplateSyntaxError), e: | 174 except (TemplateError, TemplateSyntaxError), e: |
173 if local_index: | 175 if local_index: |
174 print repr(e) | 176 print repr(e) |
175 return self.fileserver(local_index) | 177 return self.fileserver(local_index) |
176 raise | 178 raise |
177 | 179 |
180 # return response | |
178 return Response(content_type='text/html', body=res) | 181 return Response(content_type='text/html', body=res) |
179 | 182 |
180 | 183 |
181 ### internal methods | 184 ### internal methods |
182 | 185 |
183 def filedata(self, path, directory, conf): | 186 def filedata(self, path, directory, conf): |
184 files = [] | 187 files = [] |
185 | 188 |
186 # TODO: other items to add | |
187 # type: 'file' or 'directory' | |
188 # last_modified | |
189 # created | |
190 | |
191 for i in os.listdir(directory): | 189 for i in os.listdir(directory): |
190 filepath = os.path.join(directory, i) | |
191 filetype = 'file' | |
192 if os.path.isdir(filepath): | |
193 filetype = 'directory' | |
194 modified = os.path.getmtime(filepath) | |
195 modified = datetime.fromtimestamp(modified) | |
192 files.append({'path' : '%s/%s' % (path.rstrip('/'), i), | 196 files.append({'path' : '%s/%s' % (path.rstrip('/'), i), |
193 'name': i, | 197 'name': i, |
194 'description': conf.get(i.lower(), None)}) | 198 'modified': modified, |
199 'description': conf.get(i.lower(), None), | |
200 'type': filetype}) | |
195 | 201 |
196 # TODO: deal with other links in conf | 202 # TODO: deal with other links in conf |
197 | 203 |
198 return files | 204 return files |
199 | 205 |