* [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