コード例 #1
0
ファイル: test_dictionary.py プロジェクト: yvasilev/resql
    def test_make_dictionary (self):
        d = make_object('Empty', {})

        self.assertEqual(d.name, 'Empty')
        self.assertEqual(dict(d.value), {})
        self.assertEqual(d.value, {})

        self.assertEqual(len(d), 0)

        d = make_object('Text', {'Key1': 'Value1', 'Key2': 'Value2'})

        self.assertEqual(d.name, 'Text')
        self.assertEqual(dict(d.value), {'Key1': 'Value1', 'Key2': 'Value2'})
        self.assertEqual(d.value, {'Key1': 'Value1', 'Key2': 'Value2'})

        self.assertEqual(len(d), 2)

        self.assertTrue('Key1' in d)
        self.assertTrue('Key2' in d)
        self.assertFalse('Key3' in d)

        self.assertEqual(d['Key1'], 'Value1')
        self.assertEqual(d['Key2'], 'Value2')
        self.assertRaises(KeyError, d.__getitem__, 'Key3')

        c = make_object('Name', d)

        self.assertEqual(c.name, 'Name')
        self.assertEqual(dict(c.value), {'Key1': u'Value1', 'Key2': u'Value2'})
        self.assertEqual(c.value, {'Key1': 'Value1', 'Key2': 'Value2'})

        self.assertRaises(TypeError, Dictionary, 'Name', 'Value')

        self.assertEqual(len(c), 2)
コード例 #2
0
ファイル: entity.py プロジェクト: yvasilev/resql
    def entity_as_dictionary (self):
        res = make_object(self.meta.name, {})

        for name, data in self:
            res.append(name, make_object(name, data))

        return res
コード例 #3
0
ファイル: test_data_string.py プロジェクト: yvasilev/resql
    def test_eq (self):
        a = make_object('Name', 'Value')

        self.assertEqual(a, u'Value')
        self.assertNotEqual(a, u'Va1ue')

        b = make_object('Name', 'Value')
        c = make_object('Name', 'Va1ue')

        self.assertEqual(a, b)
        self.assertNotEqual(a, c)
コード例 #4
0
ファイル: test_data_string.py プロジェクト: yvasilev/resql
    def test_make_string (self):
        s = make_object('Name', u'Value')

        self.assertTrue(isinstance(s, String))
        self.assertEqual(s.name, 'Name')
        self.assertEqual(s.value, u'Value')

        s = make_object('Name', 'Value')

        self.assertTrue(isinstance(s, String))
        self.assertEqual(s.name, 'Name')
        self.assertEqual(s.value, u'Value')
コード例 #5
0
ファイル: mapping.py プロジェクト: yvasilev/resql
    def prepend (self, key, val, select_new=True):
        if key in self:
            raise KeyError(key)

        obj = make_object(key, val)
        selkey = (select_new or self._pos < 0) and key or self.selected

        if isinstance(obj, Dictionary) and (self.selected and
           not isinstance(self[self.selected], Dictionary)):
            for i in xrange(len(self) - 1, -2, -1):
                if i == -1 or not isinstance(self._values[i], Dictionary):
                    self._values[i + 1:i + 1] = [obj]
                    for j in xrange(i + 1, len(self)):
                        self._keys[self._values[j].name] = j
                    break
        elif not isinstance(obj, Dictionary) and (self.selected and
           isinstance(self[self.selected], Dictionary)):
                self._values[0:0] = [obj]
                for i in xrange(0, len(self)):
                    self._keys[self._values[i].name] = i
        else:
            self._values[self._pos:self._pos] = [obj]

            for i in xrange(self._pos, len(self)):
                self._keys[self._values[i].name] = i

        self._pos = self._keys[selkey]
