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()) |