public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/g-sorcery:master commit in: g_elpa/, tests/
@ 2013-07-02  8:39 Jauhien Piatlicki
  0 siblings, 0 replies; 3+ messages in thread
From: Jauhien Piatlicki @ 2013-07-02  8:39 UTC (permalink / raw
  To: gentoo-commits

commit:     d4797acf20d73a5564e9eae78c9804e89f49ca2b
Author:     Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
AuthorDate: Tue Jul  2 08:40:34 2013 +0000
Commit:     Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
CommitDate: Tue Jul  2 08:40:34 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=d4797acf

g_elpa/elpa_db: initial commit

---
 g_elpa/elpa_db.py     | 35 +++++++++++++++++++++++++++++++++++
 tests/test_elpa_db.py | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)

diff --git a/g_elpa/elpa_db.py b/g_elpa/elpa_db.py
new file mode 100644
index 0000000..e25ac60
--- /dev/null
+++ b/g_elpa/elpa_db.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+    elpa_db.py
+    ~~~~~~~~~~
+    
+    ELPA package database
+    
+    :copyright: (c) 2013 by Jauhien Piatlicki
+    :license: GPL-2, see LICENSE for more details.
+"""
+
+import os, tempfile, urllib.parse
+
+from g_sorcery.package_db import PackageDB
+from g_sorcery.fileutils import wget
+
+class ElpaDB(PackageDB):
+    def __init__(self, directory, repo_uri="", db_uri=""):
+        super().__init__(directory, repo_uri, db_uri)
+
+    def generate_tree(self):
+        tempdir = tempfile.TemporaryDirectory()
+        
+        ac_uri = urllib.parse.urljoin(self.repo_uri, 'archive-contents')
+        wget(ac_uri, tempdir.name)
+
+        os.system('ls -l ' + tempdir.name)
+        os.system('less ' + tempdir.name + '/archive-contents')
+        
+        del tempdir
+
+    def get_parser(self):
+        pass

diff --git a/tests/test_elpa_db.py b/tests/test_elpa_db.py
new file mode 100644
index 0000000..dfbe34a
--- /dev/null
+++ b/tests/test_elpa_db.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+    test_elpa_db.py
+    ~~~~~~~~~~~~~~~
+    
+    ELPA package database test suite
+    
+    :copyright: (c) 2013 by Jauhien Piatlicki
+    :license: GPL-2, see LICENSE for more details.
+"""
+
+import http.server, tempfile, threading, unittest
+
+from g_elpa import elpa_db
+
+class TestElpaDB(unittest.TestCase):
+    def setUp(self):
+        self.tempdir = tempfile.TemporaryDirectory()
+
+    def tearDown(self):
+        del self.tempdir
+
+    def test_generate(self):
+        edb = elpa_db.ElpaDB(self.tempdir.name, repo_uri = 'http://elpa.gnu.org/packages/')
+        edb.generate_tree()
+
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(TestElpaDB('test_generate'))
+    return suite


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [gentoo-commits] proj/g-sorcery:master commit in: g_elpa/, tests/
@ 2013-07-02 11:29 Jauhien Piatlicki
  0 siblings, 0 replies; 3+ messages in thread
