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

Source Code for Module entropy.services.system.commands

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