Changeset 1639

Show
Ignore:
Timestamp:
08/14/06 14:14:34 (4 years ago)
Author:
benjamin.ragan-kelley
Message:

added legalTargets, multiTargets, getIDs helper functions to RemoteController?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ipython/branches/chainsaw/ipython1/kernel/controllerclient.py

    r1634 r1639  
    2828 
    2929arraytypeList = [] 
    30 #try: 
     30# try: 
    3131#    import Numeric 
    32 #except ImportError: 
     32# except ImportError: 
    3333#    pass 
    34 #else: 
     34# else: 
    3535#    arraytypeList.append(Numeric.arraytype) 
    3636try: 
     
    4040else: 
    4141    arraytypeList.append(numpy.ndarray) 
    42 #try: 
     42# try: 
    4343#    import numarray 
    44 #except ImportError: 
     44# except ImportError: 
    4545#    pass 
    46 #else: 
     46# else: 
    4747#    arraytypeList.append(numarray.numarraycore.NumArray) 
    4848 
     
    8787        self.__data = '' 
    8888        self.__buffer = '' 
     89        self.verbose = False 
    8990     
    9091    def writeNetstring(self,data): 
     
    9798            2. No errors are caught currently. 
    9899        """ 
     100        if self.verbose:  
     101            print "client:",data 
    99102        prefix = "%d:" % len(data) 
    100103         
     
    110113        while offset < lengthToSend: 
    111114            slice = buffer(data, offset, lengthToSend - offset) 
    112             amountWritten = self.sock.send(slice
     115            amountWritten = self.sock.send(slice[:65536]
    113116            offset += amountWritten 
    114117         
    115         self.sock.send(',') 
     118        return self.sock.send(',') 
    116119     
    117120     
     
    130133        self.__data = self.__data[1:] 
    131134        return True 
    132      
    133135     
    134136    def recvLength(self): 
     
    164166        string = self.__buffer 
    165167        self.__buffer = '' 
     168        if self.verbose: 
     169            print "controller:",string 
    166170        return string 
    167171     
     
    274278        if isinstance(ids, slice): 
    275279            #parse slice 
    276             idlist = rc.statusAll().keys() 
     280            idlist = rc.getIDs() 
    277281            if ids.step is None: 
    278282                step = 1 
     
    387391        self.es = NetstringSocket(self.s) 
    388392     
     393    def legalTargets(self, targets): 
     394        if isinstance(targets, int): 
     395            return targets >= 0 
     396        elif isinstance(targets, (list, tuple)): 
     397            if not targets: 
     398                return False 
     399            for t in targets: 
     400                if t < 0: 
     401                    return False 
     402            return True 
     403        elif targets == 'all': 
     404            return True 
     405        else: 
     406            return False 
     407     
     408    def multiTargets(self, targets): 
     409        return not isinstance(targets, int) and len(targets) > 1 
     410     
    389411    def executeAll(self, source, block=False): 
    390412        return self.execute('all', source, block) 
     
    406428                do not wait, return as soon as source has been sent, print nothing. 
    407429        """ 
     430        if not self.legalTargets(targets) or not source: 
     431            # need something to do 
     432            return False 
    408433        self._check_connection() 
    409         if isinstance(targets, list): 
     434        if isinstance(targets, (list, tuple)): 
    410435            targetstr = '::'.join(map(str, targets)) 
    411436        else: 
    412             targetstr = str(targets) 
    413          
    414         if not targetstr or not source: 
    415             # need something to do 
    416             return False 
     437            targetstr = str(targets)         
    417438         
    418439        if self.block or block: 
     
    441462                    print cmd 
    442463                else: 
    443                     print cmd 
    444464                    target = cmd[0] 
    445465                    cmd_num = cmd[1] 
     
    502522            The python objects to send and their remote keys.  i.e. a=1, b='asdf' 
    503523        """ 
     524        if not self.legalTargets(targets) or not namespace: 
     525            #need something to do 
     526            return False 
    504527        self._check_connection() 
    505         if isinstance(targets, list): 
     528        if isinstance(targets, (list, tuple)): 
    506529            targetstr = '::'.join(map(str, targets)) 
    507530        else: 
    508531            targetstr = str(targets) 
    509532         
    510         if not namespace or not targetstr: 
    511             #need something to send, someone to send it to 
    512             return False 
    513533         
    514534        self.es.writeNetstring("PUSH ::%s" % targetstr) 
     
    572592                        l.append(rc.pull(t, *keys)) 
    573593        """ 
    574         self._check_connection()     
    575         if isinstance(targets, list): 
     594        if not self.legalTargets(targets) or not keys: 
     595            # need something to do 
     596            return False 
     597        self._check_connection() 
     598         
     599        if isinstance(targets, (list, tuple)): 
    576600            targetstr = '::'.join(map(str, targets)) 
    577601        else: 
     
    582606            return False 
    583607         
    584         if not keys or not targetstr: 
    585             return False 
    586         multitargets = not isinstance(targets, int) and len(targets) > 1 
     608        multitargets = self.multiTargets(targets) 
    587609        self.es.writeNetstring("PULL %s::%s" % (keystr, targetstr)) 
    588610        string = self.es.readNetstring() 
     
    625647                results = [] 
    626648                string = self.es.readNetstring() 
    627         #finish command 
     649        #finish pulling 
    628650        if not returns: 
    629651            #if it was not a nested list 
     
    662684                 
    663685            """ 
    664         if not keys or targets is []
    665             return False 
    666         self._check_connection()     
    667         multitargets = not isinstance(targets, int) and len(targets) > 1 
    668             # this checks for valid id without doing *much* 
    669             # we do not want to do this 
     686        if not self.legalTargets(targets) or not keys
     687            # need something to do 
     688            return False 
     689        self._check_connection() 
     690         
     691        multitargets = self.multiTargets(targets) 
    670692        values = self.pull(targets, *keys) 
    671693        if values == False: 
    672694            # could be bad, but not *necessarily* 
    673695            if multitargets or len(keys) > 1: 
    674                 # guaranteed this should not be False 
     696                # definitely bad 
    675697                return False 
    676698            elif not self.execute(targets, ' '): 
    677699                # check bad target failure 
     700                # probably do not want to do this  
    678701                return False 
    679702         
     
    701724            returns = returns[0] 
    702725        return returns 
    703  
     726     
    704727    def getResult(self, targets, i=None): 
    705         """Gets a specific result from the kernels, returned as a tuple.""" 
     728        """Gets a specific result from the kernels, returned as a tuple, or  
     729            list of tuples if multiple targets.""" 
     730        if not self.legalTargets(targets): 
     731            # need something to do 
     732            return False 
    706733        self._check_connection()     
    707         if isinstance(targets, list): 
     734        if isinstance(targets, (list, tuple)): 
    708735            targetstr = '::'.join(map(str, targets)) 
    709736        else: 
    710737            targetstr = str(targets) 
    711          
    712         if not targetstr: 
    713             return False 
    714738         
    715739        if i is None: 
     
    728752            else: 
    729753                if string == "GETRESULT OK": 
    730                     if len(data) is 1 and targets != 'all'
     754                    if not self.multiTargets(targets)
    731755                        data = data[0] 
    732756                    return data 
     
    741765    def status(self, targets): 
    742766        """Check the status of the kernel.""" 
     767        if not self.legalTargets(targets): 
     768            # need something to do 
     769            return False 
    743770        self._check_connection() 
    744         if isinstance(targets, list): 
     771        if isinstance(targets, (list, tuple)): 
    745772            targetstr = '::'.join(map(str, targets)) 
    746773        else: 
    747774            targetstr = str(targets) 
    748          
    749         if not targetstr: 
    750             return False 
    751775         
    752776        self.es.writeNetstring("STATUS ::%s" %targetstr) 
     
    762786            else: 
    763787                if string == "STATUS OK": 
     788                    if not self.multiTargets(targets): 
     789                        data = data[0][1] 
    764790                    return data 
    765791                else: 
     
    768794            # For other data types 
    769795            pass 
     796     
     797    def getIDs(self): 
     798        status = self.statusAll() 
     799        if(status): 
     800            return zip(*self.statusAll())[0] 
     801        else: 
     802            return status 
    770803     
    771804    def notify(self, addr=None, flag=True): 
     
    814847    def reset(self, targets): 
    815848        """Clear the namespace if the kernel.""" 
     849        if not self.legalTargets(targets): 
     850            # need something to do 
     851            return False 
    816852        self._check_connection() 
    817         if isinstance(targets, list): 
     853        if isinstance(targets, (list, tuple)): 
    818854            targetstr = '::'.join(map(str, targets)) 
    819855        else: 
    820856            targetstr = str(targets) 
    821          
    822         if not targetstr: 
    823             return False 
    824857         
    825858        self.es.writeNetstring("RESET ::%s" %targetstr) 
     
    832865    def kill(self, targets): 
    833866        """Kill the engine completely.""" 
     867        if not self.legalTargets(targets): 
     868            # need something to do 
     869            return False 
    834870        self._check_connection()     
    835         if isinstance(targets, list): 
     871        if isinstance(targets, (list, tuple)): 
    836872            targetstr = '::'.join(map(str, targets)) 
    837873        else: 
    838874            targetstr = str(targets) 
    839          
    840         if not targetstr: 
    841             return False 
    842875         
    843876        self.es.writeNetstring("KILL ::%s" %targetstr)