Package entropy :: Package services :: Package system :: Module commands

Source Code for Module entropy.services.system.commands

   1  # -*- coding: utf-8 -*- 
   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 Services System Management Command Interface}. 
  10   
  11  """ 
  12   
  13  import os 
  14  from entropy.services.skel import SocketCommands 
  15  from entropy.const import etpConst 
  16   
17 -class Base(SocketCommands):
18 19 import entropy.tools as entropyTools
20 - def __init__(self, HostInterface):
21 22 import copy 23 self.copy = copy 24 SocketCommands.__init__(self, HostInterface, inst_name = "systemsrv") 25 self.raw_commands = [ 26 'systemsrv:add_to_pinboard', 27 'systemsrv:write_to_running_command_pipe' 28 ] 29 30 self.valid_commands = { 31 'systemsrv:get_queue': { 32 'auth': True, 33 'built_in': False, 34 'cb': self.docmd_get_queue, 35 'args': ["myargs"], 36 'as_user': False, 37 'desc': "get current queue", 38 'syntax': "<SESSION_ID> systemsrv:get_queue", 39 'from': unicode(self), 40 }, 41 'systemsrv:get_queue_item_by_id': { 42 'auth': True, 43 'built_in': False, 44 'cb': self.docmd_get_queue_item_by_id, 45 'args': ["myargs"], 46 'as_user': False, 47 'desc': "get current queue item through its queue id", 48 'syntax': "<SESSION_ID> systemsrv:get_queue_item_by_id <queue_id>", 49 'from': unicode(self), 50 }, 51 'systemsrv:get_queue_id_stdout': { 52 'auth': True, 53 'built_in': False, 54 'cb': self.docmd_get_queue_id_stdout, 55 'args': ["myargs"], 56 'as_user': False, 57 'desc': "get current queue item stdout/stderr output", 58 'syntax': "<SESSION_ID> systemsrv:get_queue_id_stdout <queue_id> <how many bytes (from tail)>", 59 'from': unicode(self), 60 }, 61 'systemsrv:get_queue_id_result': { 62 'auth': True, 63 'built_in': False, 64 'cb': self.docmd_get_queue_id_result, 65 'args': ["myargs"], 66 'as_user': False, 67 'desc': "get current queue item result output", 68 'syntax': "<SESSION_ID> systemsrv:get_queue_id_result <queue_id>", 69 'from': unicode(self), 70 }, 71 'systemsrv:remove_queue_ids': { 72 'auth': True, 73 'built_in': False, 74 'cb': self.docmd_remove_queue_ids, 75 'args': ["myargs"], 76 'as_user': False, 77 'desc': "remove queue items using their queue ids", 78 'syntax': "<SESSION_ID> systemsrv:remove_queue_ids <queue_id 1> <queue_id 2> <...>", 79 'from': unicode(self), 80 }, 81 'systemsrv:pause_queue': { 82 'auth': True, 83 'built_in': False, 84 'cb': self.docmd_pause_queue, 85 'args': ["myargs"], 86 'as_user': False, 87 'desc': "toggle queue pause (understood?)", 88 'syntax': "<SESSION_ID> systemsrv:pause_queue <True/False>", 89 'from': unicode(self), 90 }, 91 'systemsrv:kill_processing_queue_id': { 92 'auth': True, 93 'built_in': False, 94 'cb': self.docmd_kill_processing_queue_id, 95 'args': ["myargs"], 96 'as_user': False, 97 'desc': "kill a running process using its queue id", 98 'syntax': "<SESSION_ID> systemsrv:kill_processing_queue_id <queue_id>", 99 'from': unicode(self), 100 }, 101 'systemsrv:swap_items_in_queue': { 102 'auth': True, 103 'built_in': False, 104 'cb': self.docmd_swap_items_in_queue, 105 'args': ["myargs"], 106 'as_user': False, 107 'desc': "swap items in queue to change their order", 108 'syntax': "<SESSION_ID> systemsrv:swap_items_in_queue <queue_id1> <queue_id1>", 109 'from': unicode(self), 110 }, 111 'systemsrv:get_pinboard_data': { 112 'auth': True, 113 'built_in': False, 114 'cb': self.docmd_get_pinboard_data, 115 'args': [], 116 'as_user': False, 117 'desc': "get pinboard content", 118 'syntax': "<SESSION_ID> systemsrv:get_pinboard_data", 119 'from': unicode(self), 120 }, 121 'systemsrv:add_to_pinboard': { 122 'auth': True, 123 'built_in': False, 124 'cb': self.docmd_add_to_pinboard, 125 'args': ["myargs"], 126 'as_user': False, 127 'desc': "add item to pinboard", 128 'syntax': "<SESSION_ID> systemsrv:add_to_pinboard <xml string containing pinboard note and extended text>", 129 'from': unicode(self), 130 }, 131 'systemsrv:remove_from_pinboard': { 132 'auth': True, 133 'built_in': False, 134 'cb': self.docmd_remove_from_pinboard, 135 'args': ["myargs"], 136 'as_user': False, 137 'desc': "remove item from pinboard", 138 'syntax': "<SESSION_ID> systemsrv:remove_from_pinboard <pinboard identifier 1> <pinboard identifier 2> <...>", 139 'from': unicode(self), 140 }, 141 'systemsrv:set_pinboard_items_done': { 142 'auth': True, 143 'built_in': False, 144 'cb': self.docmd_set_pinboard_items_done, 145 'args': ["myargs"], 146 'as_user': False, 147 'desc': "set pinboard items status using their pinboard identifiers", 148 'syntax': "<SESSION_ID> systemsrv:set_pinboard_items_done <pinboard identifier 1> <pinboard identifier 2> <...> <status (True/False)>", 149 'from': unicode(self), 150 }, 151 'systemsrv:write_to_running_command_pipe': { 152 'auth': True, 153 'built_in': False, 154 'cb': self.docmd_write_to_running_command_pipe, 155 'args': ["myargs"], 156 'as_user': False, 157 'desc': "write text to stdin of a running command", 158 'syntax': "<SESSION_ID> systemsrv:write_to_running_command_pipe <queue_id> <write stdout (True/False)> <txt ...>", 159 'from': unicode(self), 160 }, 161 }
162
163 - def docmd_get_queue(self, myargs):
164 165 myqueue = self.copy.deepcopy(self.HostInterface.ManagerQueue) 166 167 extended = False 168 if myargs: 169 extended = myargs[0] 170 171 if not extended: 172 for key in self.HostInterface.done_queue_keys: 173 for queue_id in myqueue.get(key): 174 item = myqueue[key].get(queue_id) 175 if not item.has_key('extended_result'): 176 continue 177 item['extended_result'] = None 178 179 return True, myqueue
180
181 - def docmd_get_queue_item_by_id(self, myargs):
182 183 if not myargs: 184 return False,'wrong arguments' 185 queue_id = myargs[0] 186 try: 187 queue_id = int(queue_id) 188 except ValueError: 189 return False,'wrong argument: queue_id' 190 191 item, key = self.HostInterface.get_item_by_queue_id(queue_id, copy = True) 192 if item == None: 193 return False,'wrong queue id' 194 195 return True,item
196
197 - def docmd_get_queue_id_stdout(self, myargs):
198 199 if len(myargs) < 1: 200 return False,'wrong arguments' 201 queue_id = myargs[0] 202 bytes_from_tail = myargs[1] 203 204 try: 205 queue_id = int(queue_id) 206 except ValueError: 207 return False,'wrong argument: queue_id' 208 try: 209 bytes_from_tail = int(bytes_from_tail) 210 except ValueError: 211 return False,'wrong argument: lines from tail' 212 213 item, key = self.HostInterface.get_item_by_queue_id(queue_id, copy = True) 214 if item == None: 215 return False,'wrong queue id' 216 217 file_path = item['stdout'] 218 if not (os.path.isfile(file_path) and os.access(file_path,os.R_OK)): 219 text = '' 220 else: 221 f = open(file_path,"r") 222 f.seek(0,os.SEEK_END) 223 tell_me = f.tell() 224 if bytes_from_tail < 1: 225 bytes_from_tail = tell_me 226 if bytes_from_tail > tell_me: 227 bytes_from_tail = tell_me 228 f.seek(-1*bytes_from_tail,os.SEEK_END) 229 text = f.read() 230 f.close() 231 232 return True,text
233
234 - def docmd_get_queue_id_result(self, myargs):
235 236 if not myargs: 237 return False,'wrong arguments' 238 queue_id = myargs[0] 239 try: 240 queue_id = int(queue_id) 241 except ValueError: 242 return False,'wrong argument: queue_id' 243 244 item, key = self.HostInterface.get_item_by_queue_id(queue_id, copy = True) 245 if item == None: 246 return False,'wrong queue id' 247 248 if key not in self.HostInterface.done_queue_keys: 249 return False,'process not completed yet' 250 251 if not item.has_key('result'): 252 return False,'result not available' 253 254 ext_result = None 255 if item.has_key('extended_result'): 256 ext_result = self.HostInterface.load_queue_ext_rc(queue_id) 257 258 return True,(item['result'],ext_result,)
259
260 - def docmd_remove_queue_ids(self, myargs):
261 262 if not myargs: 263 return False,'wrong arguments' 264 265 valid_queue_ids = set() 266 for queue_id in myargs: 267 item, key = self.HostInterface.get_item_by_queue_id(queue_id, copy = True) 268 if (item != None) and (key in self.HostInterface.removable_queue_keys): 269 valid_queue_ids.add(queue_id) 270 271 if not valid_queue_ids: 272 return False,'no valid queue ids' 273 274 # remove 275 self.HostInterface.remove_from_queue(valid_queue_ids) 276 277 return True,'ok'
278
279 - def docmd_pause_queue(self, myargs):
280 281 if not myargs: 282 return False,'wrong arguments' 283 284 do = myargs[0] 285 if do: 286 self.HostInterface.pause_queue() 287 else: 288 self.HostInterface.play_queue() 289 290 return self.HostInterface.ManagerQueue['pause'],'ok'
291
292 - def docmd_kill_processing_queue_id(self, myargs):
293 294 if not myargs: 295 return False,'wrong arguments' 296 297 queue_id = myargs[0] 298 self.HostInterface.kill_processing_queue_id(queue_id) 299 return True,'ok'
300
301 - def docmd_swap_items_in_queue(self, myargs):
302 303 if len(myargs) < 2: 304 return False,'wrong arguments' 305 306 queue_id1 = myargs[0] 307 queue_id2 = myargs[1] 308 status = self.HostInterface.swap_items_in_queue(queue_id1,queue_id2) 309 if status: 310 return True,'ok' 311 return False,'not done'
312
313 - def docmd_get_pinboard_data(self):
314 data = self.HostInterface.get_pinboard_data() 315 return True,data.copy()
316
317 - def docmd_add_to_pinboard(self, myargs):
318 319 if not myargs: 320 return False,'wrong arguments' 321 322 xml_string = ' '.join(myargs) 323 try: 324 mydict = self.entropyTools.dict_from_xml(xml_string) 325 except Exception, e: 326 return None,"error: %s" % (e,) 327 328 if not (mydict.has_key('note') and mydict.has_key('extended_text')): 329 return None,'wrong dict arguments, xml must have 2 items with attr value -> note, extended_text' 330 note = mydict.get('note') 331 extended_text = mydict.get('extended_text') 332 333 self.HostInterface.add_to_pinboard(note, extended_text) 334 return True,'ok'
335
336 - def docmd_remove_from_pinboard(self, myargs):
337 338 if not myargs: 339 return False,'wrong arguments' 340 341 for pinboard_id in myargs: 342 try: 343 pinboard_id = int(pinboard_id) 344 except ValueError: 345 continue 346 self.HostInterface.remove_from_pinboard(pinboard_id) 347 return True,'ok'
348
349 - def docmd_set_pinboard_items_done(self, myargs):
350 351 if len(myargs) < 2: 352 return False,'wrong arguments' 353 354 status = myargs[-1] 355 pinboard_ids = myargs[:-1] 356 357 for pinboard_id in pinboard_ids: 358 try: 359 pinboard_id = int(pinboard_id) 360 except ValueError: 361 continue 362 self.HostInterface.set_pinboard_item_status(pinboard_id, status) 363 return True,'ok'
364
365 - def docmd_write_to_running_command_pipe(self, myargs):
366 367 if len(myargs) < 2: 368 return False, 'wrong arguments' 369 370 try: 371 queue_id = int(myargs[0]) 372 except ValueError: 373 return False,'invalid queue id' 374 375 try: 376 write_stdout = bool(myargs[1]) 377 except ValueError: 378 write_stdout = False 379 380 txt = ' '.join(myargs[2:])+'\n' 381 item, key = self.HostInterface.get_item_by_queue_id(queue_id, copy = True) 382 if key not in self.HostInterface.processing_queue_keys: 383 return False,'not running' 384 mypipe = self.HostInterface.ManagerQueueStdInOut.get(queue_id) 385 if mypipe == None: 386 return False,'pipe not available' 387 try: 388 w_fd = mypipe[1] 389 except (IndexError, ValueError,): 390 return False,'pipe vanished' 391 if not isinstance(w_fd,int): 392 return False,'stdout fd not an int' 393 394 if write_stdout: 395 stdout = open(item['stdout'],"a+") 396 try: 397 os.write(w_fd,txt) 398 if write_stdout: 399 stdout.write(txt) 400 except OSError, e: 401 return False,'OSError: %s' % (e,) 402 except IOError, e: 403 return False,'IOError: %s' % (e,) 404 finally: 405 if write_stdout: 406 stdout.flush() 407 stdout.close() 408 409 return True,'ok'
410
411 -class Repository(SocketCommands):
412 413 import entropy.dump as dumpTools 414 import entropy.tools as entropyTools
415 - def __init__(self, HostInterface):
416 417 SocketCommands.__init__(self, HostInterface, inst_name = "srvrepo") 418 self.raw_commands = [ 419 'srvrepo:enable_uses_for_atoms', 420 'srvrepo:disable_uses_for_atoms', 421 'srvrepo:compile_atoms', 422 'srvrepo:spm_remove_atoms', 423 'srvrepo:run_custom_shell_command', 424 'srvrepo:remove_entropy_packages', 425 'srvrepo:search_entropy_packages', 426 'srvrepo:run_entropy_database_updates', 427 'srvrepo:run_entropy_mirror_updates', 428 'srvrepo:add_notice_board_entry' 429 ] 430 self.valid_commands = { 431 'srvrepo:sync_spm': { 432 'auth': True, 433 'built_in': False, 434 'cb': self.docmd_sync_spm, 435 'args': ["cmd","myargs","authenticator"], 436 'as_user': False, 437 'desc': "spawn portage sync (emerge --sync)", 438 'syntax': "<SESSION_ID> srvrepo:sync_spm", 439 'from': unicode(self) 440 }, 441 'srvrepo:compile_atoms': { 442 'auth': True, 443 'built_in': False, 444 'cb': self.docmd_compile_atoms, 445 'args': ["cmd","myargs","authenticator"], 446 'as_user': False, 447 'desc': "compile specified atoms using Spm (Portage?)", 448 'syntax': "<SESSION_ID> srvrepo:compile_atoms <xml string containing atoms and compile options>", 449 'from': unicode(self) 450 }, 451 'srvrepo:spm_remove_atoms': { 452 'auth': True, 453 'built_in': False, 454 'cb': self.docmd_spm_remove_atoms, 455 'args': ["cmd","myargs","authenticator"], 456 'as_user': False, 457 'desc': "remove specified atoms using Spm (Portage?)", 458 'syntax': "<SESSION_ID> srvrepo:spm_remove_atoms <xml string containing atoms and remove options>", 459 'from': unicode(self) 460 }, 461 'srvrepo:get_spm_categories_updates': { 462 'auth': True, 463 'built_in': False, 464 'cb': self.docmd_get_spm_categories_updates, 465 'args': ["cmd","myargs","authenticator"], 466 'as_user': False, 467 'desc': "get SPM updates for the specified package categories", 468 'syntax': "<SESSION_ID> srvrepo:get_spm_categories_updates <category 1> <category 2> <...>", 469 'from': unicode(self) 470 }, 471 'srvrepo:get_spm_categories_installed': { 472 'auth': True, 473 'built_in': False, 474 'cb': self.docmd_get_spm_categories_installed, 475 'args': ["cmd","myargs","authenticator"], 476 'as_user': False, 477 'desc': "get SPM installed packages for the specified package categories", 478 'syntax': "<SESSION_ID> srvrepo:get_spm_categories_installed <category 1> <category 2> <...>", 479 'from': unicode(self) 480 }, 481 'srvrepo:enable_uses_for_atoms': { 482 'auth': True, 483 'built_in': False, 484 'cb': self.docmd_enable_uses_for_atoms, 485 'args': ["cmd","myargs","authenticator"], 486 'as_user': False, 487 'desc': "enable use flags for the specified atom", 488 'syntax': "<SESSION_ID> srvrepo:enable_uses_for_atom <xml string containing atoms and use flags>", 489 'from': unicode(self) 490 }, 491 'srvrepo:disable_uses_for_atoms': { 492 'auth': True, 493 'built_in': False, 494 'cb': self.docmd_disable_uses_for_atoms, 495 'args': ["cmd","myargs","authenticator"], 496 'as_user': False, 497 'desc': "enable use flags for the specified atom", 498 'syntax': "<SESSION_ID> srvrepo:disable_uses_for_atom <xml string containing atoms and use flags>", 499 'from': unicode(self) 500 }, 501 'srvrepo:get_spm_atoms_info': { 502 'auth': True, 503 'built_in': False, 504 'cb': self.docmd_get_spm_atoms_info, 505 'args': ["cmd","myargs","authenticator"], 506 'as_user': False, 507 'desc': "get info from SPM for the specified atoms", 508 'syntax': "<SESSION_ID> srvrepo:get_spm_atoms_info <atom1> <atom2> <atom3>", 509 'from': unicode(self) 510 }, 511 'srvrepo:run_spm_info': { 512 'auth': True, 513 'built_in': False, 514 'cb': self.docmd_run_spm_info, 515 'args': ["cmd","authenticator"], 516 'as_user': False, 517 'desc': "run SPM info command", 518 'syntax': "<SESSION_ID> srvrepo:run_spm_info", 519 'from': unicode(self) 520 }, 521 'srvrepo:run_custom_shell_command': { 522 'auth': True, 523 'built_in': False, 524 'cb': self.docmd_run_custom_shell_command, 525 'args': ["cmd","myargs","authenticator"], 526 'as_user': False, 527 'desc': "run custom shell command", 528 'syntax': "<SESSION_ID> srvrepo:run_custom_shell_command <shell command blah blah>", 529 'from': unicode(self) 530 }, 531 'srvrepo:get_spm_glsa_data': { 532 'auth': True, 533 'built_in': False, 534 'cb': self.docmd_get_spm_glsa_data, 535 'args': ["cmd","myargs","authenticator"], 536 'as_user': False, 537 'desc': "get SPM security updates info", 538 'syntax': "<SESSION_ID> srvrepo:get_spm_glsa_data <list_type string (affected,new,all)>", 539 'from': unicode(self) 540 }, 541 'srvrepo:get_available_repositories': { 542 'auth': True, 543 'built_in': False, 544 'cb': self.docmd_get_available_repositories, 545 'args': [], 546 'as_user': False, 547 'desc': "get information about available Entropy repositories", 548 'syntax': "<SESSION_ID> srvrepo:get_available_repositories", 549 'from': unicode(self) 550 }, 551 'srvrepo:set_default_repository': { 552 'auth': True, 553 'built_in': False, 554 'cb': self.docmd_set_default_repository, 555 'args': ["myargs"], 556 'as_user': False, 557 'desc': "set a new default Entropy Server repository", 558 'syntax': "<SESSION_ID> srvrepo:set_default_repository <repoid>", 559 'from': unicode(self) 560 }, 561 'srvrepo:get_available_entropy_packages': { 562 'auth': True, 563 'built_in': False, 564 'cb': self.docmd_get_available_entropy_packages, 565 'args': ["myargs"], 566 'as_user': False, 567 'desc': "get available Entropy packages from the chosen repository id", 568 'syntax': "<SESSION_ID> srvrepo:get_available_entropy_packages <repoid>", 569 'from': unicode(self) 570 }, 571 'srvrepo:get_entropy_idpackage_information': { 572 'auth': True, 573 'built_in': False, 574 'cb': self.docmd_get_entropy_idpackage_information, 575 'args': ["myargs"], 576 'as_user': False, 577 'desc': "get Entropy package metadata using its idpackage and repository id", 578 'syntax': "<SESSION_ID> srvrepo:get_entropy_idpackage_information <idpackage> <repoid>", 579 'from': unicode(self) 580 }, 581 'srvrepo:remove_entropy_packages': { 582 'auth': True, 583 'built_in': False, 584 'cb': self.docmd_remove_entropy_packages, 585 'args': ["myargs"], 586 'as_user': False, 587 'desc': "remove Entropy packages using their match -> (idpackage,repo)", 588 'syntax': "<SESSION_ID> srvrepo:remove_entropy_packages idpackage:repoid,idpackage,repoid,...", 589 'from': unicode(self) 590 }, 591 'srvrepo:search_entropy_packages': { 592 'auth': True, 593 'built_in': False, 594 'cb': self.docmd_search_entropy_packages, 595 'args': ["myargs"], 596 'as_user': False, 597 'desc': "search Entropy packages using a defined search type, search string inside the specified repository", 598 'syntax': "<SESSION_ID> srvrepo:search_entropy_packages <repoid> <search_type> <search string...>", 599 'from': unicode(self) 600 }, 601 'srvrepo:move_entropy_packages_to_repository': { 602 'auth': True, 603 'built_in': False, 604 'cb': self.docmd_move_entropy_packages_to_repository, 605 'args': ["cmd","myargs","authenticator"], 606 'as_user': False, 607 'desc': "move or copy Entropy packages from a repository to another", 608 'syntax': "<SESSION_ID> srvrepo:move_entropy_packages_to_repository <from_repo> <to_repo> <do_copy (True: copy, False: move)> <idpackages...>", 609 'from': unicode(self) 610 }, 611 'srvrepo:scan_entropy_packages_database_changes': { 612 'auth': True, 613 'built_in': False, 614 'cb': self.docmd_scan_entropy_packages_database_changes, 615 'args': ["cmd","authenticator"], 616 'as_user': False, 617 'desc': "scan Spm package changes to retrieve a list of action that should be run on the repositories", 618 'syntax': "<SESSION_ID> srvrepo:scan_entropy_packages_database_changes", 619 'from': unicode(self) 620 }, 621 'srvrepo:run_entropy_database_updates': { 622 'auth': True, 623 'built_in': False, 624 'cb': self.docmd_run_entropy_database_updates, 625 'args': ["cmd","myargs","authenticator"], 626 'as_user': False, 627 'desc': "run Entropy database updates", 628 'syntax': "<SESSION_ID> srvrepo:run_entropy_database_updates <to_add: atom:counter:repoid,atom:counter:repoid,...> <to_remove: idpackage:repoid,idpackage:repoid,...> <to_inject: idpackage:repoid,idpackage:repoid,...>", 629 'from': unicode(self) 630 }, 631 'srvrepo:run_entropy_dependency_test': { 632 'auth': True, 633 'built_in': False, 634 'cb': self.docmd_run_entropy_dependency_test, 635 'args': ["cmd","authenticator"], 636 'as_user': False, 637 'desc': "run Entropy dependency test", 638 'syntax': "<SESSION_ID> srvrepo:run_entropy_dependency_test", 639 'from': unicode(self) 640 }, 641 'srvrepo:run_entropy_library_test': { 642 'auth': True, 643 'built_in': False, 644 'cb': self.docmd_run_entropy_library_test, 645 'args': ["cmd","authenticator"], 646 'as_user': False, 647 'desc': "run Entropy dependency test", 648 'syntax': "<SESSION_ID> srvrepo:run_entropy_library_test", 649 'from': unicode(self) 650 }, 651 'srvrepo:run_entropy_treeupdates': { 652 'auth': True, 653 'built_in': False, 654 'cb': self.docmd_run_entropy_treeupdates, 655 'args': ["cmd","myargs","authenticator"], 656 'as_user': False, 657 'desc': "run Entropy database treeupdates", 658 'syntax': "<SESSION_ID> srvrepo:run_entropy_treeupdates <repoid>", 659 'from': unicode(self) 660 }, 661 'srvrepo:scan_entropy_mirror_updates': { 662 'auth': True, 663 'built_in': False, 664 'cb': self.docmd_scan_entropy_mirror_updates, 665 'args': ["cmd","myargs","authenticator"], 666 'as_user': False, 667 'desc': "scan mirror updates for the specified repository identifiers", 668 'syntax': "<SESSION_ID> srvrepo:scan_entropy_mirror_updates <repoid 1> <repoid 2> <...>", 669 'from': unicode(self) 670 }, 671 'srvrepo:run_entropy_mirror_updates': { 672 'auth': True, 673 'built_in': False, 674 'cb': self.docmd_run_entropy_mirror_updates, 675 'args': ["cmd","myargs","authenticator"], 676 'as_user': False, 677 'desc': "run mirror updates for the provided repositories", 678 'syntax': "<SESSION_ID> srvrepo:run_entropy_mirror_updates <xml data, properly formatted>", 679 'from': unicode(self) 680 }, 681 'srvrepo:run_entropy_checksum_test': { 682 'auth': True, 683 'built_in': False, 684 'cb': self.docmd_run_entropy_checksum_test, 685 'args': ["cmd","myargs","authenticator"], 686 'as_user': False, 687 'desc': "run Entropy packages checksum verification tool", 688 'syntax': "<SESSION_ID> srvrepo:run_entropy_checksum_test <repoid> <mode>", 689 'from': unicode(self) 690 }, 691 'srvrepo:get_notice_board': { 692 'auth': True, 693 'built_in': False, 694 'cb': self.docmd_get_notice_board, 695 'args': ["cmd","myargs","authenticator"], 696 'as_user': False, 697 'desc': "get repository notice board", 698 'syntax': "<SESSION_ID> srvrepo:get_notice_board <repoid>", 699 'from': unicode(self) 700 }, 701 'srvrepo:remove_notice_board_entries': { 702 'auth': True, 703 'built_in': False, 704 'cb': self.docmd_remove_notice_board_entries, 705 'args': ["cmd","myargs","authenticator"], 706 'as_user': False, 707 'desc': "remove notice board entries", 708 'syntax': "<SESSION_ID> srvrepo:remove_notice_board_entries <repoid> <entry_id1> <entry_id2> <...>", 709 'from': unicode(self) 710 }, 711 'srvrepo:add_notice_board_entry': { 712 'auth': True, 713 'built_in': False, 714 'cb': self.docmd_add_notice_board_entry, 715 'args': ["cmd","myargs","authenticator"], 716 'as_user': False, 717 'desc': "remove notice board entry", 718 'syntax': "<SESSION_ID> srvrepo:add_notice_board_entry <xml formatted data>", 719 'from': unicode(self) 720 }, 721 }
722
723 - def docmd_sync_spm(self, cmd, myargs, authenticator):
724 725 status, userdata, err_str = authenticator.docmd_userdata() 726 uid = userdata.get('uid') 727 gid = userdata.get('gid') 728 729 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'sync_spm', [], {}, False, False, interactive = True) 730 if queue_id < 0: return False, queue_id 731 return True, queue_id
732
733 - def docmd_compile_atoms(self, cmd, myargs, authenticator):
734 735 if not myargs: 736 return False,'wrong arguments' 737 738 xml_string = ' '.join(myargs) 739 740 try: 741 mydict = self.entropyTools.dict_from_xml(xml_string) 742 except Exception, e: 743 return None,"error: %s" % (e,) 744 745 if not ( mydict.has_key('atoms') and mydict.has_key('pretend') and \ 746 mydict.has_key('oneshot') and mydict.has_key('verbose') and \ 747 mydict.has_key('fetchonly') and mydict.has_key('buildonly') and \ 748 mydict.has_key('nodeps') and \ 749 mydict.has_key('nocolor') and mydict.has_key('custom_use') and \ 750 mydict.has_key('ldflags') and mydict.has_key('cflags') ): 751 return None,'wrong dict arguments, xml must have 10 items with attr value' + \ 752 ' -> atoms, pretend, oneshot, verbose, nocolor, fetchonly, ' + \ 753 'buildonly, nodeps, custom_use, ldflags, cflags' 754 755 atoms = mydict.get('atoms') 756 if atoms: atoms = atoms.split() 757 pretend = mydict.get('pretend') 758 oneshot = mydict.get('oneshot') 759 verbose = mydict.get('verbose') 760 nocolor = mydict.get('nocolor') 761 fetchonly = mydict.get('fetchonly') 762 buildonly = mydict.get('buildonly') 763 nodeps = mydict.get('nodeps') 764 custom_use = mydict.get('custom_use') 765 ldflags = mydict.get('ldflags') 766 cflags = mydict.get('cflags') 767 768 if pretend == "1": pretend = True 769 else: pretend = False 770 if oneshot == "1": oneshot = True 771 else: oneshot = False 772 if verbose == "1": verbose = True 773 else: verbose = False 774 if nocolor == "1": nocolor = True 775 else: nocolor = False 776 if fetchonly == "1": fetchonly = True 777 else: fetchonly = False 778 if buildonly == "1": buildonly = True 779 else: buildonly = False 780 if nodeps == "1": nodeps = True 781 else: nodeps = False 782 783 status, userdata, err_str = authenticator.docmd_userdata() 784 uid = userdata.get('uid') 785 gid = userdata.get('gid') 786 787 add_dict = { 788 'pretend': pretend, 789 'oneshot': oneshot, 790 'verbose': verbose, 791 'nocolor': nocolor, 792 'fetchonly': fetchonly, 793 'buildonly': buildonly, 794 'nodeps': nodeps, 795 'custom_use': custom_use, 796 'ldflags': ldflags, 797 'cflags': cflags, 798 } 799 800 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), 801 uid, gid, 'compile_atoms', [atoms[:]], add_dict.copy(), False, False, interactive = True) 802 if queue_id < 0: return False, queue_id 803 return True, queue_id
804
805 - def docmd_spm_remove_atoms(self, cmd, myargs, authenticator):
806 if not myargs: 807 return False,'wrong arguments' 808 809 xml_string = ' '.join(myargs) 810 811 try: 812 mydict = self.entropyTools.dict_from_xml(xml_string) 813 except Exception, e: 814 return None,"error: %s" % (e,) 815 816 if not ( mydict.has_key('atoms') and mydict.has_key('pretend') and \ 817 mydict.has_key('verbose') and mydict.has_key('nocolor') ): 818 return None,'wrong dict arguments, xml must have 4 items with attr value -> atoms, pretend, verbose, nocolor' 819 820 atoms = mydict.get('atoms') 821 if atoms: atoms = atoms.split() 822 pretend = mydict.get('pretend') 823 verbose = mydict.get('verbose') 824 nocolor = mydict.get('nocolor') 825 826 if pretend == "1": pretend = True 827 else: pretend = False 828 if verbose == "1": verbose = True 829 else: verbose = False 830 if nocolor == "1": nocolor = True 831 else: nocolor = False 832 833 status, userdata, err_str = authenticator.docmd_userdata() 834 uid = userdata.get('uid') 835 gid = userdata.get('gid') 836 837 add_dict = { 838 'pretend': pretend, 839 'verbose': verbose, 840 'nocolor': nocolor, 841 } 842 843 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'spm_remove_atoms', [atoms[:]], add_dict.copy(), False, False, interactive = True) 844 if queue_id < 0: return False, queue_id 845 return True, queue_id
846
847 - def docmd_get_spm_categories_updates(self, cmd, myargs, authenticator):
848 if not myargs: 849 return False,'wrong arguments' 850 851 status, userdata, err_str = authenticator.docmd_userdata() 852 uid = userdata.get('uid') 853 gid = userdata.get('gid') 854 855 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'get_spm_categories_updates', [myargs], {}, True, True, interactive = True) 856 if queue_id < 0: return False, queue_id 857 return True, queue_id
858
859 - def docmd_get_spm_categories_installed(self, cmd, myargs, authenticator):
860 861 status, userdata, err_str = authenticator.docmd_userdata() 862 uid = userdata.get('uid') 863 gid = userdata.get('gid') 864 865 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'get_spm_categories_installed', [myargs], {}, True, True, interactive = True) 866 if queue_id < 0: return False, queue_id 867 return True, queue_id
868
869 - def docmd_enable_uses_for_atoms(self, cmd, myargs, authenticator):
870 if not myargs: 871 return False,'wrong arguments' 872 873 xml_string = ' '.join(myargs) 874 try: 875 mydict = self.entropyTools.dict_from_xml(xml_string) 876 except Exception, e: 877 return None,"error: %s" % (e,) 878 if not (mydict.has_key('atoms') and mydict.has_key('useflags')): 879 return None,'wrong dict arguments, xml must have 2 items with attr value -> atoms, useflags' 880 881 atoms = mydict.get('atoms') 882 useflags = mydict.get('useflags') 883 if atoms: atoms = atoms.split() 884 if useflags: useflags = useflags.split() 885 886 status, userdata, err_str = authenticator.docmd_userdata() 887 uid = userdata.get('uid') 888 gid = userdata.get('gid') 889 890 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'enable_uses_for_atoms', [atoms,useflags], {}, True, True) 891 if queue_id < 0: return False, queue_id 892 return True, queue_id
893
894 - def docmd_disable_uses_for_atoms(self, cmd, myargs, authenticator):
895 if not myargs: 896 return False,'wrong arguments' 897 898 xml_string = ' '.join(myargs) 899 try: 900 mydict = self.entropyTools.dict_from_xml(xml_string) 901 except Exception, e: 902 return None,"error: %s" % (e,) 903 if not (mydict.has_key('atoms') and mydict.has_key('useflags')): 904 return None,'wrong dict arguments, xml must have 2 items with attr value -> atoms, useflags' 905 906 atoms = mydict.get('atoms') 907 useflags = mydict.get('useflags') 908 if atoms: atoms = atoms.split() 909 if useflags: useflags = useflags.split() 910 911 status, userdata, err_str = authenticator.docmd_userdata() 912 uid = userdata.get('uid') 913 gid = userdata.get('gid') 914 915 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'disable_uses_for_atoms', [atoms,useflags], {}, True, True) 916 if queue_id < 0: return False, queue_id 917 return True, queue_id
918
919 - def docmd_get_spm_atoms_info(self, cmd, myargs, authenticator):
920 if not myargs: 921 return False,'wrong arguments' 922 923 status, userdata, err_str = authenticator.docmd_userdata() 924 uid = userdata.get('uid') 925 gid = userdata.get('gid') 926 927 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'get_spm_atoms_info', [myargs], {}, True, True) 928 if queue_id < 0: return False, queue_id 929 return True, queue_id
930
931 - def docmd_run_spm_info(self, cmd, authenticator):
932 933 status, userdata, err_str = authenticator.docmd_userdata() 934 uid = userdata.get('uid') 935 gid = userdata.get('gid') 936 937 queue_id = self.HostInterface.add_to_queue(cmd, '', uid, gid, 'run_spm_info', [], {}, True, False, interactive = True) 938 if queue_id < 0: return False, queue_id 939 return True, queue_id
940
941 - def docmd_run_custom_shell_command(self, cmd, myargs, authenticator):
942 if not myargs: 943 return False,'wrong arguments' 944 945 status, userdata, err_str = authenticator.docmd_userdata() 946 uid = userdata.get('uid') 947 gid = userdata.get('gid') 948 command = ' '.join(myargs) 949 950 queue_id = self.HostInterface.add_to_queue(cmd, command, uid, gid, 'run_custom_shell_command', [command], {}, True, False, interactive = True) 951 if queue_id < 0: return False, queue_id 952 return True, queue_id
953
954 - def docmd_get_spm_glsa_data(self, cmd, myargs, authenticator):
955 if not myargs: 956 return False,'wrong arguments' 957 958 status, userdata, err_str = authenticator.docmd_userdata() 959 uid = userdata.get('uid') 960 gid = userdata.get('gid') 961 962 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'get_spm_glsa_data', [myargs[0]], {}, True, True) 963 if queue_id < 0: return False, queue_id 964 return True, queue_id
965
967 data = {} 968 data['available'] = self.HostInterface.Entropy.get_available_repositories() 969 if etpConst['clientserverrepoid'] in data['available']: 970 data['available'].pop(etpConst['clientserverrepoid']) 971 data['community_mode'] = self.HostInterface.Entropy.community_repo 972 data['current'] = self.HostInterface.Entropy.default_repository 973 data['branch'] = self.HostInterface.Entropy.SystemSettings['repositories']['branch'] 974 return True, data
975
976 - def docmd_set_default_repository(self, myargs):
977 978 if not myargs: 979 return False,'wrong arguments' 980 repoid = myargs[0] 981 if repoid not in self.HostInterface.Entropy.get_available_repositories(): 982 return False,'repository id not available' 983 984 status = True 985 msg = 'ok' 986 try: 987 self.HostInterface.Entropy.switch_default_repository(repoid, save = True, handle_uninitialized = False) 988 except Exception, e: 989 status = False 990 msg = unicode(e) 991 return status, msg
992
993 - def docmd_get_available_entropy_packages(self, myargs):
994 995 if not myargs: 996 return False,'wrong arguments' 997 repoid = myargs[0] 998 if repoid not in self.HostInterface.Entropy.get_available_repositories(): 999 return False,'repository id not available' 1000 1001 dbconn = self.HostInterface.Entropy.open_server_repository(repo = repoid, just_reading = True, warnings = False, do_cache = False) 1002 idpackages = dbconn.listAllIdpackages(order_by = 'atom') 1003 package_data = [] 1004 package_data = { 1005 'ordered_idpackages': idpackages, 1006 'data': {}, 1007 } 1008 for idpackage in idpackages: 1009 1010 data = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1011 if not data: continue 1012 package_data['data'][idpackage] = data.copy() 1013 dbconn.closeDB() 1014 return True,package_data
1015
1017 1018 if len(myargs) < 2: 1019 return False,'wrong arguments' 1020 idpackage = myargs[0] 1021 repoid = myargs[1] 1022 1023 dbconn = self.HostInterface.Entropy.open_server_repository(repo = repoid, just_reading = True, warnings = False, do_cache = False) 1024 package_data = dbconn.getPackageData(idpackage) 1025 dbconn.closeDB() 1026 return True,package_data
1027
1028 - def docmd_remove_entropy_packages(self, myargs):
1029 if not myargs: 1030 return False,'wrong arguments' 1031 string = myargs[0].split(",") 1032 matched_atoms = [] 1033 try: 1034 for item in string: 1035 mysplit = item.split(":") 1036 matched_atoms.append((int(mysplit[0]),mysplit[1],)) 1037 except: 1038 return False,'cannot eval() string correctly' 1039 1040 repo_data = {} 1041 for idpackage,repoid in matched_atoms: 1042 if not repo_data.has_key(repoid): 1043 repo_data[repoid] = [] 1044 repo_data[repoid].append(idpackage) 1045 1046 status = True 1047 msg = 'ok' 1048 try: 1049 for repoid in repo_data: 1050 self.HostInterface.Entropy.remove_packages(repo_data[repoid],repo = repoid) 1051 except Exception, e: 1052 status = False 1053 msg = unicode(e) 1054 1055 return status, msg
1056
1057 - def docmd_move_entropy_packages_to_repository(self, cmd, myargs, authenticator):
1058 1059 if len(myargs) < 4: 1060 return False,'wrong arguments' 1061 1062 status, userdata, err_str = authenticator.docmd_userdata() 1063 uid = userdata.get('uid') 1064 gid = userdata.get('gid') 1065 1066 from_repo = myargs[0] 1067 to_repo = myargs[1] 1068 do_copy = myargs[2] 1069 idpackages = myargs[3:] 1070 1071 queue_id = self.HostInterface.add_to_queue( 1072 cmd, ' '.join([str(x) for x in myargs]), 1073 uid, gid, 'move_entropy_packages_to_repository', 1074 [from_repo,to_repo,idpackages,do_copy], {}, False, True, 1075 interactive = True 1076 ) 1077 if queue_id < 0: return False, queue_id 1078 return True, queue_id
1079
1080 - def docmd_scan_entropy_packages_database_changes(self, cmd, authenticator):
1081 1082 status, userdata, err_str = authenticator.docmd_userdata() 1083 uid = userdata.get('uid') 1084 gid = userdata.get('gid') 1085 1086 queue_id = self.HostInterface.add_to_queue(cmd, '', uid, gid, 'scan_entropy_packages_database_changes', [], {}, True, True, interactive = True) 1087 if queue_id < 0: return False, queue_id 1088 return True, queue_id
1089
1090 - def docmd_run_entropy_dependency_test(self, cmd, authenticator):
1091 1092 status, userdata, err_str = authenticator.docmd_userdata() 1093 uid = userdata.get('uid') 1094 gid = userdata.get('gid') 1095 1096 queue_id = self.HostInterface.add_to_queue(cmd, '', uid, gid, 'run_entropy_dependency_test', [], {}, True, True, interactive = True) 1097 if queue_id < 0: return False, queue_id 1098 return True, queue_id
1099
1100 - def docmd_run_entropy_library_test(self, cmd, authenticator):
1101 1102 status, userdata, err_str = authenticator.docmd_userdata() 1103 uid = userdata.get('uid') 1104 gid = userdata.get('gid') 1105 1106 queue_id = self.HostInterface.add_to_queue(cmd, '', uid, gid, 'run_entropy_library_test', [], {}, True, True, interactive = True) 1107 if queue_id < 0: return False, queue_id 1108 return True, queue_id
1109
1110 - def docmd_run_entropy_checksum_test(self, cmd, myargs, authenticator):
1111 if len(myargs) < 2: 1112 return False,'wrong arguments' 1113 repoid = myargs[0] 1114 mode = myargs[1] 1115 1116 status, userdata, err_str = authenticator.docmd_userdata() 1117 uid = userdata.get('uid') 1118 gid = userdata.get('gid') 1119 1120 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'run_entropy_checksum_test', [repoid,mode], {}, True, False, interactive = True) 1121 if queue_id < 0: return False, queue_id 1122 return True, queue_id
1123
1124 - def docmd_run_entropy_treeupdates(self, cmd, myargs, authenticator):
1125 1126 if not myargs: 1127 return False,'wrong arguments' 1128 1129 status, userdata, err_str = authenticator.docmd_userdata() 1130 uid = userdata.get('uid') 1131 gid = userdata.get('gid') 1132 1133 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'run_entropy_treeupdates', [myargs[0]], {}, False, False, interactive = True) 1134 if queue_id < 0: return False, queue_id 1135 return True, queue_id
1136
1137 - def docmd_scan_entropy_mirror_updates(self, cmd, myargs, authenticator):
1138 1139 if not myargs: 1140 return False,'wrong arguments' 1141 1142 status, userdata, err_str = authenticator.docmd_userdata() 1143 uid = userdata.get('uid') 1144 gid = userdata.get('gid') 1145 1146 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'scan_entropy_mirror_updates', [myargs], {}, True, True, interactive = True) 1147 if queue_id < 0: return False, queue_id 1148 return True, queue_id
1149
1150 - def docmd_run_entropy_mirror_updates(self, cmd, myargs, authenticator):
1151 1152 if not myargs: 1153 return False,'wrong arguments' 1154 1155 serialized_string = '\n'.join(myargs) 1156 try: 1157 mydict = self.dumpTools.unserialize_string(serialized_string) 1158 except Exception, e: 1159 return False,'cannot parse data: %s' % (e,) 1160 1161 status, userdata, err_str = authenticator.docmd_userdata() 1162 uid = userdata.get('uid') 1163 gid = userdata.get('gid') 1164 1165 queue_id = self.HostInterface.add_to_queue(cmd, '<raw data>', uid, gid, 'run_entropy_mirror_updates', [mydict], {}, False, False, interactive = True) 1166 if queue_id < 0: return False, queue_id 1167 return True, queue_id
1168
1169 - def docmd_run_entropy_database_updates(self, cmd, myargs, authenticator):
1170 1171 to_add = {} 1172 to_remove = [] 1173 to_inject = [] 1174 to_add_string = '' 1175 to_remove_string = '' 1176 to_inject_string = '' 1177 if myargs: 1178 to_add_string = myargs[0].split(",") 1179 if len(myargs) > 1: 1180 to_remove_string = myargs[1].split(",") 1181 if len(myargs) > 2: 1182 to_inject_string = myargs[2].split(",") 1183 try: 1184 1185 for item in to_add_string: 1186 atom, counter, repoid = item.split(":") 1187 if not to_add.has_key(repoid): 1188 to_add[repoid] = [] 1189 to_add[repoid].append(atom) 1190 1191 for item in to_remove_string: 1192 idpackage, repoid = item.split(":") 1193 to_remove.append((idpackage, repoid,)) 1194 1195 for item in to_inject_string: 1196 idpackage, repoid = item.split(":") 1197 to_inject.append((idpackage, repoid,)) 1198 1199 except Exception, e: 1200 return False,'cannot run database updates properly: %s' % (e,) 1201 1202 status, userdata, err_str = authenticator.docmd_userdata() 1203 uid = userdata.get('uid') 1204 gid = userdata.get('gid') 1205 1206 queue_id = self.HostInterface.add_to_queue( 1207 cmd, ' '.join(myargs), uid, gid, 1208 'run_entropy_database_updates', [to_add,to_remove,to_inject], 1209 {}, False, True, interactive = True 1210 ) 1211 if queue_id < 0: return False, queue_id 1212 return True, queue_id
1213 1214
1215 - def docmd_search_entropy_packages(self, myargs):
1216 if len(myargs) < 3: 1217 return False,'wrong arguments' 1218 1219 repoid = myargs[0] 1220 search_type = myargs[1] 1221 search_string = ' '.join(myargs[2:]) 1222 avail_search_types = ['atom','needed','depends','tag','file','description'] 1223 1224 if search_type not in avail_search_types: 1225 return False, 'available search types: %s' % (avail_search_types,) 1226 1227 search_results = { 1228 'ordered_idpackages': set(), 1229 'data': {}, 1230 } 1231 1232 dbconn = self.HostInterface.Entropy.open_server_repository(repo = repoid, just_reading = True, warnings = False, do_cache = False) 1233 1234 if search_type == "atom": 1235 1236 mysearchlist = search_string.split() 1237 for mystring in mysearchlist: 1238 results = dbconn.searchPackages(mystring) 1239 for atom, idpackage, branch in results: 1240 data = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1241 if not data: continue 1242 search_results['ordered_idpackages'].add(idpackage) 1243 search_results['data'][idpackage] = data.copy() 1244 1245 elif search_type == "needed": 1246 1247 mysearchlist = search_string.split() 1248 for mystring in mysearchlist: 1249 idpackages = dbconn.searchNeeded(mystring, like = True) 1250 for idpackage in idpackages: 1251 search_results['ordered_idpackages'].add(idpackage) 1252 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1253 1254 elif search_type == "depends": 1255 1256 mysearchlist = search_string.split() 1257 for mystring in mysearchlist: 1258 m_idpackage, m_result = dbconn.atomMatch(mystring) 1259 if m_idpackage == -1: continue 1260 idpackages = dbconn.retrieveReverseDependencies(m_idpackage) 1261 for idpackage in idpackages: 1262 search_results['ordered_idpackages'].add(idpackage) 1263 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1264 1265 elif search_type == "tag": 1266 1267 mysearchlist = search_string.split() 1268 for mystring in mysearchlist: 1269 idpackages = dbconn.searchTaggedPackages(mystring) 1270 for idpackage in idpackages: 1271 search_results['ordered_idpackages'].add(idpackage) 1272 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1273 1274 elif search_type == "file": 1275 # belong 1276 1277 like = False 1278 if search_string.find("*") != -1: 1279 search_string.replace("*","%") 1280 like = True 1281 idpackages = dbconn.searchBelongs(search_string, like) 1282 for idpackage in idpackages: 1283 search_results['ordered_idpackages'].add(idpackage) 1284 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1285 1286 elif search_type == "description": 1287 1288 results = dbconn.searchPackagesByDescription(search_string) 1289 for atom, idpackage in results: 1290 search_results['ordered_idpackages'].add(idpackage) 1291 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1292 1293 elif search_type == "eclass": 1294 1295 mysearchlist = search_string.split() 1296 for eclass in mysearchlist: 1297 idpackages = dbconn.searchEclassedPackages(eclass) 1298 for idpackage in idpackages: 1299 search_results['ordered_idpackages'].add(idpackage) 1300 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1301 1302 1303 dbconn.closeDB() 1304 return True, search_results
1305
1306 - def docmd_get_notice_board(self, cmd, myargs, authenticator):
1307 1308 if not myargs: 1309 return False,'wrong arguments' 1310 repoid = myargs[0] 1311 1312 status, userdata, err_str = authenticator.docmd_userdata() 1313 uid = userdata.get('uid') 1314 gid = userdata.get('gid') 1315 1316 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'get_notice_board', [repoid], {}, True, True, interactive = True) 1317 if queue_id < 0: return False, queue_id 1318 return True, queue_id
1319
1320 - def docmd_remove_notice_board_entries(self, cmd, myargs, authenticator):
1321 1322 if len(myargs) < 2: 1323 return False,'wrong arguments' 1324 repoid = myargs[0] 1325 entry_ids = myargs[1:] 1326 1327 status, userdata, err_str = authenticator.docmd_userdata() 1328 uid = userdata.get('uid') 1329 gid = userdata.get('gid') 1330 1331 queue_id = self.HostInterface.add_to_queue( 1332 cmd, ' '.join([unicode(x) for x in myargs]), uid, gid, 1333 'remove_notice_board_entries', [repoid,entry_ids], {}, True, False, interactive = True 1334 ) 1335 if queue_id < 0: return False, queue_id 1336 return True, queue_id
1337
1338 - def docmd_add_notice_board_entry(self, cmd, myargs, authenticator):
1339 1340 if not myargs: 1341 return False,'wrong arguments' 1342 1343 xml_string = ' '.join(myargs) 1344 try: 1345 mydict = self.entropyTools.dict_from_xml(xml_string) 1346 except Exception, e: 1347 return None,"error: %s" % (e,) 1348 if not (mydict.has_key('repoid') and mydict.has_key('title') and \ 1349 mydict.has_key('notice_text') and mydict.has_key('link')): 1350 return None,'wrong dict arguments, xml must have 4 items with attr value -> repoid, title, notice_text, link' 1351 1352 repoid = mydict.get('repoid') 1353 title = mydict.get('title') 1354 notice_text = mydict.get('notice_text') 1355 link = mydict.get('link') 1356 1357 status, userdata, err_str = authenticator.docmd_userdata() 1358 uid = userdata.get('uid') 1359 gid = userdata.get('gid') 1360 1361 queue_id = self.HostInterface.add_to_queue( 1362 cmd, ' '.join(myargs), uid, gid, 1363 'add_notice_board_entry', [repoid,title,notice_text,link], {}, True, False, interactive = True 1364 ) 1365 if queue_id < 0: return False, queue_id 1366 return True, queue_id
1367
1368 - def _get_entropy_pkginfo(self, dbconn, idpackage, repoid):
1369 data = {} 1370 try: 1371 data['atom'], data['name'], data['version'], data['versiontag'], \ 1372 data['description'], data['category'], data['chost'], \ 1373 data['cflags'], data['cxxflags'],data['homepage'], \ 1374 data['license'], data['branch'], data['download'], \ 1375 data['digest'], data['slot'], data['etpapi'], \ 1376 data['datecreation'], data['size'], data['revision'] = dbconn.getBaseData(idpackage) 1377 except TypeError: 1378 return data 1379 data['injected'] = dbconn.isInjected(idpackage) 1380 data['repoid'] = repoid 1381 data['idpackage'] = idpackage 1382 return data
1383