1
2 '''
3 # DESCRIPTION:
4 # Entropy Object Oriented Interface
5
6 Copyright (C) 2007-2009 Fabio Erculiani
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 '''
22 from __future__ import with_statement
23 from entropy.i18n import _
24
26
27 - def __init__(self, SystemManagerClientInstance):
28 self.Manager = SystemManagerClientInstance
29 self.available_commands = {
30 'get_available_commands': {
31 'desc': _("Get a list of remotely available commands"),
32 'params': [],
33 'call': self.get_available_commands,
34 'private': True,
35 },
36 'get_queue': {
37 'desc': _("Get current queue content"),
38 'params': [
39 ('extended',bool,_('Extended results'),False,)
40 ],
41 'call': self.get_queue,
42 'private': True,
43 },
44 'get_queue_item_by_id': {
45 'desc': _("Get queue item using its queue unique identifier"),
46 'params': [('queue_id',int,_('Queue Identifier'),True,)],
47 'call': self.get_queue_item_by_id,
48 'private': True,
49 },
50 'get_queue_id_stdout': {
51 'desc': _("Get queue stdout/stderr using its queue unique identifier"),
52 'params': [('queue_id',int,_('Queue Identifier'),True,)],
53 'call': self.get_queue_id_stdout,
54 'private': True,
55 },
56 'get_queue_id_stdout': {
57 'desc': _("Get queued command result using its queue unique identifier"),
58 'params': [('queue_id',int,_('Queue Identifier'),True,)],
59 'call': self.get_queue_id_result,
60 'private': True,
61 },
62 'remove_queue_ids': {
63 'desc': _("Remove queued commands using their queue unique identifiers"),
64 'params': [('queue_ids',list,_('Queue Identifiers'),True,)],
65 'call': self.remove_queue_ids,
66 'private': True,
67 },
68 'pause_queue': {
69 'desc': _("Toggle queue pause (True/False)"),
70 'params': [('do_pause',bool,_('Pause or not'),True,)],
71 'call': self.pause_queue,
72 'private': True,
73 },
74 'kill_processing_queue_id': {
75 'desc': _("Kill a running process through its queue id"),
76 'params': [('queue_id',int,_('Queue Identifier'),True,)],
77 'call': self.kill_processing_queue_id,
78 'private': True,
79 },
80 'swap_items_in_queue': {
81 'desc': _("Swap items in queue using their queue ids"),
82 'params': [
83 ('queue_id1',int,_('Queue Identifier'),True,),
84 ('queue_id2',int,_('Queue Identifier'),True,)
85 ],
86 'call': self.swap_items_in_queue,
87 'private': True,
88 },
89 'get_pinboard_data': {
90 'desc': _("Get pinboard content"),
91 'params': [],
92 'call': self.get_pinboard_data,
93 'private': True,
94 },
95 'add_to_pinboard': {
96 'desc': _("Add item to pinboard"),
97 'params': [
98 ('note',basestring,_('Note'),True,),
99 ('extended_text',basestring,_('Extended text'),True,)
100 ],
101 'call': self.add_to_pinboard,
102 'private': True,
103 },
104 'remove_from_pinboard': {
105 'desc': _("Remove item from pinboard"),
106 'params': [('pinboard_ids',list,_('Pinboard identifiers'),True,)],
107 'call': self.remove_from_pinboard,
108 'private': True,
109 },
110 'set_pinboard_items_done': {
111 'desc': _("Set pinboard items status (done/not done)"),
112 'params': [
113 ('pinboard_ids',list,_('Pinboard identifiers'),True,),
114 ('done_status',bool,_('Done status'),True,),
115 ],
116 'call': self.set_pinboard_items_done,
117 'private': True,
118 },
119 'write_to_running_command_pipe': {
120 'desc': _("Write to a remote running command stdin"),
121 'params': [
122 ('queue_id',int,_('Queue Identifier'),True,),
123 ('write_to_stdout',bool,_('Write to stdout?'),True,),
124 ('txt',basestring,_('Text'),True,),
125 ],
126 'call': self.write_to_running_command_pipe,
127 'private': True,
128 },
129 }
130
132 return self.Manager.do_cmd(False, "available_commands", [], {})
133
135 return self.Manager.do_cmd(True, "get_queue", [extended], {})
136
138 return self.Manager.do_cmd(True, "get_queue_item_by_id", [queue_id], {})
139
141 return self.Manager.do_cmd(True, "get_queue_id_stdout", [queue_id, last_bytes], {})
142
144 return self.Manager.do_cmd(True, "get_queue_id_result", [queue_id], {})
145
147 return self.Manager.do_cmd(True, "remove_queue_ids", [queue_ids], {})
148
150 return self.Manager.do_cmd(True, "pause_queue", [do_queue], {})
151
153 return self.Manager.do_cmd(True, "kill_processing_queue_id", [queue_id], {})
154
156 return self.Manager.do_cmd(True, "swap_items_in_queue", [queue_id1,queue_id2], {})
157
159 return self.Manager.do_cmd(True, "get_pinboard_data", [], {})
160
162 return self.Manager.do_cmd(True, "add_to_pinboard", [note,extended_text], {})
163
165 return self.Manager.do_cmd(True, "remove_from_pinboard", [pinboard_ids], {})
166
168 return self.Manager.do_cmd(True, "set_pinboard_items_done", [pinboard_ids,done_status], {})
169
171 return self.Manager.do_cmd(True, "write_to_running_command_pipe", [queue_id, write_to_stdout, txt], {})
172
173
175
177 BaseMixin.__init__(self, *args, **kwargs)
178 self.available_commands.update({
179 'sync_spm': {
180 'desc': _("Update Spm Repository (emerge --sync)"),
181 'params': [],
182 'call': self.sync_spm,
183 'private': False,
184 },
185 'compile_atoms': {
186 'desc': _("Compile specified atoms with specified parameters"),
187 'params': [
188 ('atoms',list,_('Atoms'),True,),
189 ('pretend',bool,_('Pretend'),False,),
190 ('oneshot',bool,_('Oneshot'),False,),
191 ('verbose',bool,_('Verbose'),False,),
192 ('nocolor',bool,_('No color'),False,),
193 ('fetchonly',bool,_('Fetch only'),False,),
194 ('buildonly',bool,_('Build only'),False,),
195 ('nodeps',bool,_('No dependencies'),False,),
196 ('custom_use',basestring,_('Custom USE'),False,),
197 ('ldflags',basestring,_('Custom LDFLAGS'),False,),
198 ('cflags',basestring,_('Custom CFLAGS'),False,),
199 ],
200 'call': self.compile_atoms,
201 'private': False,
202 },
203 'spm_remove_atoms': {
204 'desc': _("Remove specified atoms with specified parameters"),
205 'params': [
206 ('atoms',list,_('Atoms'),True,),
207 ('pretend',bool,_('Pretend'),False,),
208 ('verbose',bool,_('Verbose'),False,),
209 ('nocolor',bool,_('No color'),False,),
210 ],
211 'call': self.spm_remove_atoms,
212 'private': False,
213 },
214 'get_spm_categories_updates': {
215 'desc': _("Get SPM updates for the specified categories"),
216 'params': [('categories',list,_('Categories'),True,)],
217 'call': self.get_spm_categories_updates,
218 'private': False,
219 },
220 'get_spm_categories_installed': {
221 'desc': _("Get SPM installed packages for the specified categories"),
222 'params': [('categories',list,_('Categories'),True,)],
223 'call': self.get_spm_categories_installed,
224 'private': False,
225 },
226 'enable_uses_for_atoms': {
227 'desc': _("Enable USE flags for the specified atoms"),
228 'params': [
229 ('atoms',list,_('Atoms'),True,),
230 ('useflags',list,_('USE flags'),True,)
231 ],
232 'call': self.enable_uses_for_atoms,
233 'private': False,
234 },
235 'disable_uses_for_atoms': {
236 'desc': _("Disable USE flags for the specified atoms"),
237 'params': [
238 ('atoms',list,_('Atoms'),True,),
239 ('useflags',list,_('USE flags'),True,)
240 ],
241 'call': self.disable_uses_for_atoms,
242 'private': False,
243 },
244 'get_spm_atoms_info': {
245 'desc': _("Get info for the specified atoms"),
246 'params': [('atoms',list,_('Atoms'),True,)],
247 'call': self.get_spm_atoms_info,
248 'private': False,
249 },
250 'run_spm_info': {
251 'desc': _("Run SPM info command"),
252 'params': [],
253 'call': self.run_spm_info,
254 'private': False,
255 },
256 'run_custom_shell_command': {
257 'desc': _("Run custom shell command"),
258 'params': [
259 ('command',basestring,_('Command'),True,)
260 ],
261 'call': self.run_custom_shell_command,
262 'private': False,
263 },
264 'get_spm_glsa_data': {
265 'desc': _("Get Spm security updates information"),
266 'params': [
267 ('list_type',basestring,_('List type (affected,new,all)'),True,)
268 ],
269 'call': self.get_spm_glsa_data,
270 'private': False,
271 },
272 'get_available_repositories': {
273 'desc': _("Get information about available Entropy repositories"),
274 'params': [],
275 'call': self.get_available_repositories,
276 'private': False,
277 },
278 'set_default_repository': {
279 'desc': _("Set default Entropy Server repository"),
280 'params': [
281 ('repoid',basestring,_('Repository Identifier'),True,)
282 ],
283 'call': self.set_default_repository,
284 'private': False,
285 },
286 'get_available_entropy_packages': {
287 'desc': _("Get available packages inside the specified repository"),
288 'params': [
289 ('repoid',basestring,_('Repository Identifier'),True,)
290 ],
291 'call': self.get_available_entropy_packages,
292 'private': False,
293 },
294 'get_entropy_idpackage_information': {
295 'desc': _("Get idpackage metadata using its idpackage in the specified repository"),
296 'params': [
297 ('idpackage',int,_('Package Identifier'),True,),
298 ('repoid',basestring,_('Repository Identifier'),True,)
299 ],
300 'call': self.get_entropy_idpackage_information,
301 'private': False,
302 },
303 'remove_entropy_packages': {
304 'desc': _("Remove the specified Entropy package matches (idpackage,repoid)"),
305 'params': [
306 ('matched_atoms',list,_('Matched atoms'),True,)
307 ],
308 'call': self.remove_entropy_packages,
309 'private': False,
310 },
311 'search_entropy_packages': {
312 'desc': _("Search Entropy packages using a defined set of search types in the specified repository"),
313 'params': [
314 ('search_type',basestring,_('Search type'),True,),
315 ('search_string',basestring,_('Search string'),True,),
316 ('repoid',basestring,_('Repository Identifier'),True,)
317 ],
318 'call': self.search_entropy_packages,
319 'private': False,
320 },
321 'move_entropy_packages_to_repository': {
322 'desc': _("Move or copy a package from a repository to another"),
323 'params': [
324 ('idpackages',list,_('Package identifiers'),True,),
325 ('from_repo',basestring,_('From repository'),True,),
326 ('to_repo',basestring,_('To repository'),True,),
327 ('do_copy',bool,_('Copy instead of move?'),False,)
328 ],
329 'call': self.search_entropy_packages,
330 'private': False,
331 },
332 'scan_entropy_packages_database_changes': {
333 'desc': _("Scan Spm package changes and retrieve a list of action that should be run on the repositories"),
334 'params': [],
335 'call': self.scan_entropy_packages_database_changes,
336 'private': False,
337 },
338 'run_entropy_database_updates': {
339 'desc': _("Run Entropy database updates"),
340 'params': [
341 ('to_add',list,_('Matches to add from Spm'),True,),
342 ('to_remove',list,_('Matches to remove from repository database'),True,),
343 ('to_inject',list,_('Matches to inject on repository database'),True,),
344 ],
345 'call': self.run_entropy_database_updates,
346 'private': False,
347 },
348 'run_entropy_dependency_test': {
349 'desc': _("Run Entropy dependency test"),
350 'params': [],
351 'call': self.run_entropy_dependency_test,
352 'private': False,
353 },
354 'run_entropy_library_test': {
355 'desc': _("Run Entropy library test"),
356 'params': [],
357 'call': self.run_entropy_library_test,
358 'private': False,
359 },
360 'run_entropy_treeupdates': {
361 'desc': _("Run Entropy tree updates"),
362 'params': [
363 ('repoid',basestring,_('Repository Identifier'),True,),
364 ],
365 'call': self.run_entropy_treeupdates,
366 'private': False,
367 },
368 'scan_entropy_mirror_updates': {
369 'desc': _("Scan for Mirror updates and retrieve a list of action that should be run"),
370 'params': [
371 ('repositories',list,_('list of repository identifiers'),True,),
372 ],
373 'call': self.scan_entropy_mirror_updates,
374 'private': False,
375 },
376 'run_entropy_mirror_updates': {
377 'desc': _("Run Mirror updates for the provided repositories and its data"),
378 'params': [
379 ('repository_data',dict,_('composed repository data'),True,),
380 ],
381 'call': self.run_entropy_mirror_updates,
382 'private': False,
383 },
384 'run_entropy_checksum_test': {
385 'desc': _("Run Entropy packages digest verification test"),
386 'params': [
387 ('repoid',basestring,_('Repository Identifier'),True,),
388 ('mode',basestring,_('Check mode'),False,),
389 ],
390 'call': self.run_entropy_mirror_updates,
391 'private': False,
392 },
393 'get_notice_board': {
394 'desc': _("Get repository notice board"),
395 'params': [('repoid',basestring,_('Repository Identifier'),True,),],
396 'call': self.get_notice_board,
397 'private': False,
398 },
399 'remove_notice_board_entries': {
400 'desc': _("Remove notice board entry"),
401 'params': [
402 ('repoid',basestring,_('Repository Identifier'),True,),
403 ('entry_ids',list,_('Entry Identifiers'),True,),
404 ],
405 'call': self.remove_notice_board_entries,
406 'private': False,
407 },
408 'add_notice_board_entry': {
409 'desc': _("Add notice board entry"),
410 'params': [
411 ('repoid',basestring,_('Repository Identifier'),True,),
412 ('title',basestring,_('Title'),True,),
413 ('notice_text',basestring,_('Text'),True,),
414 ('link',basestring,_('Notice link'),True,),
415 ],
416 'call': self.add_notice_board_entry,
417 'private': False,
418 },
419 })
420
422 return self.Manager.do_cmd(True, "sync_spm", [], {})
423
424 - def compile_atoms(self, atoms, pretend = False, oneshot = False, verbose = True, nocolor = True, fetchonly = False, buildonly = False, nodeps = False, custom_use = '', ldflags = '', cflags = ''):
425 return self.Manager.do_cmd(
426 True,
427 "compile_atoms",
428 [atoms],
429 {
430 'pretend': pretend,
431 'oneshot': oneshot,
432 'verbose': verbose,
433 'nocolor': nocolor,
434 'fetchonly': fetchonly,
435 'buildonly': buildonly,
436 'nodeps': nodeps,
437 'custom_use': custom_use,
438 'ldflags': ldflags,
439 'cflags': cflags,
440 }
441 )
442
443 - def spm_remove_atoms(self, atoms, pretend = True, verbose = True, nocolor = True):
444 return self.Manager.do_cmd(
445 True,
446 "spm_remove_atoms",
447 [atoms],
448 {
449 'pretend': pretend,
450 'verbose': verbose,
451 'nocolor': nocolor,
452 }
453 )
454
456 return self.Manager.do_cmd(True, "get_spm_categories_updates", [categories], {})
457
459 return self.Manager.do_cmd(True, "get_spm_categories_installed", [categories], {})
460
462 return self.Manager.do_cmd(True, "enable_uses_for_atoms", [atoms,useflags], {})
463
465 return self.Manager.do_cmd(True, "disable_uses_for_atoms", [atoms,useflags], {})
466
468 return self.Manager.do_cmd(True, "get_spm_atoms_info", [atoms], {})
469
471 return self.Manager.do_cmd(True, "run_spm_info", [], {})
472
474 return self.Manager.do_cmd(True, "run_custom_shell_command", [command], {})
475
477 return self.Manager.do_cmd(True, "get_spm_glsa_data", [list_type], {})
478
480 return self.Manager.do_cmd(True, "get_available_repositories", [], {})
481
483 return self.Manager.do_cmd(True, "set_default_repository", [repoid], {})
484
486 return self.Manager.do_cmd(True, "get_available_entropy_packages", [repoid], {})
487
490
492 return self.Manager.do_cmd(True, "remove_entropy_packages", [matched_atoms], {})
493
495 return self.Manager.do_cmd(True, "search_entropy_packages", [search_type,search_string,repoid], {})
496
498 return self.Manager.do_cmd(True, "move_entropy_packages_to_repository", [idpackages,from_repo,to_repo, do_copy], {})
499
501 return self.Manager.do_cmd(True, "scan_entropy_packages_database_changes", [], {})
502
504 return self.Manager.do_cmd(True, "run_entropy_database_updates", [to_add,to_remove,to_inject], {})
505
507 return self.Manager.do_cmd(True, "run_entropy_dependency_test", [], {})
508
510 return self.Manager.do_cmd(True, "run_entropy_library_test", [], {})
511
513 return self.Manager.do_cmd(True, "run_entropy_treeupdates", [repoid], {})
514
516 return self.Manager.do_cmd(True, "scan_entropy_mirror_updates", [repositories], {})
517
519 return self.Manager.do_cmd(True, "run_entropy_mirror_updates", [repository_data], {})
520
522 return self.Manager.do_cmd(True, "run_entropy_checksum_test", [repoid, mode], {})
523
525 return self.Manager.do_cmd(True, "get_notice_board", [repoid], {})
526
528 return self.Manager.do_cmd(True, "remove_notice_board_entries", [repoid,entry_ids], {})
529
530 - def add_notice_board_entry(self, repoid, title, notice_text, link):
531 return self.Manager.do_cmd(True, "add_notice_board_entry", [repoid,title,notice_text,link], {})
532