From: "Jauhien Piatlicki" <piatlicki@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/, tests/
Date: Sun, 23 Jun 2013 21:39:01 +0000 (UTC) [thread overview]
Message-ID: <1372023601.b6cf7231ae7425288746e5d28228744288637dbc.jauhien@gentoo> (raw)
commit: b6cf7231ae7425288746e5d28228744288637dbc
Author: Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
AuthorDate: Sun Jun 23 21:40:01 2013 +0000
Commit: Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
CommitDate: Sun Jun 23 21:40:01 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=b6cf7231
g_sorcery/backend
---
g_sorcery/backend.py | 58 ++++++++++++++++++++++++++++++++++++-
g_sorcery/package_db.py | 16 ++++++++--
tests/__init__.py | 2 ++
tests/test_backend.py | 77 +++++++++++++++++++++++++++++++++++++++++++++++++
tests/test_ebuild.py | 7 +++--
5 files changed, 155 insertions(+), 5 deletions(-)
diff --git a/g_sorcery/backend.py b/g_sorcery/backend.py
index 0fb194d..476a8a4 100644
--- a/g_sorcery/backend.py
+++ b/g_sorcery/backend.py
@@ -11,6 +11,62 @@
:license: GPL-2, see LICENSE for more details.
"""
+import glob, os
+
class Backend:
- def __init__(self):
+ def __init__(self, PackageDB, EbuildGenrator, directory,
+ repo_uri="", db_uri="", sync_db=True, eclass_dir=""):
+ self.sync_db = sync_db
+ self.repo_uri = repo_uri
+ self.db_uri = db_uri
+ self.eclass_dir = eclass_dir
+
+ self.directory = directory
+ self.backend_data_dir = os.path.join(directory, '.backend_data')
+ os.makedirs(self.backend_data_dir)
+ self.db = PackageDB(os.path.join(self.backend_data_dir, 'db'),
+ repo_uri = self.repo_uri,
+ db_uri = self.db_uri)
+
+ self.repo_uri = self.db.repo_uri
+ self.db_uri = self.db.db_uri
+
+ self.eg = EbuildGenrator(self.db)
+
+ def sync(self):
+ if self.sync_db and not self.db_uri:
+ Exception("No uri for syncing provided.")
+ if not self.sync_db and not self.repo_uri:
+ Exception("No repo uri provided.")
+ if self.sync_db:
+ self.db.sync()
+ else:
+ self.db.generate()
+
+ def list_ebuilds(self):
+ return self.db.list_all_packages()
+
+ def generate_ebuild(self, package):
+ return self.eg.generate(package)
+
+ def list_eclasses(self):
+ result = []
+ if self.eclass_dir:
+ for f_name in glob.iglob(os.path.join(self.eclass_dir, '*.eclass')):
+ result.append(os.path.basename(f_name)[:-7])
+ return result
+
+ def generate_eclass(self, eclass):
+ if not self.eclass_dir:
+ Exception('No eclass dir')
+ f_name = os.path.join(self.eclass_dir, eclass + '.eclass')
+ if not os.path.isfile(f_name):
+ Exception('No eclass ' + eclass)
+ with open(f_name, 'r') as f:
+ eclass = f.read().split('\n')
+ if eclass[-1] == '':
+ eclass = eclass[:-1]
+ return eclass
+
+ def generate_metadata(self, category, name):
pass
diff --git a/g_sorcery/package_db.py b/g_sorcery/package_db.py
index 48101a2..a85a704 100644
--- a/g_sorcery/package_db.py
+++ b/g_sorcery/package_db.py
@@ -86,9 +86,13 @@ class PackageDB:
uri_f = FileJSON(self.directory, self.URI_NAME, ['repo_uri', 'db_uri'])
uri = uri_f.read()
if not repo_uri:
- self.repo_uri = uri['repo_uri']
+ self.repo_uri = uri['repo_uri']
+ else:
+ self.repo_uri = repo_uri
if not db_uri:
- self.db_uri = uri['db_uri']
+ self.db_uri = uri['db_uri']
+ else:
+ self.db_uri = db_uri
uri['repo_uri'] = self.repo_uri
uri['db_uri'] = self.db_uri
uri_f.write(uri)
@@ -321,6 +325,14 @@ class PackageDB:
raise Exception('No such package: ' + name)
return list(self.db['packages'][category][name])
+ def list_all_packages(self):
+ result = []
+ for category in self.db['packages']:
+ for name in self.db['packages'][category]:
+ for version in self.db['packages'][category][name]:
+ result.append(Package(category, name, version))
+ return result
+
def get_package_description(self, package):
#a possible exception should be catched in the caller
return self.db['packages'][package.category][package.name][package.version]
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..faa18be
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,2 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
diff --git a/tests/test_backend.py b/tests/test_backend.py
new file mode 100644
index 0000000..027f4a8
--- /dev/null
+++ b/tests/test_backend.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+ test_backend.py
+ ~~~~~~~~~~~~~~~
+
+ backend test suite
+
+ :copyright: (c) 2013 by Jauhien Piatlicki
+ :license: GPL-2, see LICENSE for more details.
+"""
+
+import os, tempfile, unittest
+
+from g_sorcery import backend, ebuild, package_db
+
+from tests import test_ebuild
+
+class DummyBackend(backend.Backend):
+ def __init__(self, PackageDB, EbuildGenrator, directory,
+ sync_db=True, eclass_dir=""):
+ super().__init__(PackageDB, EbuildGenrator, directory,
+ sync_db=sync_db, eclass_dir=eclass_dir)
+
+
+class TestBackend(unittest.TestCase):
+
+ def setUp(self):
+ self.tempdir = tempfile.TemporaryDirectory()
+
+ def tearDown(self):
+ del self.tempdir
+
+ def test_list_eclasses(self):
+ backend = DummyBackend(package_db.PackageDB, ebuild.EbuildGenerator,
+ self.tempdir.name, eclass_dir = self.tempdir.name)
+ self.assertEqual(backend.list_eclasses(), [])
+ lst = ['test', 'supertest', 'anothertest']
+ for f_name in lst:
+ with open(os.path.join(self.tempdir.name, f_name + '.eclass'), 'w') as f:
+ f.write("test")
+ self.assertEqual(set(backend.list_eclasses()), set(lst))
+
+ def test_generate_eclass(self):
+ backend = DummyBackend(package_db.PackageDB, ebuild.EbuildGenerator,
+ self.tempdir.name, eclass_dir = self.tempdir.name)
+ eclass = ["testing eclass", "nothing interesting here"]
+ eclass_name = "test"
+ with open(os.path.join(self.tempdir.name, eclass_name + '.eclass'), 'w') as f:
+ for line in eclass:
+ f.write(line + '\n')
+ g_eclass = backend.generate_eclass(eclass_name)
+ self.assertEqual(eclass, g_eclass)
+
+ def test_list_ebuilds(self):
+ backend = DummyBackend(test_ebuild.DummyDB, test_ebuild.DummyEbuildGenerator,
+ self.tempdir.name, eclass_dir = self.tempdir.name, sync_db = False)
+ backend.sync()
+ ebuilds = backend.list_ebuilds()
+ self.assertEqual(set(ebuilds), set([test_ebuild.package, test_ebuild.package2]))
+
+ def test_generate_ebuild(self):
+ backend = DummyBackend(test_ebuild.DummyDB, test_ebuild.DummyEbuildGenerator,
+ self.tempdir.name, eclass_dir = self.tempdir.name, sync_db = False)
+ backend.sync()
+ ebuild = backend.generate_ebuild(test_ebuild.package)
+ self.assertEqual(ebuild, ['test', 'author: jauhien',
+ 'homepage: 127.0.0.1', 'var: $var'])
+
+def suite():
+ suite = unittest.TestSuite()
+ suite.addTest(TestBackend('test_list_eclasses'))
+ suite.addTest(TestBackend('test_generate_eclass'))
+ suite.addTest(TestBackend('test_list_ebuilds'))
+ suite.addTest(TestBackend('test_generate_ebuild'))
+ return suite
diff --git a/tests/test_ebuild.py b/tests/test_ebuild.py
index 03b5d37..52c34f5 100644
--- a/tests/test_ebuild.py
+++ b/tests/test_ebuild.py
@@ -16,15 +16,18 @@ import os, tempfile, unittest
from g_sorcery import ebuild, package_db
package = package_db.Package("app-test", "test", "0.1")
+package2 = package_db.Package("app-test", "tst", "1")
class DummyDB(package_db.PackageDB):
- def __init__(self, directory):
- super().__init__(directory)
+ def __init__(self, directory, repo_uri="", db_uri=""):
+ super().__init__(directory, repo_uri, db_uri)
def generate_tree(self):
self.add_category("app-test")
self.add_package(package,
{"author" : "jauhien", "homepage" : "127.0.0.1"})
+ self.add_package(package2,
+ {"author" : "unknown", "homepage" : "example.com"})
class DummyEbuildGenerator(ebuild.EbuildGenerator):
next reply other threads:[~2013-06-23 21:39 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-23 21:39 Jauhien Piatlicki [this message]
-- strict thread matches above, loose matches on Subject: below --
2015-04-22 7:35 [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/, tests/ Jauhien Piatlicki
2013-07-04 20:24 Jauhien Piatlicki
2013-07-03 22:54 Jauhien Piatlicki
2013-07-02 14:48 Jauhien Piatlicki
2013-07-02 12:25 Jauhien Piatlicki
2013-07-01 20:51 Jauhien Piatlicki
2013-07-01 20:51 Jauhien Piatlicki
2013-07-01 0:05 Jauhien Piatlicki
2013-06-30 23:29 Jauhien Piatlicki
2013-06-30 23:29 Jauhien Piatlicki
2013-06-30 23:29 Jauhien Piatlicki
2013-06-30 19:55 Jauhien Piatlicki
2013-06-29 12:13 Jauhien Piatlicki
2013-06-23 0:44 Jauhien Piatlicki
2013-06-23 0:44 Jauhien Piatlicki
2013-06-23 0:44 Jauhien Piatlicki
2013-06-20 23:21 Jauhien Piatlicki
2013-06-20 23:21 Jauhien Piatlicki
2013-06-20 22:53 Jauhien Piatlicki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1372023601.b6cf7231ae7425288746e5d28228744288637dbc.jauhien@gentoo \
--to=piatlicki@gmail.com \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox