def updateStore(self): patchnames = map(string.strip, os.popen(self.tlapath + ' logs').readlines()) stories = [] for patch in patchnames: p = os.popen(self.tlapath + ' cat-log ' + patch) msg = rfc822.Message(p) full_tla_version = msg['Archive'] + '/' + msg['Revision'] body = p.read().strip() body = cgi.escape(body) body = body.replace('\n\n', '\n\n<p> ') if not body: body = '(no detail message)' story = Gyre.Entity() story.mtime = int( time.mktime( time.strptime(msg['Standard-date'], '%Y-%m-%d %H:%M:%S GMT'))) story.subject = cgi.escape(msg['Summary']) story.body = body story.category = self.category story.id = msg['Revision'] for header in ['Archive', 'Revision', 'Creator']: setattr(story, header.lower(), msg[header]) story.full_tla_version = full_tla_version story.full_tla_version_span = \ '<span class="tla-version">' + full_tla_version + '</span>' stories.append(story) for story in stories: Gyre.config.store.update(story)
def _visit_story(self, dirname, name): filepath = os.path.join(dirname, name + '.' + Gyre.config.file_extension) try: s = os.stat(filepath) except OSError: return story = Gyre.Entity(self._template_headers(dirname)) story.mtime = s.st_mtime (headers, body) = self._load_file(filepath) for (key, val) in headers.items(): setattr(story, key.lower(), val) story.mtime = int(story.mtime) categorystr = dirname[len(self.contentdir) + 1:] if categorystr: story.category = string.split(categorystr, '/') else: story.category = [] story.body = body if not story.id: uid = list(story.category) uid.append(name) story.id = string.join(uid, '/') Gyre.config.store.update(story)
def _visit_story(self, dirname, name): filepath = os.path.join(dirname, name + '.' + Gyre.config.file_extension) try: s = os.stat(filepath) except OSError: return story = Gyre.Entity(Gyre.config.protostory) story.mtime = s.st_mtime f = open(filepath) headers = rfc822.Message(f) for (key, val) in headers.items(): setattr(story, key.lower(), val.decode('utf-8')) body = f.read().decode('utf-8') f.close() story.mtime = int(story.mtime) categorystr = dirname[len(self.contentdir) + 1:] if categorystr: story.category = string.split(categorystr, '/') else: story.category = [] story.body = body uid = list(story.category) uid.append(name) story.id = string.join(uid, '/') Gyre.config.store.update(story)
def pagedRender(flavour, variant, stories, context): stories = list(stories) stories.sort(key=lambda s: Gyre.config.store.getStory(s).mtime, reverse=True) total_count = len(stories) skip = context.skip or 0 num_entries = context.num_entries or 1 prev_skip = skip - num_entries next_skip = skip + num_entries if prev_skip <= 0: prev_skip = 0 if next_skip >= total_count: next_skip = 0 if skip: del stories[:skip] if num_entries: del stories[num_entries:] context.next_skip = next_skip context.prev_skip = prev_skip return Gyre.renderStories(flavour, variant, set(stories), context)
def dateline(story, context): # Keep a running dateline. mtime = time.localtime(story.mtime) this_day = (mtime[0], mtime[1], mtime[2]) if not context.last_day or context.last_day != this_day: context.last_day = this_day return Gyre.renderStory(context.flavour, 'dateline', story, context) else: return ''
def _template_headers(self, uncanonicalized_dirname): dirname = self._canonical_dirname(uncanonicalized_dirname) if dirname not in self.template_headers_cache: filepath = os.path.join(uncanonicalized_dirname, '__template__') if dirname: parent = self._template_headers( os.path.dirname(uncanonicalized_dirname)) else: parent = Gyre.config.protostory try: p = self._load_file(filepath)[0] except IOError: p = {} self.template_headers_cache[dirname] = Gyre.Entity(_parent=parent, _props=p) return self.template_headers_cache[dirname]
def pagedRender(flavour, variant, stories, context): stories = list(stories) stories.sort(key = lambda s: Gyre.config.store.getStory(s).mtime, reverse = True) total_count = len(stories) skip = context.skip or 0 num_entries = context.num_entries or 1 prev_skip = skip - num_entries next_skip = skip + num_entries if prev_skip <= 0: prev_skip = 0 if next_skip >= total_count: next_skip = 0 if skip: del stories[:skip] if num_entries: del stories[num_entries:] context.next_skip = next_skip context.prev_skip = prev_skip return Gyre.renderStories(flavour, variant, set(stories), context)
#!/usr/bin/python import Gyre import Config Gyre.snapshot_main()