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,os.SEEK_END) 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,os.SEEK_END) 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['branch'] = self.HostInterface.Entropy.SystemSettings['repositories']['branch'] 986 return True, data
987
988 - def docmd_set_default_repository(self, myargs):
989 990 if not myargs: 991 return False,'wrong arguments' 992 repoid = myargs[0] 993 if repoid not in self.HostInterface.Entropy.get_available_repositories(): 994 return False,'repository id not available' 995 996 status = True 997 msg = 'ok' 998 try: 999 self.HostInterface.Entropy.switch_default_repository(repoid, save = True, handle_uninitialized = False) 1000 except Exception, e: 1001 status = False 1002 msg = unicode(e) 1003 return status, msg
1004
1005 - def docmd_get_available_entropy_packages(self, myargs):
1006 1007 if not myargs: 1008 return False,'wrong arguments' 1009 repoid = myargs[0] 1010 if repoid not in self.HostInterface.Entropy.get_available_repositories(): 1011 return False,'repository id not available' 1012 1013 dbconn = self.HostInterface.Entropy.open_server_repository(repo = repoid, just_reading = True, warnings = False, do_cache = False) 1014 idpackages = dbconn.listAllIdpackages(order_by = 'atom') 1015 package_data = [] 1016 package_data = { 1017 'ordered_idpackages': idpackages, 1018 'data': {}, 1019 } 1020 for idpackage in idpackages: 1021 1022 data = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1023 if not data: continue 1024 package_data['data'][idpackage] = data.copy() 1025 dbconn.closeDB() 1026 return True,package_data
1027
1029 1030 if len(myargs) < 2: 1031 return False,'wrong arguments' 1032 idpackage = myargs[0] 1033 repoid = myargs[1] 1034 1035 dbconn = self.HostInterface.Entropy.open_server_repository(repo = repoid, just_reading = True, warnings = False, do_cache = False) 1036 package_data = dbconn.getPackageData(idpackage) 1037 dbconn.closeDB() 1038 return True,package_data
1039
1040 - def docmd_remove_entropy_packages(self, myargs):
1041 if not myargs: 1042 return False,'wrong arguments' 1043 string = myargs[0].split(",") 1044 matched_atoms = [] 1045 try: 1046 for item in string: 1047 mysplit = item.split(":") 1048 matched_atoms.append((int(mysplit[0]),mysplit[1],)) 1049 except: 1050 return False,'cannot eval() string correctly' 1051 1052 repo_data = {} 1053 for idpackage,repoid in matched_atoms: 1054 if not repo_data.has_key(repoid): 1055 repo_data[repoid] = [] 1056 repo_data[repoid].append(idpackage) 1057 1058 status = True 1059 msg = 'ok' 1060 try: 1061 for repoid in repo_data: 1062 self.HostInterface.Entropy.remove_packages(repo_data[repoid],repo = repoid) 1063 except Exception, e: 1064 status = False 1065 msg = unicode(e) 1066 1067 return status, msg
1068
1069 - def docmd_move_entropy_packages_to_repository(self, cmd, myargs, authenticator):
1070 1071 if len(myargs) < 4: 1072 return False,'wrong arguments' 1073 1074 status, userdata, err_str = authenticator.docmd_userdata() 1075 uid = userdata.get('uid') 1076 gid = userdata.get('gid') 1077 1078 from_repo = myargs[0] 1079 to_repo = myargs[1] 1080 do_copy = myargs[2] 1081 idpackages = myargs[3:] 1082 1083 queue_id = self.HostInterface.add_to_queue( 1084 cmd, ' '.join([str(x) for x in myargs]), 1085 uid, gid, 'move_entropy_packages_to_repository', 1086 [from_repo,to_repo,idpackages,do_copy], {}, False, True, 1087 interactive = True 1088 ) 1089 if queue_id < 0: return False, queue_id 1090 return True, queue_id
1091
1092 - def docmd_scan_entropy_packages_database_changes(self, cmd, authenticator):
1093 1094 status, userdata, err_str = authenticator.docmd_userdata() 1095 uid = userdata.get('uid') 1096 gid = userdata.get('gid') 1097 1098 queue_id = self.HostInterface.add_to_queue(cmd, '', uid, gid, 'scan_entropy_packages_database_changes', [], {}, True, True, interactive = True) 1099 if queue_id < 0: return False, queue_id 1100 return True, queue_id
1101
1102 - def docmd_run_entropy_dependency_test(self, cmd, authenticator):
1103 1104 status, userdata, err_str = authenticator.docmd_userdata() 1105 uid = userdata.get('uid') 1106 gid = userdata.get('gid') 1107 1108 queue_id = self.HostInterface.add_to_queue(cmd, '', uid, gid, 'run_entropy_dependency_test', [], {}, True, True, interactive = True) 1109 if queue_id < 0: return False, queue_id 1110 return True, queue_id
1111
1112 - def docmd_run_entropy_library_test(self, cmd, authenticator):
1113 1114 status, userdata, err_str = authenticator.docmd_userdata() 1115 uid = userdata.get('uid') 1116 gid = userdata.get('gid') 1117 1118 queue_id = self.HostInterface.add_to_queue(cmd, '', uid, gid, 'run_entropy_library_test', [], {}, True, True, interactive = True) 1119 if queue_id < 0: return False, queue_id 1120 return True, queue_id
1121
1122 - def docmd_run_entropy_checksum_test(self, cmd, myargs, authenticator):
1123 if len(myargs) < 2: 1124 return False,'wrong arguments' 1125 repoid = myargs[0] 1126 mode = myargs[1] 1127 1128 status, userdata, err_str = authenticator.docmd_userdata() 1129 uid = userdata.get('uid') 1130 gid = userdata.get('gid') 1131 1132 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'run_entropy_checksum_test', [repoid,mode], {}, True, False, interactive = True) 1133 if queue_id < 0: return False, queue_id 1134 return True, queue_id
1135
1136 - def docmd_run_entropy_treeupdates(self, cmd, myargs, authenticator):
1137 1138 if not myargs: 1139 return False,'wrong arguments' 1140 1141 status, userdata, err_str = authenticator.docmd_userdata() 1142 uid = userdata.get('uid') 1143 gid = userdata.get('gid') 1144 1145 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'run_entropy_treeupdates', [myargs[0]], {}, False, False, interactive = True) 1146 if queue_id < 0: return False, queue_id 1147 return True, queue_id
1148
1149 - def docmd_scan_entropy_mirror_updates(self, cmd, myargs, authenticator):
1150 1151 if not myargs: 1152 return False,'wrong arguments' 1153 1154 status, userdata, err_str = authenticator.docmd_userdata() 1155 uid = userdata.get('uid') 1156 gid = userdata.get('gid') 1157 1158 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'scan_entropy_mirror_updates', [myargs], {}, True, True, interactive = True) 1159 if queue_id < 0: return False, queue_id 1160 return True, queue_id
1161
1162 - def docmd_run_entropy_mirror_updates(self, cmd, myargs, authenticator):
1163 1164 if not myargs: 1165 return False,'wrong arguments' 1166 1167 serialized_string = '\n'.join(myargs) 1168 try: 1169 mydict = self.dumpTools.unserialize_string(serialized_string) 1170 except Exception, e: 1171 return False,'cannot parse data: %s' % (e,) 1172 1173 status, userdata, err_str = authenticator.docmd_userdata() 1174 uid = userdata.get('uid') 1175 gid = userdata.get('gid') 1176 1177 queue_id = self.HostInterface.add_to_queue(cmd, '<raw data>', uid, gid, 'run_entropy_mirror_updates', [mydict], {}, False, False, interactive = True) 1178 if queue_id < 0: return False, queue_id 1179 return True, queue_id
1180
1181 - def docmd_run_entropy_database_updates(self, cmd, myargs, authenticator):
1182 1183 to_add = {} 1184 to_remove = [] 1185 to_inject = [] 1186 to_add_string = '' 1187 to_remove_string = '' 1188 to_inject_string = '' 1189 if myargs: 1190 to_add_string = myargs[0].split(",") 1191 if len(myargs) > 1: 1192 to_remove_string = myargs[1].split(",") 1193 if len(myargs) > 2: 1194 to_inject_string = myargs[2].split(",") 1195 try: 1196 1197 for item in to_add_string: 1198 atom, counter, repoid = item.split(":") 1199 if not to_add.has_key(repoid): 1200 to_add[repoid] = [] 1201 to_add[repoid].append(atom) 1202 1203 for item in to_remove_string: 1204 idpackage, repoid = item.split(":") 1205 to_remove.append((idpackage, repoid,)) 1206 1207 for item in to_inject_string: 1208 idpackage, repoid = item.split(":") 1209 to_inject.append((idpackage, repoid,)) 1210 1211 except Exception, e: 1212 return False,'cannot run database updates properly: %s' % (e,) 1213 1214 status, userdata, err_str = authenticator.docmd_userdata() 1215 uid = userdata.get('uid') 1216 gid = userdata.get('gid') 1217 1218 queue_id = self.HostInterface.add_to_queue( 1219 cmd, ' '.join(myargs), uid, gid, 1220 'run_entropy_database_updates', [to_add,to_remove,to_inject], 1221 {}, False, True, interactive = True 1222 ) 1223 if queue_id < 0: return False, queue_id 1224 return True, queue_id
1225 1226
1227 - def docmd_search_entropy_packages(self, myargs):
1228 if len(myargs) < 3: 1229 return False,'wrong arguments' 1230 1231 repoid = myargs[0] 1232 search_type = myargs[1] 1233 search_string = ' '.join(myargs[2:]) 1234 avail_search_types = ['atom','needed','depends','tag','file','description'] 1235 1236 if search_type not in avail_search_types: 1237 return False, 'available search types: %s' % (avail_search_types,) 1238 1239 search_results = { 1240 'ordered_idpackages': set(), 1241 'data': {}, 1242 } 1243 1244 dbconn = self.HostInterface.Entropy.open_server_repository(repo = repoid, just_reading = True, warnings = False, do_cache = False) 1245 1246 if search_type == "atom": 1247 1248 mysearchlist = search_string.split() 1249 for mystring in mysearchlist: 1250 results = dbconn.searchPackages(mystring) 1251 for atom, idpackage, branch in results: 1252 data = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1253 if not data: continue 1254 search_results['ordered_idpackages'].add(idpackage) 1255 search_results['data'][idpackage] = data.copy() 1256 1257 elif search_type == "needed": 1258 1259 mysearchlist = search_string.split() 1260 for mystring in mysearchlist: 1261 idpackages = dbconn.searchNeeded(mystring, like = True) 1262 for idpackage in idpackages: 1263 search_results['ordered_idpackages'].add(idpackage) 1264 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1265 1266 elif search_type == "depends": 1267 1268 mysearchlist = search_string.split() 1269 for mystring in mysearchlist: 1270 m_idpackage, m_result = dbconn.atomMatch(mystring) 1271 if m_idpackage == -1: continue 1272 idpackages = dbconn.retrieveDepends(m_idpackage) 1273 for idpackage in idpackages: 1274 search_results['ordered_idpackages'].add(idpackage) 1275 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1276 1277 elif search_type == "tag": 1278 1279 mysearchlist = search_string.split() 1280 for mystring in mysearchlist: 1281 idpackages = dbconn.searchTaggedPackages(mystring) 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 == "file": 1287 # belong 1288 1289 like = False 1290 if search_string.find("*") != -1: 1291 search_string.replace("*","%") 1292 like = True 1293 idpackages = dbconn.searchBelongs(search_string, like) 1294 for idpackage in idpackages: 1295 search_results['ordered_idpackages'].add(idpackage) 1296 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1297 1298 elif search_type == "description": 1299 1300 results = dbconn.searchPackagesByDescription(search_string) 1301 for atom, idpackage in results: 1302 search_results['ordered_idpackages'].add(idpackage) 1303 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1304 1305 elif search_type == "eclass": 1306 1307 mysearchlist = search_string.split() 1308 for eclass in mysearchlist: 1309 idpackages = dbconn.searchEclassedPackages(eclass) 1310 for idpackage in idpackages: 1311 search_results['ordered_idpackages'].add(idpackage) 1312 search_results['data'][idpackage] = self._get_entropy_pkginfo(dbconn, idpackage, repoid) 1313 1314 1315 dbconn.closeDB() 1316 return True, search_results
1317
1318 - def docmd_get_notice_board(self, cmd, myargs, authenticator):
1319 1320 if not myargs: 1321 return False,'wrong arguments' 1322 repoid = myargs[0] 1323 1324 status, userdata, err_str = authenticator.docmd_userdata() 1325 uid = userdata.get('uid') 1326 gid = userdata.get('gid') 1327 1328 queue_id = self.HostInterface.add_to_queue(cmd, ' '.join(myargs), uid, gid, 'get_notice_board', [repoid], {}, True, True, interactive = True) 1329 if queue_id < 0: return False, queue_id 1330 return True, queue_id
1331
1332 - def docmd_remove_notice_board_entries(self, cmd, myargs, authenticator):
1333 1334 if len(myargs) < 2: 1335 return False,'wrong arguments' 1336 repoid = myargs[0] 1337 entry_ids = myargs[1:] 1338 1339 status, userdata, err_str = authenticator.docmd_userdata() 1340 uid = userdata.get('uid') 1341 gid = userdata.get('gid') 1342 1343 queue_id = self.HostInterface.add_to_queue( 1344 cmd, ' '.join([unicode(x) for x in myargs]), uid, gid, 1345 'remove_notice_board_entries', [repoid,entry_ids], {}, True, False, interactive = True 1346 ) 1347 if queue_id < 0: return False, queue_id 1348 return True, queue_id
1349
1350 - def docmd_add_notice_board_entry(self, cmd, myargs, authenticator):
1351 1352 if not myargs: 1353 return False,'wrong arguments' 1354 1355 xml_string = ' '.join(myargs) 1356 try: 1357 mydict = self.entropyTools.dict_from_xml(xml_string) 1358 except Exception, e: 1359 return None,"error: %s" % (e,) 1360 if not (mydict.has_key('repoid') and mydict.has_key('title') and \ 1361 mydict.has_key('notice_text') and mydict.has_key('link')): 1362 return None,'wrong dict arguments, xml must have 4 items with attr value -> repoid, title, notice_text, link' 1363 1364 repoid = mydict.get('repoid') 1365 title = mydict.get('title') 1366 notice_text = mydict.get('notice_text') 1367 link = mydict.get('link') 1368 1369 status, userdata, err_str = authenticator.docmd_userdata() 1370 uid = userdata.get('uid') 1371 gid = userdata.get('gid') 1372 1373 queue_id = self.HostInterface.add_to_queue( 1374 cmd, ' '.join(myargs), uid, gid, 1375 'add_notice_board_entry', [repoid,title,notice_text,link], {}, True, False, interactive = True 1376 ) 1377 if queue_id < 0: return False, queue_id 1378 return True, queue_id
1379
1380 - def _get_entropy_pkginfo(self, dbconn, idpackage, repoid):
1381 data = {} 1382 try: 1383 data['atom'], data['name'], data['version'], data['versiontag'], \ 1384 data['description'], data['category'], data['chost'], \ 1385 data['cflags'], data['cxxflags'],data['homepage'], \ 1386 data['license'], data['branch'], data['download'], \ 1387 data['digest'], data['slot'], data['etpapi'], \ 1388 data['datecreation'], data['size'], data['revision'] = dbconn.getBaseData(idpackage) 1389 except TypeError: 1390 return data 1391 data['injected'] = dbconn.isInjected(idpackage) 1392 data['repoid'] = repoid 1393 data['idpackage'] = idpackage 1394 return data
1395