public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
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):


             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