コード例 #6
0
ファイル: objects.py プロジェクト: yvasilev/resql
    def read(self, fileobj, match=None):
        if not match:
            for line in fileobj:
                if line.strip():
                    match = self.match_re.match(line)
                    if not match or not match.groups():
                        fileobj.seek(-len(line), os.SEEK_CUR)
                    break

        name = match and match.group(1) or ""
        obj = make_object(name, {})

        for line in fileobj:
            if not line.strip():
                continue

            match = self.match_re.match(line)
            if match and match.groups():
                if match.group(1)[: len(name)] != name or len(name) >= len(match.group(1)):
                    # A section, but not a sub-section
                    fileobj.seek(-len(line), os.SEEK_CUR)
                    break

                obj.append(match.group(1), self.read(fileobj, match))
            else:
                fileobj.seek(-len(line), os.SEEK_CUR)
                tobj = read_object(fileobj)
                obj.append(tobj.name, tobj)

        return obj
コード例 #7
0
    def test_read_object_empty_empty (self):
        obj = make_object('', {})
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = read_object(self.fileobj, as_dictionary=True)

        self.assertEqual(obj, nobj)
コード例 #8
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_read_object_multiline (self):
        obj = make_object('Key2', 'MultiLine text\nSecondLine')
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = read_object(self.fileobj)

        self.assertEqual(obj, nobj)
コード例 #9
0
    def test_read_empty_empty (self):
        obj = make_object('', {})
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = DictionaryObject().read(self.fileobj)

        self.assertEqual(obj, nobj)
コード例 #10
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_read_object_multiline_empty (self):
        obj = make_object('Key3', 'MultiLine\n\nw/ empty line')
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = read_object(self.fileobj)

        self.assertEqual(obj, nobj)
