def __init__(self, session, stream): myEnv, status = irods.getRodsEnv() conn, errMsg = irods.rcConnect(myEnv.getRodsHost(), myEnv.getRodsPort(), myEnv.getRodsUserName(), myEnv.getRodsZone()) status = irods.clientLogin(conn) if status: raise ConfigFileException("Cannot connect to iRODS: (%s) %s" % (status, errMsg)) home = myEnv.getRodsHome() c = irods.irodsCollection(conn, home) self.cxn = conn self.coll = c instream = stream # check if abs path to home dir if stream.startswith(home): stream = stream[len(home):] if stream[0] == "/": stream = stream[1:] colls = stream.split('/') for i, cln in enumerate(colls): exit_status = c.openCollection(cln) if exit_status < 0: if (i < len(colls) - 1) or \ (cln not in [obj[0] for obj in c.getObjects()]): raise IOError("When opening {0}: {1} does not exists in collection {2}".format(instream, cln, c.getCollName()))
def __init__(self, session, stream): # Check for dependency if irods is None: raise MissingDependencyException( '{0.__module__}.{0.__class__.__name__}'.format(self), 'irods (PyRods)' ) # Check for URL if stream.startswith(('irods://', 'rods://')): myEnv = parse_irodsUrl(stream) stream = myEnv.relpath else: # Get parameters from env status, myEnv = irods.getRodsEnv() try: host = myEnv.getRodsHost() port = myEnv.getRodsPort() username = myEnv.getRodsUserName() zone = myEnv.getRodsZone() home = myEnv.getRodsHome() except AttributeError: host = myEnv.rodsHost port = myEnv.rodsPort username = myEnv.rodsUserName zone = myEnv.rodsZone home = myEnv.rodsHome conn, errMsg = irods.rcConnect(host, port, username, zone) status = irods.clientLogin(conn) if status: raise ConfigFileException("Cannot connect to iRODS: ({0}) {1}" "".format(status, errMsg) ) c = irods.irodsCollection(conn) self.cxn = conn self.coll = c instream = stream # Check if abs path to home dir if stream.startswith(home): stream = stream[len(home):] if stream[0] == "/": stream = stream[1:] colls = stream.split('/') for i, cln in enumerate(colls): exit_status = c.openCollection(cln) if exit_status < 0: if ( (i < len(colls) - 1) or (cln not in [obj[0] for obj in c.getObjects()]) ): raise IOError("When opening {0}: {1} does not exists in " "collection {2}".format(instream, cln, c.getCollName() ) )
def _open(self, session): if self.cxn == None: # connect to iRODS myEnv, status = irods.getRodsEnv() host = self.host if self.host else myEnv.getRodsHost() port = self.port if self.port else myEnv.getRodsPort() user = self.user if self.user else myEnv.getRodsUserName() zone = self.zone if self.zone else myEnv.getRodsZone() conn, errMsg = irods.rcConnect(host, port, user, zone) if self.passwd: status = irods.clientLoginWithPassword(conn, self.passwd) else: status = irods.clientLogin(conn) if status: raise ConfigFileException("Cannot connect to iRODS: (%s) %s" % (status, errMsg.getMsg())) self.cxn = conn self.env = myEnv resources = irods.getResources(self.cxn) self.resourceHash = {} for r in resources: self.resourceHash[r.getName()] = r if self.coll != None: # already open, just skip return None c = irods.irodsCollection(self.cxn, self.env.getRodsHome()) self.coll = c # move into cheshire3 section path = self.get_path(session, 'irodsCollection', 'cheshire3') dirs = c.getSubCollections() if not path in dirs: c.createCollection(path) c.openCollection(path) if self.get_setting(session, 'createSubDir', 1): # now look for object's storage area # maybe move into database collection if (isinstance(self.parent, Database)): sc = self.parent.id dirs = c.getSubCollections() if not sc in dirs: c.createCollection(sc) c.openCollection(sc) # move into store collection dirs = c.getSubCollections() if not self.id in dirs: c.createCollection(self.id) c.openCollection(self.id)
def open_irodsUrl(url, mode='r'): """Open and return the file specified by an iRODS URL. Returns a file-like object - ``irods.IrodsFile`` """ if irods is None: raise MissingDependencyException("open_irodsUrl()", 'irods (PyRods)') parsed = parse_irodsUrl(url) conn, errMsg = irods.rcConnect(parsed.rodsHost, parsed.rodsPort, parsed.rodsUserName, parsed.rodsZone) status = irods.clientLogin(conn) return irods.irodsOpen(conn, parsed.path, mode)
def __init__(self): self.status, self.myEnv = irods.getRodsEnv() self.conn, self.errMsg = irods.rcConnect(self.myEnv.rodsHost, self.myEnv.rodsPort, self.myEnv.rodsUserName, self.myEnv.rodsZone) self.status = irods.clientLogin(self.conn) self.path = makePath(self.myEnv.rodsHome, FOLDER) # addSlash(self.myEnv.rodsHome, reduce(addSlash, FOLDER)) self.coll = irods.irodsCollection(self.conn, self.path) self.popen_opt = dict(shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def open(self): # pylint: disable=no-member conn, _err = irods.rcConnect(self.host, self.port, self.user, self.zone) if conn is None: raise IrodsError("Can't create connection to %s:%s " % (self.host, _err)) if self.password: irods.clientLoginWithPassword(conn, self.password) else: irods.clientLogin(conn) coll = irods.irodsCollection(conn) nm = coll.getCollName() self.irods_url = urlparse.urlunparse( list(self.irods_url)[:2] + [''] * 4) if self.path in ['', '/']: self.path = nm self.conn = conn self.base_dir = nm return self
def open_irodsUrl(url, mode='r'): """Open and return the file specified by an iRODS URL. Returns a file-like object - ``irods.IrodsFile`` """ if irods is None: raise MissingDependencyException("open_irodsUrl()", 'irods (PyRods)') parsed = parse_irodsUrl(url) conn, errMsg = irods.rcConnect(parsed.rodsHost, parsed.rodsPort, parsed.rodsUserName, parsed.rodsZone ) status = irods.clientLogin(conn) return irods.irodsOpen(conn, parsed.path, mode)
def _openIrods(self, session): if self.cxn is None: # connect to iRODS myEnv, status = irods.getRodsEnv() conn, errMsg = irods.rcConnect(myEnv.getRodsHost(), myEnv.getRodsPort(), myEnv.getRodsUserName(), myEnv.getRodsZone() ) status = irods.clientLogin(conn) if status: raise ConfigFileException("Cannot connect to iRODS: (%s) %s" "" % (status, errMsg)) self.cxn = conn self.env = myEnv if self.coll is not None: # already open, just skip return None c = irods.irodsCollection(self.cxn, self.env.getRodsHome()) self.coll = c # move into cheshire3 section path = self.get_path(session, 'irodsCollection', 'cheshire3') dirs = c.getSubCollections() if not path in dirs: c.createCollection(path) c.openCollection(path) # now look for object's storage area # maybe move into database collection if (isinstance(self.parent, Database)): sc = self.parent.id dirs = c.getSubCollections() if not sc in dirs: c.createCollection(sc) c.openCollection(sc) # move into store collection dirs = c.getSubCollections() if not self.id in dirs: c.createCollection(self.id) c.openCollection(self.id)
def _open(self, session): if self.cxn == None: # connect to iRODS myEnv, status = irods.getRodsEnv() host = self.host if self.host else myEnv.getRodsHost() port = self.port if self.port else myEnv.getRodsPort() user = self.user if self.user else myEnv.getRodsUserName() zone = self.zone if self.zone else myEnv.getRodsZone() conn, errMsg = irods.rcConnect(host, port, user, zone) if self.passwd: status = irods.clientLoginWithPassword(conn, self.passwd) else: status = irods.clientLogin(conn) if status: raise ConfigFileException("Cannot connect to iRODS: (%s) %s" % (status, errMsg)) self.cxn = conn self.env = myEnv resources = irods.getResources(self.cxn) self.resourceHash = {} for r in resources: self.resourceHash[r.getName()] = r if self.coll != None: # already open, just skip return None c = irods.irodsCollection(self.cxn, self.env.getRodsHome()) self.coll = c # move into cheshire3 section path = self.get_path(session, 'irodsCollection', 'cheshire3') dirs = c.getSubCollections() if not path in dirs: c.createCollection(path) c.openCollection(path) if self.get_setting(session, 'createSubDir', 1): # now look for object's storage area # maybe move into database collection if (isinstance(self.parent, Database)): sc = self.parent.id dirs = c.getSubCollections() if not sc in dirs: c.createCollection(sc) c.openCollection(sc) # move into store collection dirs = c.getSubCollections() if not self.id in dirs: c.createCollection(self.id) c.openCollection(self.id) # Fetch user metadata myMetadata = self.get_metadataTypes(session) umd = c.getUserMetadata() umdHash = {} for u in umd: umdHash[u[0]] = icatValToPy(*u[1:]) for md in myMetadata: try: setattr(self, md, umdHash[md]) except KeyError: # hasn't been set yet pass if self.totalItems != 0: self.meanWordCount = self.totalWordCount / self.totalItems self.meanByteCount = self.totalByteCount / self.totalItems else: self.meanWordCount = 1 self.meanByteCount = 1