public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/, bin/, gs_db_tool/
@ 2013-08-29 19:23 Jauhien Piatlicki
  0 siblings, 0 replies; only message in thread
From: Jauhien Piatlicki @ 2013-08-29 19:23 UTC (permalink / raw
  To: gentoo-commits

commit:     3c8db310dcdc763d35b40bceac3381c5ae90790e
Author:     Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
AuthorDate: Thu Aug 29 19:23:07 2013 +0000
Commit:     Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
CommitDate: Thu Aug 29 19:23:07 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=3c8db310

add tools to manipulate package db

---
 bin/gs-db-tool             | 18 +++++++++
 g_sorcery/g_collections.py |  3 ++
 g_sorcery/package_db.py    |  3 ++
 gs_db_tool/__init__.py     |  2 +
 gs_db_tool/gs_db_tool.py   | 93 ++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 119 insertions(+)

diff --git a/bin/gs-db-tool b/bin/gs-db-tool
new file mode 100644
index 0000000..7bd47f4
--- /dev/null
+++ b/bin/gs-db-tool
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+    gs-db-tool
+    ~~~~~~~~~~
+    
+    CLI to manipulate with package DB
+    
+    :copyright: (c) 2013 by Jauhien Piatlicki
+    :license: GPL-2, see LICENSE for more details.
+"""
+
+import sys
+from gs_db_tool import gs_db_tool
+
+if __name__ == "__main__":
+    sys.exit(gs_db_tool.main())

diff --git a/g_sorcery/g_collections.py b/g_sorcery/g_collections.py
index 18258c8..64efaf6 100644
--- a/g_sorcery/g_collections.py
+++ b/g_sorcery/g_collections.py
@@ -91,6 +91,9 @@ class Package(object):
         self.name = package
         self.version = version
 
+    def __str__(self):
+        return self.category + '/' + self.name + '-' + self.version
+
     def serialize(self):
         return [self.category, self.name, self.version]
 

diff --git a/g_sorcery/package_db.py b/g_sorcery/package_db.py
index 12873eb..fac6c9f 100644
--- a/g_sorcery/package_db.py
+++ b/g_sorcery/package_db.py
@@ -235,6 +235,9 @@ class PackageDB(object):
         if os.path.exists(self.directory):
             shutil.rmtree(self.directory)
         self.reset_db()
+        self.write_and_manifest()
+
+    def write_and_manifest(self):
         self.write()
         self.manifest()
 

diff --git a/gs_db_tool/__init__.py b/gs_db_tool/__init__.py
new file mode 100644
index 0000000..cf529d7
--- /dev/null
+++ b/gs_db_tool/__init__.py
@@ -0,0 +1,2 @@
+#!/usr/bin/env python
+

diff --git a/gs_db_tool/gs_db_tool.py b/gs_db_tool/gs_db_tool.py
new file mode 100644
index 0000000..14e4930
--- /dev/null
+++ b/gs_db_tool/gs_db_tool.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+    gs_db_tool.py
+    ~~~~~~~~~~~~~
+    
+    CLI to manipulate with package DB
+    
+    :copyright: (c) 2013 by Jauhien Piatlicki
+    :license: GPL-2, see LICENSE for more details.
+"""
+
+import argparse
+
+from g_sorcery.package_db import PackageDB
+
+def main():
+    parser = \
+            argparse.ArgumentParser(description='Package DB manipulation tool')
+    parser.add_argument('db_dir')
+
+    subparsers = parser.add_subparsers()
+
+    p_ebuild_data = subparsers.add_parser('ebuild_data')
+    p_ebuild_data_subparsers = p_ebuild_data.add_subparsers()
+
+    p_ebuild_data_rename = p_ebuild_data_subparsers.add_parser('add_var')
+    p_ebuild_data_rename.set_defaults(func=add_var)
+    p_ebuild_data_rename.add_argument('name')
+    p_ebuild_data_rename.add_argument('-l', '--lambda_function')
+
+    p_ebuild_data_rename = p_ebuild_data_subparsers.add_parser('rename_var')
+    p_ebuild_data_rename.set_defaults(func=rename_var)
+    p_ebuild_data_rename.add_argument('old_name')
+    p_ebuild_data_rename.add_argument('new_name')
+
+    p_ebuild_data_show_all = p_ebuild_data_subparsers.add_parser('show_all')
+    p_ebuild_data_show_all.set_defaults(func=show_all)
+
+    p_sync = subparsers.add_parser('sync')
+    p_sync.set_defaults(func=sync)
+    p_sync.add_argument('uri')
+
+    args = parser.parse_args()
+    pkg_db = PackageDB(args.db_dir)
+    return args.func(pkg_db, args)
+
+
+def transform_db(function):
+    def transformator(pkg_db, args):
+        pkg_db.read()
+        function(pkg_db, args)
+        pkg_db.write_and_manifest()
+    return transformator
+
+
+@transform_db
+def add_var(pkg_db, args):
+    if args.lambda_function:
+        lmbd = "lambda ebuild_data: " + args.lambda_function
+        f = eval(lmbd)
+        for package, ebuild_data in pkg_db:
+            value = f(ebuild_data)
+            ebuild_data[args.name] = value
+            pkg_db.add_package(package, ebuild_data)
+
+
+def show_all(pkg_db, args):
+    pkg_db.read()
+    for package, ebuild_data in pkg_db:
+        print(package)
+        print('-' * len(str(package)))
+        for key, value in ebuild_data.items():
+            print("    " + key + ": " + repr(value))
+        print("")
+
+
+def sync(pkg_db, args):
+    pkg_db.sync(args.uri)
+
+
+@transform_db
+def rename_var(pkg_db, args):
+    for package, ebuild_data in pkg_db:
+        if args.old_name in ebuild_data:
+            value = ebuild_data.pop(args.old_name)
+            ebuild_data[args.new_name] = value
+        pkg_db.add_package(package, ebuild_data)
+
+
+if __name__ == "__main__":
+    sys.exit(main())


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-08-29 19:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-29 19:23 [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/, bin/, gs_db_tool/ Jauhien Piatlicki

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