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 |