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