Gentoo Archives: gentoo-commits

From: Jauhien Piatlicki <piatlicki@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/, bin/, gs_db_tool/
Date: Thu, 29 Aug 2013 19:23:34
Message-Id: 1377804187.3c8db310dcdc763d35b40bceac3381c5ae90790e.jauhien@gentoo
1 commit: 3c8db310dcdc763d35b40bceac3381c5ae90790e
2 Author: Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
3 AuthorDate: Thu Aug 29 19:23:07 2013 +0000
4 Commit: Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
5 CommitDate: Thu Aug 29 19:23:07 2013 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=3c8db310
7
8 add tools to manipulate package db
9
10 ---
11 bin/gs-db-tool | 18 +++++++++
12 g_sorcery/g_collections.py | 3 ++
13 g_sorcery/package_db.py | 3 ++
14 gs_db_tool/__init__.py | 2 +
15 gs_db_tool/gs_db_tool.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++
16 5 files changed, 119 insertions(+)
17
18 diff --git a/bin/gs-db-tool b/bin/gs-db-tool
19 new file mode 100644
20 index 0000000..7bd47f4
21 --- /dev/null
22 +++ b/bin/gs-db-tool
23 @@ -0,0 +1,18 @@
24 +#!/usr/bin/env python
25 +# -*- coding: utf-8 -*-
26 +
27 +"""
28 + gs-db-tool
29 + ~~~~~~~~~~
30 +
31 + CLI to manipulate with package DB
32 +
33 + :copyright: (c) 2013 by Jauhien Piatlicki
34 + :license: GPL-2, see LICENSE for more details.
35 +"""
36 +
37 +import sys
38 +from gs_db_tool import gs_db_tool
39 +
40 +if __name__ == "__main__":
41 + sys.exit(gs_db_tool.main())
42
43 diff --git a/g_sorcery/g_collections.py b/g_sorcery/g_collections.py
44 index 18258c8..64efaf6 100644
45 --- a/g_sorcery/g_collections.py
46 +++ b/g_sorcery/g_collections.py
47 @@ -91,6 +91,9 @@ class Package(object):
48 self.name = package
49 self.version = version
50
51 + def __str__(self):
52 + return self.category + '/' + self.name + '-' + self.version
53 +
54 def serialize(self):
55 return [self.category, self.name, self.version]
56
57
58 diff --git a/g_sorcery/package_db.py b/g_sorcery/package_db.py
59 index 12873eb..fac6c9f 100644
60 --- a/g_sorcery/package_db.py
61 +++ b/g_sorcery/package_db.py
62 @@ -235,6 +235,9 @@ class PackageDB(object):
63 if os.path.exists(self.directory):
64 shutil.rmtree(self.directory)
65 self.reset_db()
66 + self.write_and_manifest()
67 +
68 + def write_and_manifest(self):
69 self.write()
70 self.manifest()
71
72
73 diff --git a/gs_db_tool/__init__.py b/gs_db_tool/__init__.py
74 new file mode 100644
75 index 0000000..cf529d7
76 --- /dev/null
77 +++ b/gs_db_tool/__init__.py
78 @@ -0,0 +1,2 @@
79 +#!/usr/bin/env python
80 +
81
82 diff --git a/gs_db_tool/gs_db_tool.py b/gs_db_tool/gs_db_tool.py
83 new file mode 100644
84 index 0000000..14e4930
85 --- /dev/null
86 +++ b/gs_db_tool/gs_db_tool.py
87 @@ -0,0 +1,93 @@
88 +#!/usr/bin/env python
89 +# -*- coding: utf-8 -*-
90 +
91 +"""
92 + gs_db_tool.py
93 + ~~~~~~~~~~~~~
94 +
95 + CLI to manipulate with package DB
96 +
97 + :copyright: (c) 2013 by Jauhien Piatlicki
98 + :license: GPL-2, see LICENSE for more details.
99 +"""
100 +
101 +import argparse
102 +
103 +from g_sorcery.package_db import PackageDB
104 +
105 +def main():
106 + parser = \
107 + argparse.ArgumentParser(description='Package DB manipulation tool')
108 + parser.add_argument('db_dir')
109 +
110 + subparsers = parser.add_subparsers()
111 +
112 + p_ebuild_data = subparsers.add_parser('ebuild_data')
113 + p_ebuild_data_subparsers = p_ebuild_data.add_subparsers()
114 +
115 + p_ebuild_data_rename = p_ebuild_data_subparsers.add_parser('add_var')
116 + p_ebuild_data_rename.set_defaults(func=add_var)
117 + p_ebuild_data_rename.add_argument('name')
118 + p_ebuild_data_rename.add_argument('-l', '--lambda_function')
119 +
120 + p_ebuild_data_rename = p_ebuild_data_subparsers.add_parser('rename_var')
121 + p_ebuild_data_rename.set_defaults(func=rename_var)
122 + p_ebuild_data_rename.add_argument('old_name')
123 + p_ebuild_data_rename.add_argument('new_name')
124 +
125 + p_ebuild_data_show_all = p_ebuild_data_subparsers.add_parser('show_all')
126 + p_ebuild_data_show_all.set_defaults(func=show_all)
127 +
128 + p_sync = subparsers.add_parser('sync')
129 + p_sync.set_defaults(func=sync)
130 + p_sync.add_argument('uri')
131 +
132 + args = parser.parse_args()
133 + pkg_db = PackageDB(args.db_dir)
134 + return args.func(pkg_db, args)
135 +
136 +
137 +def transform_db(function):
138 + def transformator(pkg_db, args):
139 + pkg_db.read()
140 + function(pkg_db, args)
141 + pkg_db.write_and_manifest()
142 + return transformator
143 +
144 +
145 +@transform_db
146 +def add_var(pkg_db, args):
147 + if args.lambda_function:
148 + lmbd = "lambda ebuild_data: " + args.lambda_function
149 + f = eval(lmbd)
150 + for package, ebuild_data in pkg_db:
151 + value = f(ebuild_data)
152 + ebuild_data[args.name] = value
153 + pkg_db.add_package(package, ebuild_data)
154 +
155 +
156 +def show_all(pkg_db, args):
157 + pkg_db.read()
158 + for package, ebuild_data in pkg_db:
159 + print(package)
160 + print('-' * len(str(package)))
161 + for key, value in ebuild_data.items():
162 + print(" " + key + ": " + repr(value))
163 + print("")
164 +
165 +
166 +def sync(pkg_db, args):
167 + pkg_db.sync(args.uri)
168 +
169 +
170 +@transform_db
171 +def rename_var(pkg_db, args):
172 + for package, ebuild_data in pkg_db:
173 + if args.old_name in ebuild_data:
174 + value = ebuild_data.pop(args.old_name)
175 + ebuild_data[args.new_name] = value
176 + pkg_db.add_package(package, ebuild_data)
177 +
178 +
179 +if __name__ == "__main__":
180 + sys.exit(main())