コード例 #11
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_read_object_empty (self):
        obj = make_object('Key0', '')
        StringObject().write(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = read_object(self.fileobj)

        self.assertEqual(obj, nobj)
コード例 #12
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_read_object_simple (self):
        obj = make_object('Key1', 'Simple Text')
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = read_object(self.fileobj)

        self.assertEqual(obj, nobj)
コード例 #13
0
    def test_write_key_nested (self):
        obj = make_object('Section', {})
        obj.append('Key1', 'Value1')
        obj.append('SubSection', make_object('SubSection', {}))
        obj.append('Key2', 'Value2')
        DictionaryObject().write(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(),
            '\n[Section]\n\nKey1: Value1\nKey2: Value2\n\n[Section.SubSection]\n\n')

        obj['SubSection'].append('SubKey1', 'SubValue1')
        self.fileobj.truncate(0)
        DictionaryObject().write(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(),
            '\n[Section]\n\nKey1: Value1\nKey2: Value2\n\n[Section.SubSection]\n\n'
            'SubKey1: SubValue1\n')
コード例 #14
0
    def test_read_object_key_empty (self):
        obj = make_object('Section', {})
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = read_object(self.fileobj)

        self.assertEqual(obj, nobj)
コード例 #15
0
    def test_write_key_strings_simple (self):
        obj = make_object('Section', {})
        obj.append('Key1', 'Value1')
        obj.append('Key2', 'Value2')
        obj.append('Key3', 'Value3')
        DictionaryObject().write(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(),
            '\n[Section]\n\nKey1: Value1\nKey2: Value2\nKey3: Value3\n')
コード例 #16
0
    def test_write_object_empty_strings_simple (self):
        obj = make_object('', {})
        obj.append('Key1', 'Value1')
        obj.append('Key2', 'Value2')
        obj.append('Key3', 'Value3')
        write_object(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(),
            '\nKey1: Value1\nKey2: Value2\nKey3: Value3\n')
コード例 #17
0
    def test_read_key_strings_simple (self):
        obj = make_object('Section', {})
        obj.append('Key1', 'Value1')
        obj.append('Key2', 'Value2')
        obj.append('Key3', 'Value3')
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = DictionaryObject().read(self.fileobj)

        self.assertEqual(obj, nobj)
コード例 #18
0
    def test_read_object_empty_strings_simple (self):
        obj = make_object('', {})
        obj.append('Key1', 'Value1')
        obj.append('Key2', 'Value2')
        obj.append('Key3', 'Value3')
        write_object(obj, self.fileobj)
        self.fileobj.seek(0)

        nobj = read_object(self.fileobj, as_dictionary=True)

        self.assertEqual(obj, nobj)
コード例 #19
0
ファイル: test_list.py プロジェクト: yvasilev/resql
    def test_make_list (self):
        l = make_object('Empty', [])

        self.assertEqual(l.name, 'Empty')
        self.assertEqual(list(l.value), [])
        self.assertEqual(l.value, [])

        self.assertEqual(len(l), 0)

        l = make_object('Text', ['Value1', 'Value2'])

        self.assertEqual(l.name, 'Text')
        self.assertEqual(list(l.value), ['Value1', 'Value2'])
        self.assertEqual(l.value, ['Value1', 'Value2'])

        self.assertEqual(len(l), 2)

        self.assertTrue('Value1' in l)
        self.assertTrue('Value2' in l)
        self.assertFalse('Value3' in l)

        self.assertEqual(l[0], 'Value1')
        self.assertEqual(l[1], 'Value2')
        self.assertRaises(IndexError, l.__getitem__, 2)

        c = make_object('Name', l)

        self.assertEqual(c.name, 'Name')
        self.assertEqual(list(c.value), ['Value1', 'Value2'])
        self.assertEqual(c.value, ['Value1', 'Value2'])

        self.assertEqual(len(c), 2)

        self.assertTrue('Value1' in l)
        self.assertTrue('Value2' in l)
        self.assertFalse('Value3' in l)

        self.assertEqual(l[0], 'Value1')
        self.assertEqual(l[1], 'Value2')
        self.assertRaises(IndexError, l.__getitem__, 2)
コード例 #20
0
ファイル: objects.py プロジェクト: yvasilev/resql
    def read(self, fileobj, match=None):
        if not match:
            line = fileobj.readline()
            match = self.match_re.match(line)
            if not match or not match.groups():
                fileobj.seek(-len(line), os.SEEK_CUR)
                raise SyntaxError("'%s'" % line)

        name = match.group(1)
        value = match.group(3)

        cont_re = re.compile(r"^ (\.|.+)$")

        for line in fileobj:
            match = cont_re.match(line)
            if match and match.groups():
                value += match.group(1) == "." and "\n" or ("\n" + match.group(1))
            else:
                fileobj.seek(-len(line), os.SEEK_CUR)
                break

        return make_object(name, value)
コード例 #21
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_write_object_multiline (self):
        obj = make_object('Key2', 'MultiLine text\nSecondLine')
        write_object(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(),
                         'Key2: MultiLine text\n SecondLine\n')
コード例 #22
0
    def test_write_empty_empty (self):
        obj = make_object('', {})
        DictionaryObject().write(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(), '\n')
コード例 #23
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_write_object_simple (self):
        obj = make_object('Key1', 'Simple Text')
        write_object(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(), 'Key1: Simple Text\n')
コード例 #24
0
    def test_write_object_empty_empty (self):
        obj = make_object('', {})
        write_object(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(), '\n')
コード例 #25
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_write_object_empty (self):
        obj = make_object('Key0', '')
        StringObject().write(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(), 'Key0: \n')
コード例 #26
0
ファイル: test_stringobject.py プロジェクト: yvasilev/resql
    def test_write_object_multiline_empty (self):
        obj = make_object('Key3', 'MultiLine\n\nw/ empty line')
        write_object(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(),
                         'Key3: MultiLine\n .\n w/ empty line\n')
コード例 #27
0
    def test_write_object_key_empty (self):
        obj = make_object('Section', {})
        write_object(obj, self.fileobj)

        self.assertEqual(self.fileobj.getvalue(), '\n[Section]\n\n')
コード例 #28
0
ファイル: mapping.py プロジェクト: yvasilev/resql
    def replace (self, key, val, select_new=True):
        self._values[self._keys[key]] = make_object(key, val)

        if select_new:
            self._pos = self._keys[key]