Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
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)
Beispiel #5
0
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 ''
Beispiel #6
0
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 ''
Beispiel #7
0
 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]
Beispiel #8
0
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)
Beispiel #9
0
#!/usr/bin/python
import Gyre
import Config
Gyre.snapshot_main()