Gentoo Archives: gentoo-commits

From: Jauhien Piatlicki <piatlicki@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/, tests/
Date: Mon, 01 Jul 2013 00:05:43
Message-Id: 1372637212.e34a7a1d98b0a3b1ff1a8ea35d1a70134989e555.jauhien@gentoo
1 commit: e34a7a1d98b0a3b1ff1a8ea35d1a70134989e555
2 Author: Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
3 AuthorDate: Mon Jul 1 00:06:52 2013 +0000
4 Commit: Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
5 CommitDate: Mon Jul 1 00:06:52 2013 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=e34a7a1d
7
8 g_sorcery/backend: generate_metadata
9
10 ---
11 g_sorcery/backend.py | 9 +++++++--
12 g_sorcery/package_db.py | 14 ++++++++++++++
13 tests/test_backend.py | 23 +++++++++++++++++++----
14 tests/test_metadata.py | 26 ++++++++++++++------------
15 tests/test_package_db.py | 6 ++++++
16 5 files changed, 60 insertions(+), 18 deletions(-)
17
18 diff --git a/g_sorcery/backend.py b/g_sorcery/backend.py
19 index 476a8a4..f472a85 100644
20 --- a/g_sorcery/backend.py
21 +++ b/g_sorcery/backend.py
22 @@ -13,8 +13,10 @@
23
24 import glob, os
25
26 +from .package_db import Package
27 +
28 class Backend:
29 - def __init__(self, PackageDB, EbuildGenrator, directory,
30 + def __init__(self, PackageDB, EbuildGenrator, MetadataGenerator, directory,
31 repo_uri="", db_uri="", sync_db=True, eclass_dir=""):
32 self.sync_db = sync_db
33 self.repo_uri = repo_uri
34 @@ -32,6 +34,7 @@ class Backend:
35 self.db_uri = self.db.db_uri
36
37 self.eg = EbuildGenrator(self.db)
38 + self.mg = MetadataGenerator(self.db)
39
40 def sync(self):
41 if self.sync_db and not self.db_uri:
42 @@ -69,4 +72,6 @@ class Backend:
43 return eclass
44
45 def generate_metadata(self, category, name):
46 - pass
47 + version = self.db.get_max_version(category, name)
48 + metadata = self.mg.generate(Package(category, name, version))
49 + return metadata
50
51 diff --git a/g_sorcery/package_db.py b/g_sorcery/package_db.py
52 index b4f6193..561129d 100644
53 --- a/g_sorcery/package_db.py
54 +++ b/g_sorcery/package_db.py
55 @@ -14,6 +14,8 @@
56 from .exceptions import DBStructureError, FileJSONError, IntegrityError, \
57 InvalidKeyError, SyncError
58
59 +import portage
60 +
61 import collections, glob, hashlib, json, os, shutil, tarfile, tempfile
62
63 Package = collections.namedtuple("Package", "category name version")
64 @@ -353,3 +355,15 @@ class PackageDB:
65 def get_package_description(self, package):
66 #a possible exception should be catched in the caller
67 return self.db[package.category + '/' + package.name][package.version]
68 +
69 + def get_max_version(self, category, name):
70 + pkgname = category + '/' + name
71 + if not pkgname in self.db:
72 + raise InvalidKeyError('No such package: ' + pkgname)
73 + versions = list(self.db[pkgname])
74 + max_ver = versions[0]
75 + for version in versions[1:]:
76 + if portage.pkgcmp(portage.pkgsplit(pkgname + '-' + version),
77 + portage.pkgsplit(pkgname + '-' + max_ver)) > 0:
78 + max_ver = version
79 + return max_ver
80
81 diff --git a/tests/test_backend.py b/tests/test_backend.py
82 index 027f4a8..65e136d 100644
83 --- a/tests/test_backend.py
84 +++ b/tests/test_backend.py
85 @@ -13,14 +13,14 @@
86
87 import os, tempfile, unittest
88
89 -from g_sorcery import backend, ebuild, package_db
90 +from g_sorcery import backend, ebuild, metadata, package_db
91
92 -from tests import test_ebuild
93 +from tests import test_ebuild, test_metadata
94
95 class DummyBackend(backend.Backend):
96 - def __init__(self, PackageDB, EbuildGenrator, directory,
97 + def __init__(self, PackageDB, EbuildGenrator, MetadataGenerator, directory,
98 sync_db=True, eclass_dir=""):
99 - super().__init__(PackageDB, EbuildGenrator, directory,
100 + super().__init__(PackageDB, EbuildGenrator, MetadataGenerator, directory,
101 sync_db=sync_db, eclass_dir=eclass_dir)
102
103
104 @@ -34,6 +34,7 @@ class TestBackend(unittest.TestCase):
105
106 def test_list_eclasses(self):
107 backend = DummyBackend(package_db.PackageDB, ebuild.EbuildGenerator,
108 + metadata.MetadataGenerator,
109 self.tempdir.name, eclass_dir = self.tempdir.name)
110 self.assertEqual(backend.list_eclasses(), [])
111 lst = ['test', 'supertest', 'anothertest']
112 @@ -44,6 +45,7 @@ class TestBackend(unittest.TestCase):
113
114 def test_generate_eclass(self):
115 backend = DummyBackend(package_db.PackageDB, ebuild.EbuildGenerator,
116 + metadata.MetadataGenerator,
117 self.tempdir.name, eclass_dir = self.tempdir.name)
118 eclass = ["testing eclass", "nothing interesting here"]
119 eclass_name = "test"
120 @@ -55,6 +57,7 @@ class TestBackend(unittest.TestCase):
121
122 def test_list_ebuilds(self):
123 backend = DummyBackend(test_ebuild.DummyDB, test_ebuild.DummyEbuildGenerator,
124 + metadata.MetadataGenerator,
125 self.tempdir.name, eclass_dir = self.tempdir.name, sync_db = False)
126 backend.sync()
127 ebuilds = backend.list_ebuilds()
128 @@ -62,16 +65,28 @@ class TestBackend(unittest.TestCase):
129
130 def test_generate_ebuild(self):
131 backend = DummyBackend(test_ebuild.DummyDB, test_ebuild.DummyEbuildGenerator,
132 + metadata.MetadataGenerator,
133 self.tempdir.name, eclass_dir = self.tempdir.name, sync_db = False)
134 backend.sync()
135 ebuild = backend.generate_ebuild(test_ebuild.package)
136 self.assertEqual(ebuild, ['test', 'author: jauhien',
137 'homepage: 127.0.0.1', 'var: $var'])
138
139 + def test_generate_metadata(self):
140 + backend = DummyBackend(test_metadata.DummyDB, ebuild.EbuildGenerator,
141 + metadata.MetadataGenerator,
142 + self.tempdir.name, eclass_dir = self.tempdir.name, sync_db = False)
143 + backend.sync()
144 + self.assertEqual(backend.generate_metadata("app-test", "test"),
145 + test_metadata.resulting_metadata)
146 +
147 +
148 +
149 def suite():
150 suite = unittest.TestSuite()
151 suite.addTest(TestBackend('test_list_eclasses'))
152 suite.addTest(TestBackend('test_generate_eclass'))
153 suite.addTest(TestBackend('test_list_ebuilds'))
154 suite.addTest(TestBackend('test_generate_ebuild'))
155 + suite.addTest(TestBackend('test_generate_metadata'))
156 return suite
157
158 diff --git a/tests/test_metadata.py b/tests/test_metadata.py
159 index 2398733..9bb1f43 100644
160 --- a/tests/test_metadata.py
161 +++ b/tests/test_metadata.py
162 @@ -87,6 +87,18 @@ description = {'herd' : ['test'],
163 'use' : {'flag' : [('flag1', 'test flag1'), ('flag2', 'test flag2')]},
164 'upstream' : {'maintainer' : [{'name' : 'TEST'}], 'remote-id' : '001'}}
165
166 +resulting_metadata = ['<?xml version="1.0" encoding="utf-8"?>',
167 + '<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">',
168 + '<pkgmetadata>', '\t<herd>test</herd>',
169 + '\t<maintainer>', '\t\t<email>test@×××××××.com</email>',
170 + '\t\t<name>testor</name>', '\t</maintainer>',
171 + '\t<longdescription>test metadata</longdescription>',
172 + '\t<use>', '\t\t<flag name="flag1">test flag1</flag>',
173 + '\t\t<flag name="flag2">test flag2</flag>', '\t</use>',
174 + '\t<upstream>', '\t\t<maintainer>', '\t\t\t<name>TEST</name>',
175 + '\t\t</maintainer>', '\t\t<remote-id>001</remote-id>',
176 + '\t</upstream>', '</pkgmetadata>']
177 +
178 class DummyDB(package_db.PackageDB):
179 def __init__(self, directory, repo_uri="", db_uri=""):
180 super().__init__(directory, repo_uri, db_uri)
181 @@ -116,19 +128,9 @@ class TestMetadataGenerator(unittest.TestCase):
182 db.generate()
183 mg = DummyMetadataGenerator(db)
184 metadata = mg.generate(package)
185 - self.assertEqual(metadata,
186 - ['<?xml version="1.0" encoding="utf-8"?>',
187 - '<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">',
188 - '<pkgmetadata>', '\t<herd>test</herd>',
189 - '\t<maintainer>', '\t\t<email>test@×××××××.com</email>',
190 - '\t\t<name>testor</name>', '\t</maintainer>',
191 - '\t<longdescription>test metadata</longdescription>',
192 - '\t<use>', '\t\t<flag name="flag1">test flag1</flag>',
193 - '\t\t<flag name="flag2">test flag2</flag>', '\t</use>',
194 - '\t<upstream>', '\t\t<maintainer>', '\t\t\t<name>TEST</name>',
195 - '\t\t</maintainer>', '\t\t<remote-id>001</remote-id>',
196 - '\t</upstream>', '</pkgmetadata>'])
197 + self.assertEqual(metadata, resulting_metadata)
198
199 +
200 def suite():
201 suite = unittest.TestSuite()
202 suite.addTest(TestXMLGenerator('test_generate'))
203
204 diff --git a/tests/test_package_db.py b/tests/test_package_db.py
205 index 2b8c482..c5d7074 100644
206 --- a/tests/test_package_db.py
207 +++ b/tests/test_package_db.py
208 @@ -219,6 +219,11 @@ class TestDummyDB(unittest.TestCase):
209 db = DummyDB(os.path.join(self.tempdir.name, 'testdb'), self.packages)
210 self.assertRaises(exceptions.SyncError, db.sync, db_uri='127.0.0.1:8080')
211
212 + def test_get_max_version(self):
213 + db = DummyDB(os.path.join(self.tempdir.name, 'testdb'), self.packages)
214 + db.generate()
215 + self.assertEqual(db.get_max_version('dev-test', 'test'), '0.2')
216 +
217
218 def suite():
219 suite = unittest.TestSuite()
220 @@ -237,4 +242,5 @@ def suite():
221 suite.addTest(TestDummyDB('test_list_package_versions'))
222 suite.addTest(TestDummyDB('test_sync'))
223 suite.addTest(TestDummyDB('test_sync_fail'))
224 + suite.addTest(TestDummyDB('test_get_max_version'))
225 return suite