From: Jauhien Piatlicki @ 2013-07-02 11:29 UTC (permalink / raw
  To: gentoo-commits

commit:     127764e5bca1197fa6e4fabcf0b63990ee964126
Author:     Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
AuthorDate: Tue Jul  2 11:30:58 2013 +0000
Commit:     Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
CommitDate: Tue Jul  2 11:30:58 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=127764e5

g_elpa/elpa_db: generate_tree

---
 g_elpa/elpa_db.py     | 46 ++++++++++++++++++++----
 tests/test_elpa_db.py | 99 +++++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 135 insertions(+), 10 deletions(-)

diff --git a/g_elpa/elpa_db.py b/g_elpa/elpa_db.py
index e25ac60..f4d838d 100644
--- a/g_elpa/elpa_db.py
+++ b/g_elpa/elpa_db.py
@@ -13,8 +13,11 @@
 
 import os, tempfile, urllib.parse
 
-from g_sorcery.package_db import PackageDB
+import sexpdata
+
+from g_sorcery.package_db import Package, PackageDB
 from g_sorcery.fileutils import wget
+from g_sorcery.exceptions import SyncError
 
 class ElpaDB(PackageDB):
     def __init__(self, directory, repo_uri="", db_uri=""):
@@ -24,12 +27,41 @@ class ElpaDB(PackageDB):
         tempdir = tempfile.TemporaryDirectory()
         
         ac_uri = urllib.parse.urljoin(self.repo_uri, 'archive-contents')
-        wget(ac_uri, tempdir.name)
+        if wget(ac_uri, tempdir.name):
+            raise SyncError('sync failed: ' + self.repo_uri)
+
+        try:
+            with open(os.path.join(tempdir.name, 'archive-contents')) as f:
+                archive_contents = sexpdata.load(f)
+        except Exception as e:
+            raise SyncError('sync failed: ' + self.repo_uri + ': ' + str(e))
 
-        os.system('ls -l ' + tempdir.name)
-        os.system('less ' + tempdir.name + '/archive-contents')
-        
         del tempdir
+        
+        if sexpdata.car(archive_contents) != 1:
+            raise SyncError('sync failed: ' + self.repo_uri + ' bad archive contents format')
 
-    def get_parser(self):
-        pass
+        for entry in sexpdata.cdr(archive_contents):
+            desc = entry[2].value()
+            pkg = self._s_get_package(entry[0], desc[0])
+            source_type = desc[3].value()
+            description = desc[2]
+            deps = desc[1]
+            dependencies = []
+            for dep in deps:
+                dep_pkg = self._s_get_package(dep[0], dep[1])
+                dependencies.append(dep_pkg)
+                
+            properties = {'source_type' : source_type,
+                          'description' : description,
+                          'depend' : dependencies,
+                          'rdepend' : dependencies,
+                          }
+            self.add_category('app-emacs')
+            self.add_package(pkg, properties)
+            
+    
+    def _s_get_package(self, name, version):
+        category = 'app-emacs'
+        version = '.'.join(map(str, version))
+        return Package(category, name.value(), version)

diff --git a/tests/test_elpa_db.py b/tests/test_elpa_db.py
index dfbe34a..97ce4e2 100644
--- a/tests/test_elpa_db.py
+++ b/tests/test_elpa_db.py
@@ -11,10 +11,14 @@
     :license: GPL-2, see LICENSE for more details.
 """
 
-import http.server, tempfile, threading, unittest
+import http.server, os, tempfile, threading, unittest
 
 from g_elpa import elpa_db
 
+from g_sorcery import exceptions, package_db
+
+from tests.server import Server
+
 class TestElpaDB(unittest.TestCase):
     def setUp(self):
         self.tempdir = tempfile.TemporaryDirectory()
@@ -23,8 +27,97 @@ class TestElpaDB(unittest.TestCase):
         del self.tempdir
 
     def test_generate(self):
-        edb = elpa_db.ElpaDB(self.tempdir.name, repo_uri = 'http://elpa.gnu.org/packages/')
-        edb.generate_tree()
+        prev = os.getcwd()
+        os.chdir(self.tempdir.name)
+        edb = elpa_db.ElpaDB(os.path.join(self.tempdir.name, 'db'),
+                             repo_uri = 'http://127.0.0.1:8080')
+        self.assertRaises(exceptions.SyncError, edb.generate)
+
+        packages = [['ack', [1, 2],
+                     "Interface to ack-like source code search tools",
+                     "tar",
+                     []
+                     ],
+                    ['dict-tree', [0, 12, 8],
+                     "Dictionary data structure",
+                     "tar",
+                     [['trie', [0, 2, 5]],
+                      ['tNFA', [0, 1, 1]],
+                      ['heap', [0, 3]]]
+                     ],
+                    ['tNFA', [0, 1, 1],
+                     "Tagged non-deterministic finite-state automata",
+                     "single",
+                     [['queue', [0, 1]]]
+                     ],
+                    ['trie', [0, 2, 6],
+                     "Trie data structure",
+                     "single",
+                     [['tNFA', [0, 1, 1]],
+                      ['queue', [0, 1]]]
+                     ],
+                    ['heap', [0, 3],
+                     "Heap (a.k.a. priority queue) data structure",
+                     "single",
+                     []
+                     ],
+                    ['queue', [0, 1],
+                     "Queue data structure",
+                     "single",
+                     []
+                     ]
+                    ]
+        
+        archive_contents = "(1"
+        for pkg in packages:
+            archive_contents += "\n(" + pkg[0] + ' . [('
+            for v in pkg[1]:
+                archive_contents += ' ' + str(v)
+            archive_contents += ')\n'
+            if pkg[4]:
+                archive_contents += '('
+                for p in pkg[4]:
+                    archive_contents += '(' + p[0] + ' ('
+                    for v in p[1]:
+                        archive_contents += ' ' + str(v)
+                    archive_contents += '))\n'
+                archive_contents += ')'
+            else:
+                archive_contents += 'nil'
+            archive_contents += '\n "' + pkg[2] + '" ' + pkg[3] + '])' 
+        archive_contents += ')'
+
+        with open(os.path.join(self.tempdir.name, 'archive-contents'), 'w') as f:
+            f.write(archive_contents)
+        
+        server = Server()
+        server.start()
+        
+        edb.generate()
+
+        for pkg in packages:
+            package = package_db.Package('app-emacs',
+                                         pkg[0],
+                                         '.'.join(map(str, pkg[1])))
+            description = edb.get_package_description(package)
+            self.assertEqual(description['source_type'], pkg[3])
+            self.assertEqual(description['description'], pkg[2])
+            deps = []
+            for d in pkg[4]:
+                deps.append(package_db.Package('app-emacs',
+                                               d[0],
+                                               '.'.join(map(str, d[1]))))
+            
+            for ds in (description['depend'], description['rdepend']):
+                for d in ds:
+                    self.assertTrue(d in deps)
+                for d in deps:
+                    self.assertTrue(d in ds)
+
+        server.shutdown()
+        server.join()
+        
+        os.chdir(prev)
 
 def suite():
     suite = unittest.TestSuite()


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [gentoo-commits] proj/g-sorcery:master commit in: g_elpa/, tests/
@ 2013-07-02 14:48 Jauhien Piatlicki
  0 siblings, 0 replies; 3+ messages in thread
From: Jauhien Piatlicki @ 2013-07-02 14:48 UTC (permalink / raw
  To: gentoo-commits

commit:     1c6004894b1ecd4397791f09f5b9c0d4d7138809
Author:     Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
AuthorDate: Tue Jul  2 14:50:11 2013 +0000
Commit:     Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
CommitDate: Tue Jul  2 14:50:11 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=1c600489

py2k: urljoin

---
 g_elpa/elpa_db.py     | 11 ++++++++---
 tests/test_elpa_db.py |  2 +-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/g_elpa/elpa_db.py b/g_elpa/elpa_db.py
index 87e7095..51294ea 100644
--- a/g_elpa/elpa_db.py
+++ b/g_elpa/elpa_db.py
@@ -11,11 +11,16 @@
     :license: GPL-2, see LICENSE for more details.
 """
 
-import os, tempfile, urllib.parse
+import os
 
 import sexpdata
 
-from g_sorcery.compatibility import TemporaryDirectory
+from g_sorcery.compatibility import py2k, TemporaryDirectory
+
+if py2k:
+    from urlparse import urljoin
+else:
+    from urllib.parse import urljoin
 
 from g_sorcery.package_db import Package, PackageDB
 from g_sorcery.fileutils import wget
@@ -28,7 +33,7 @@ class ElpaDB(PackageDB):
     def generate_tree(self):
         tempdir = TemporaryDirectory()
         
-        ac_uri = urllib.parse.urljoin(self.repo_uri, 'archive-contents')
+        ac_uri = urljoin(self.repo_uri, 'archive-contents')
         if wget(ac_uri, tempdir.name):
             raise SyncError('sync failed: ' + self.repo_uri)
 

diff --git a/tests/test_elpa_db.py b/tests/test_elpa_db.py
index 874ee96..1ba99c7 100644
--- a/tests/test_elpa_db.py
+++ b/tests/test_elpa_db.py
@@ -11,7 +11,7 @@
     :license: GPL-2, see LICENSE for more details.
 """
 
-import http.server, os, tempfile, threading, unittest
+import os, unittest
 
 from g_elpa import elpa_db
 


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-07-02 14:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-02 11:29 [gentoo-commits] proj/g-sorcery:master commit in: g_elpa/, tests/ Jauhien Piatlicki
  -- strict thread matches above, loose matches on Subject: below --
2013-07-02 14:48 Jauhien Piatlicki
2013-07-02  8:39 Jauhien Piatlicki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox