def next(self): if self._caller == "pbs_python": if not hasattr(self, "bs") or self.bs == None: if not _pbs_v1.use_static_data(): pbs_disconnect(self.con) self.con = -1 raise StopIteration if _pbs_v1.use_static_data(): if (self.type == "jobs"): return _pbs_v1.get_job_static(self.bs.next(), self._connect_server, "") elif (self.type == "queues"): return _pbs_v1.get_queue_static( self.bs.next(), self._connect_server) elif (self.type == "resvs"): return _pbs_v1.get_resv_static(self.bs.next(), self._connect_server) elif (self.type == "vnodes"): return _pbs_v1.get_vnode_static( self.bs.next(), self._connect_server) else: _pbs_v1.logmsg( _pbs_v1.LOG_DEBUG, "pbs_iter/next: Bad object iterator type %s" % (self.type)) raise StopIteration return b = self.bs job = None _pbs_v1.set_c_mode() server_data_fp = _pbs_v1.get_server_data_fp() if (b): if (self.type == "jobs"): obj = _job(b.name, self._connect_server) header_str = "pbs.server().job(%s)" % (b.name, ) elif (self.type == "queues"): obj = _queue(b.name, self._connect_server) header_str = "pbs.server().queue(%s)" % (b.name, ) elif (self.type == "resvs"): obj = _resv(b.name, self._connect_server) header_str = "pbs.server().resv(%s)" % (b.name, ) elif (self.type == "vnodes"): obj = _vnode(b.name, self._connect_server) header_str = "pbs.server().vnode(%s)" % (b.name, ) else: _pbs_v1.logmsg( _pbs_v1.LOG_DEBUG, "pbs_iter/next: Bad object iterator type %s" % (self.type)) pbs_disconnect(self.con) self.con = -1 _pbs_v1.set_python_mode() raise StopIteration a = b.attribs while (a): n = a.name r = a.resource v = a.value if (self.type == "vnodes"): if (n == ATTR_NODE_state): v = _pbs_v1.str_to_vnode_state(v) elif (n == ATTR_NODE_ntype): v = _pbs_v1.str_to_vnode_ntype(v) elif (n == ATTR_NODE_Sharing): v = _pbs_v1.str_to_vnode_sharing(v) if (self.type == "jobs"): if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port: v = int(pbs_bool(v)) if (r): pr = getattr(obj, n) # if resource list does not exist, then set it if (pr == None): setattr(obj, n) pr = getattr(obj, n) if (pr == None): _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: missing %s" % (n)) a = a.next continue vo = getattr(pr, r) if (vo == None): setattr(pr, r, v) if server_data_fp: server_data_fp.write("%s.%s[%s]=%s\n" % (header_str, n, r, v)) else: # append value: # example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack" vl = [vo, v] setattr(pr, r, ",".join(vl)) if server_data_fp: server_data_fp.write( "%s.%s[%s]=%s\n" % (header_str, n, r, ",".join(vl))) else: vo = getattr(obj, n) if (vo == None): setattr(obj, n, v) if server_data_fp: server_data_fp.write("%s.%s=%s\n" % (header_str, n, v)) else: vl = [vo, v] setattr(obj, n, ",".join(vl)) if server_data_fp: server_data_fp.write( "%s.%s=%s\n" % (header_str, n, ",".join(vl))) a = a.next self.bs = b.next _pbs_v1.set_python_mode() return obj else: # argument 0 below tells C function we're inside next return _pbs_v1.iter_nextfunc(self, 0, self.obj_name, self.filter1, self.filter2)
def next(self): if self._caller == "pbs_python": if not hasattr(self, "bs") or self.bs == None: if not _pbs_v1.use_static_data(): pbs_disconnect(self.con) self.con = -1 raise StopIteration if _pbs_v1.use_static_data(): if( self.type == "jobs" ): return _pbs_v1.get_job_static(self.bs.next(), self._connect_server, "") elif( self.type == "queues" ): return _pbs_v1.get_queue_static(self.bs.next(), self._connect_server) elif( self.type == "resvs" ): return _pbs_v1.get_resv_static(self.bs.next(), self._connect_server) elif( self.type == "vnodes" ): return _pbs_v1.get_vnode_static(self.bs.next(), self._connect_server) else: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_iter/next: Bad object iterator type %s" % (self.type)) raise StopIteration return b = self.bs job = None _pbs_v1.set_c_mode() server_data_fp = _pbs_v1.get_server_data_fp(); if(b): if( self.type == "jobs" ): _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\ "pbs_iter/next: pbs_python mode not supported by NAS local mod") pbs_disconnect(self.con) self.con = -1 _pbs_v1.set_python_mode() raise StopIteration elif( self.type == "queues" ): obj=_queue(b.name, self._connect_server) header_str = "pbs.server().queue(%s)" % (b.name,) elif( self.type == "resvs" ): obj=_resv(b.name, self._connect_server) header_str = "pbs.server().resv(%s)" % (b.name,) elif( self.type == "vnodes" ): obj=_vnode(b.name, self._connect_server) header_str = "pbs.server().vnode(%s)" % (b.name,) else: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_iter/next: Bad object iterator type %s" % (self.type)) pbs_disconnect(self.con) self.con = -1 _pbs_v1.set_python_mode() raise StopIteration a=b.attribs while(a): n=a.name r=a.resource v=a.value if( self.type == "vnodes" ): if( n == ATTR_NODE_state ): v=_pbs_v1.str_to_vnode_state(v) elif( n == ATTR_NODE_ntype ): v=_pbs_v1.str_to_vnode_ntype(v) elif( n == ATTR_NODE_Sharing ): v=_pbs_v1.str_to_vnode_sharing(v) if( self.type == "jobs" ): if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port: v=int(pbs_bool(v)) if(r): pr=getattr(obj,n) # if resource list does not exist, then set it if( pr == None): setattr(obj,n) pr=getattr(obj,n) if (pr == None): _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: missing %s" % (n)) a=a.next continue vo=getattr(pr, r) if( vo == None ): setattr(pr,r,v) if server_data_fp: server_data_fp.write("%s.%s[%s]=%s\n" %(header_str,n,r,v)) else: # append value: # example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack" vl=[vo, v] setattr(pr, r, ",".join(vl)) if server_data_fp: server_data_fp.write("%s.%s[%s]=%s\n" % (header_str, n,r,",".join(vl))) else: vo=getattr(obj,n) if( vo == None ): setattr(obj,n,v) if server_data_fp: server_data_fp.write("%s.%s=%s\n" %(header_str,n,v)) else: vl=[vo, v] setattr(obj, n, ",".join(vl)) if server_data_fp: server_data_fp.write("%s.%s=%s\n" % (header_str, n, ",".join(vl))) a=a.next self.bs=b.next _pbs_v1.set_python_mode() return obj else: # argument 0 below tells C function we're inside next return _pbs_v1.iter_nextfunc(self, 0, self.obj_name, self.filter1, self.filter2, self.ignore_fin, self.filter_user)
def pbs_statobj(type, name=None, connect_server=None, filter_queue=None): """ Returns a PBS (e.g. _job, _queue, _resv, _vnode, _server) object that is populated with data obtained by calling PBS APIs: pbs_statjob(), pbs_statque(), pbs_statresv(), pbs_statvnode(), pbs_statserver(), using a connection handle to 'connect_server'. If 'type' is "job", then return the _job object. If 'type' is "queue", then return the _queue object. If 'type' is "resv", then return the _resv object. If 'type' is "vnode", then return the _vnode object. If 'type' is "server", then return the _server object. 'filter_queue' is used for a "job" type, which means the job must be in the queue 'filter_queue' for the job object to be instantiated. """ _pbs_v1.set_c_mode() server_data_fp = _pbs_v1.get_server_data_fp() if (connect_server == None): con = pbs_connect("localhost") else: con = pbs_connect(connect_server) if con < 0: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\ "pbs_statobj: Unable to connect to server %s" % (connect_server)) _pbs_v1.set_python_mode() return None if (type == "job"): bs = pbs_statjob(con, name, None, None) header_str = "pbs.server().job(%s)" % (name, ) elif (type == "queue"): bs = pbs_statque(con, name, None, None) header_str = "pbs.server().queue(%s)" % (name, ) elif (type == "vnode"): bs = pbs_statvnode(con, name, None, None) header_str = "pbs.server().vnode(%s)" % (name, ) elif (type == "resv"): bs = pbs_statresv(con, name, None, None) header_str = "pbs.server().resv(%s)" % (name, ) elif (type == "server"): bs = pbs_statserver(con, None, None) header_str = "pbs.server()" else: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: Bad object type %s" % (type)) pbs_disconnect(con) _pbs_v1.set_python_mode() return None b = bs obj = None while (b): if (type == "job"): obj = _job(b.name, connect_server) elif (type == "queue"): obj = _queue(b.name, connect_server) elif (type == "vnode"): obj = _vnode(b.name, connect_server) elif (type == "resv"): obj = _resv(b.name, connect_server) elif (type == "server"): obj = _server(b.name, connect_server) else: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: Bad object type %s" % (type)) pbs_disconnect(con) _pbs_v1.set_python_mode() return None a = b.attribs while (a): n = a.name r = a.resource v = a.value if (type == "vnode"): if (n == ATTR_NODE_state): v = _pbs_v1.str_to_vnode_state(v) elif (n == ATTR_NODE_ntype): v = _pbs_v1.str_to_vnode_ntype(v) elif (n == ATTR_NODE_Sharing): v = _pbs_v1.str_to_vnode_sharing(v) elif (type == "job"): if( (filter_queue != None) and (n == ATTR_queue) and \ (filter_queue != v) ): pbs_disconnect(con) _pbs_v1.set_python_mode() return None if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port: v = int(pbs_bool(v)) if (r): pr = getattr(obj, n) # instantiate Resource_List object if not set if (pr == None): setattr(obj, n) pr = getattr(obj, n) if (pr == None): _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: missing %s" % (n)) a = a.next continue vo = getattr(pr, r) if (vo == None): setattr(pr, r, v) if server_data_fp: server_data_fp.write("%s.%s[%s]=%s\n" % (header_str, n, r, v)) else: # append value... # example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack" vl = [vo, v] setattr(pr, r, ",".join(vl)) if server_data_fp: server_data_fp.write("%s.%s[%s]=%s\n" % (header_str, n, r, ",".join(vl))) else: vo = getattr(obj, n) if (vo == None): setattr(obj, n, v) if server_data_fp: server_data_fp.write("%s.%s=%s\n" % (header_str, n, v)) else: # append value vl = [vo, v] setattr(obj, n, ",".join(vl)) if server_data_fp: server_data_fp.write("%s.%s=%s\n" % (header_str, n, ",".join(vl))) a = a.next b = b.next pbs_disconnect(con) _pbs_v1.set_python_mode() return obj
def pbs_statobj(type, name=None, connect_server=None, filter_queue=None): """ Returns a PBS (e.g. _job, _queue, _resv, _vnode, _server) object that is populated with data obtained by calling PBS APIs: pbs_statjob(), pbs_statque(), pbs_statresv(), pbs_statvnode(), pbs_statserver(), using a connection handle to 'connect_server'. If 'type' is "job", then return the _job object. If 'type' is "queue", then return the _queue object. If 'type' is "resv", then return the _resv object. If 'type' is "vnode", then return the _vnode object. If 'type' is "server", then return the _server object. 'filter_queue' is used for a "job" type, which means the job must be in the queue 'filter_queue' for the job object to be instantiated. """ _pbs_v1.set_c_mode() server_data_fp = _pbs_v1.get_server_data_fp(); if( connect_server == None ): con=pbs_connect("localhost") else: con=pbs_connect(connect_server) if con < 0: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\ "pbs_statobj: Unable to connect to server %s" % (connect_server)) _pbs_v1.set_python_mode() return None if( type == "job" ): bs=pbs_statjob(con, name, None, None) header_str = "pbs.server().job(%s)" % (name,) elif( type == "queue" ): bs=pbs_statque(con, name, None, None) header_str = "pbs.server().queue(%s)" % (name,) elif( type == "vnode" ): bs=pbs_statvnode(con, name, None, None) header_str = "pbs.server().vnode(%s)" % (name,) elif( type == "resv" ): bs=pbs_statresv(con, name, None, None) header_str = "pbs.server().resv(%s)" % (name,) elif( type == "server" ): bs=pbs_statserver(con, None, None) header_str = "pbs.server()" else: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: Bad object type %s" % (type)) pbs_disconnect(con) _pbs_v1.set_python_mode() return None b = bs obj = None while(b): if( type == "job" ): obj=_job(b.name, connect_server) elif( type == "queue" ): obj=_queue(b.name, connect_server) elif( type == "vnode" ): obj=_vnode(b.name, connect_server) elif( type == "resv" ): obj=_resv(b.name, connect_server) elif( type == "server" ): obj=_server(b.name, connect_server) else: _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: Bad object type %s" % (type)) pbs_disconnect(con) _pbs_v1.set_python_mode() return None a=b.attribs while(a): n=a.name r=a.resource v=a.value if( type == "vnode" ): if( n == ATTR_NODE_state ): v=_pbs_v1.str_to_vnode_state(v) elif( n == ATTR_NODE_ntype ): v=_pbs_v1.str_to_vnode_ntype(v) elif( n == ATTR_NODE_Sharing ): v=_pbs_v1.str_to_vnode_sharing(v) elif( type == "job" ): if( (filter_queue != None) and (n == ATTR_queue) and \ (filter_queue != v) ): pbs_disconnect(con) _pbs_v1.set_python_mode() return None if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port: v=int(pbs_bool(v)) if(r): pr=getattr(obj,n) # instantiate Resource_List object if not set if( pr == None): setattr(obj,n) pr=getattr(obj,n) if (pr == None): _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: missing %s" % (n)) a=a.next continue vo=getattr(pr, r) if( vo == None ): setattr(pr,r,v) if server_data_fp: server_data_fp.write("%s.%s[%s]=%s\n" %(header_str,n,r,v)) else: # append value... # example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack" vl=[vo, v] setattr(pr, r, ",".join(vl)) if server_data_fp: server_data_fp.write("%s.%s[%s]=%s\n" % (header_str, n,r,",".join(vl))) else: vo=getattr(obj,n) if( vo == None ): setattr(obj,n,v) if server_data_fp: server_data_fp.write("%s.%s=%s\n" %(header_str,n,v)) else: # append value vl=[vo, v] setattr(obj, n, ",".join(vl)) if server_data_fp: server_data_fp.write("%s.%s=%s\n" % (header_str, n, ",".join(vl))) a=a.next b=b.next pbs_disconnect(con) _pbs_v1.set_python_mode() return obj