Ejemplo n.º 1
0
 def test_repeated_field(self):
     """Repeated field in rio"""
     s = Stanza()
     for k, v in [('a', '10'), ('b', '20'), ('a', '100'), ('b', '200'),
                  ('a', '1000'), ('b', '2000')]:
         s.add(k, v)
     s2 = read_stanza(s.to_lines())
     self.assertEquals(s, s2)
     self.assertEquals(s.get_all('a'), map(str, [10, 100, 1000]))
     self.assertEquals(s.get_all('b'), map(str, [20, 200, 2000]))
Ejemplo n.º 2
0
 def test_repeated_field(self):
     """Repeated field in rio"""
     s = Stanza()
     for k, v in [('a', '10'), ('b', '20'), ('a', '100'), ('b', '200'),
                  ('a', '1000'), ('b', '2000')]:
         s.add(k, v)
     s2 = read_stanza(s.to_lines())
     self.assertEqual(s, s2)
     self.assertEqual(s.get_all('a'), map(str, [10, 100, 1000]))
     self.assertEqual(s.get_all('b'), map(str, [20, 200, 2000]))
Ejemplo n.º 3
0
def _read_stanza_unicode(unicode_iter):
    stanza = Stanza()
    tag = None
    accum_value = None

    # TODO: jam 20060922 This code should raise real errors rather than
    #       using 'assert' to process user input, or raising ValueError
    #       rather than a more specific error.

    for line in unicode_iter:
        if line is None or line == u"":
            break  # end of file
        if line == u"\n":
            break  # end of stanza
        real_l = line
        if line[0] == u"\t":  # continues previous value
            if tag is None:
                raise ValueError("invalid continuation line %r" % real_l)
            accum_value.append(u"\n" + line[1:-1])
        else:  # new tag:value line
            if tag is not None:
                stanza.add(tag, u"".join(accum_value))
            try:
                colon_index = line.index(u": ")
            except ValueError:
                raise ValueError("tag/value separator not found in line %r" % real_l)
            tag = str(line[:colon_index])
            if not _valid_tag(tag):
                raise ValueError("invalid rio tag %r" % (tag,))
            accum_value = [line[colon_index + 2 : -1]]

    if tag is not None:  # add last tag-value
        stanza.add(tag, u"".join(accum_value))
        return stanza
    else:  # didn't see any content
        return None
Ejemplo n.º 4
0
    def generate(self, to_file):
        info = Stanza()
        revision_id = self._get_revision_id()
        if revision_id != NULL_REVISION:
            info.add('revision-id', revision_id)
            rev = self._branch.repository.get_revision(revision_id)
            info.add('date', create_date_str(rev.timestamp, rev.timezone))
            revno = self._get_revno_str(revision_id)
            for hook in RioVersionInfoBuilder.hooks['revision']:
                hook(rev, info)
        else:
            revno = '0'

        info.add('build-date', create_date_str())
        info.add('revno', revno)

        if self._branch.nick is not None:
            info.add('branch-nick', self._branch.nick)

        if self._check or self._include_file_revs:
            self._extract_file_revisions()

        if self._check:
            if self._clean:
                info.add('clean', 'True')
            else:
                info.add('clean', 'False')

        if self._include_history:
            log = Stanza()
            for (revision_id, message,
                 timestamp, timezone) in self._iter_revision_history():
                log.add('id', revision_id)
                log.add('message', message)
                log.add('date', create_date_str(timestamp, timezone))
            info.add('revisions', log.to_unicode())

        if self._include_file_revs:
            files = Stanza()
            for path in sorted(self._file_revisions.keys()):
                files.add('path', path)
                files.add('revision', self._file_revisions[path])
            info.add('file-revisions', files.to_unicode())

        writer = RioWriter(to_file=to_file)
        writer.write_stanza(info)
Ejemplo n.º 5
0
    def generate(self, to_file):
        info = Stanza()
        revision_id = self._get_revision_id()
        if revision_id is not None:
            info.add('revision-id', revision_id)
            rev = self._branch.repository.get_revision(revision_id)
            info.add('date', create_date_str(rev.timestamp, rev.timezone))
            revno = str(self._branch.revision_id_to_revno(revision_id))
        else:
            revno = '0'

        info.add('build-date', create_date_str())
        info.add('revno', revno)

        if self._branch.nick is not None:
            info.add('branch-nick', self._branch.nick)

        if self._check or self._include_file_revs:
            self._extract_file_revisions()

        if self._check:
            if self._clean:
                info.add('clean', 'True')
            else:
                info.add('clean', 'False')

        if self._include_history:
            self._extract_revision_history()
            log = Stanza()
            for (revision_id, message, timestamp,
                 timezone) in self._revision_history_info:
                log.add('id', revision_id)
                log.add('message', message)
                log.add('date', create_date_str(timestamp, timezone))
            info.add('revisions', log.to_unicode())

        if self._include_file_revs:
            files = Stanza()
            for path in sorted(self._file_revisions.keys()):
                files.add('path', path)
                files.add('revision', self._file_revisions[path])
            info.add('file-revisions', files.to_unicode())

        writer = RioWriter(to_file=to_file)
        writer.write_stanza(info)