def configure(self, **kwargs): account = self._configure_account(**kwargs) connection_refresh_time = self.get_connection_refresh_time(**kwargs) logger.debug( "In iRODSSession's configure(). connection_refresh_time set to {}". format(connection_refresh_time)) self.pool = Pool(account, application_name=kwargs.pop('application_name', ''), connection_refresh_time=connection_refresh_time)
def __setstate__(self, state): for name, value in state.items(): # print(name, value) setattr(self, name, value) self.pool = Pool(state.get('account')) # , state.get('timeout'))
def configure(self, host=None, port=1247, user=None, zone=None, password=None, client_user=None, client_zone=None, server_dn=None, authentication_scheme='password'): account = iRODSAccount( host, int(port), user, zone, authentication_scheme, password, client_user, server_dn, client_zone) self.pool = Pool(account)
def configure(self, host=None, port=1247, user=None, zone=None, password=None, client_user=None, client_zone=None): account = iRODSAccount(host, int(port), user, zone, password, client_user, client_zone) self.pool = Pool(account)
def configure(self, host=None, port=1247, user=None, zone=None, password=None, client_user=None, client_zone=None, server_dn=None, authentication_scheme='password', irods_env_file=None, numThreads=0): if irods_env_file: creds = self.get_irods_env(irods_env_file) creds['password'] = self.get_irods_auth(creds) account = iRODSAccount(**creds) else: account = iRODSAccount(host, int(port), user, zone, authentication_scheme, password, client_user, server_dn, client_zone) self.pool = Pool(account) self.numThreads = numThreads
class iRODSSession(object): @property def env_file(self): return self._env_file @property def auth_file(self): return self._auth_file def __init__(self, configure=True, **kwargs): self.pool = None self.numThreads = 0 self._env_file = '' self._auth_file = '' self.do_configure = (kwargs if configure else {}) self.__configured = None if configure: self.__configured = self.configure(**kwargs) self.collections = CollectionManager(self) self.data_objects = DataObjectManager(self) self.metadata = MetadataManager(self) self.permissions = AccessManager(self) self.users = UserManager(self) self.user_groups = UserGroupManager(self) self.resources = ResourceManager(self) self.zones = ZoneManager(self) def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): self.cleanup() def __del__(self): self.do_configure = {} # If self.pool has been fully initialized (ie. no exception was # raised during __init__), then try to clean up. if self.pool is not None: self.cleanup() def cleanup(self): for conn in self.pool.active | self.pool.idle: try: conn.disconnect() except NetworkException: pass conn.release(True) if self.do_configure: self.__configured = self.configure(**self.do_configure) def _configure_account(self, **kwargs): try: env_file = kwargs['irods_env_file'] except KeyError: # For backward compatibility for key in ['host', 'port', 'authentication_scheme']: if key in kwargs: kwargs['irods_{}'.format(key)] = kwargs.pop(key) for key in ['user', 'zone']: if key in kwargs: kwargs['irods_{}_name'.format(key)] = kwargs.pop(key) return iRODSAccount(**kwargs) # Get credentials from irods environment file creds = self.get_irods_env(env_file, session_=self) # Update with new keywords arguments only creds.update( (key, value) for key, value in kwargs.items() if key not in creds) # Get auth scheme try: auth_scheme = creds['irods_authentication_scheme'] except KeyError: # default auth_scheme = 'native' if auth_scheme.lower() == PAM_AUTH_SCHEME: if 'password' in creds: return iRODSAccount(**creds) else: # password will be from irodsA file therefore use native login creds['irods_authentication_scheme'] = NATIVE_AUTH_SCHEME elif auth_scheme != 'native': return iRODSAccount(**creds) # Native auth, try to unscramble password try: creds['irods_authentication_uid'] = kwargs[ 'irods_authentication_uid'] except KeyError: pass missing_file_path = [] error_args = [] pw = creds['password'] = self.get_irods_password( session_=self, file_path_if_not_found=missing_file_path, **creds) if not pw and creds.get('irods_user_name') != 'anonymous': if missing_file_path: error_args += [ "Authentication file not found at {!r}".format( missing_file_path[0]) ] raise NonAnonymousLoginWithoutPassword(*error_args) return iRODSAccount(**creds) def configure(self, **kwargs): account = self.__configured if not account: account = self._configure_account(**kwargs) connection_refresh_time = self.get_connection_refresh_time(**kwargs) logger.debug( "In iRODSSession's configure(). connection_refresh_time set to {}". format(connection_refresh_time)) self.pool = Pool(account, application_name=kwargs.pop('application_name', ''), connection_refresh_time=connection_refresh_time) return account def query(self, *args): return Query(self, *args) @property def username(self): return self.pool.account.client_user @property def zone(self): return self.pool.account.client_zone @property def host(self): return self.pool.account.host @property def port(self): return self.pool.account.port @property def server_version(self): try: conn = next(iter(self.pool.active)) return conn.server_version except StopIteration: conn = self.pool.get_connection() version = conn.server_version conn.release() return version @property def pam_pw_negotiated(self): self.pool.account.store_pw = [] conn = self.pool.get_connection() pw = getattr(self.pool.account, 'store_pw', []) delattr(self.pool.account, 'store_pw') conn.release() return pw @property def default_resource(self): return self.pool.account.default_resource @default_resource.setter def default_resource(self, name): self.pool.account.default_resource = name @property def connection_timeout(self): return self.pool.connection_timeout @connection_timeout.setter def connection_timeout(self, seconds): self.pool.connection_timeout = seconds @staticmethod def get_irods_password_file(): try: return os.environ['IRODS_AUTHENTICATION_FILE'] except KeyError: return os.path.expanduser('~/.irods/.irodsA') @staticmethod def get_irods_env(env_file, session_=None): try: with open(env_file, 'rt') as f: j = json.load(f) if session_ is not None: session_._env_file = env_file return j except IOError: logger.debug("Could not open file {}".format(env_file)) return {} @staticmethod def get_irods_password(session_=None, file_path_if_not_found=(), **kwargs): path_memo = [] try: irods_auth_file = kwargs['irods_authentication_file'] except KeyError: irods_auth_file = iRODSSession.get_irods_password_file() try: uid = kwargs['irods_authentication_uid'] except KeyError: uid = None _retval = '' try: with open(irods_auth_file, 'r') as f: _retval = decode(f.read().rstrip('\n'), uid) return _retval except IOError as exc: if exc.errno != errno.ENOENT: raise # Auth file exists but can't be read path_memo = [irods_auth_file] return '' # No auth file (as with anonymous user) finally: if isinstance(file_path_if_not_found, list) and path_memo: file_path_if_not_found[:] = path_memo if session_ is not None and _retval: session_._auth_file = irods_auth_file def get_connection_refresh_time(self, **kwargs): connection_refresh_time = -1 connection_refresh_time = int(kwargs.get('refresh_time', -1)) if connection_refresh_time != -1: return connection_refresh_time try: env_file = kwargs['irods_env_file'] except KeyError: return connection_refresh_time if env_file is not None: env_file_map = self.get_irods_env(env_file) connection_refresh_time = int( env_file_map.get('irods_connection_refresh_time', -1)) if connection_refresh_time < 1: # Negative values are not allowed. logger.debug( 'connection_refresh_time in {} file has value of {}. Only values greater than 1 are allowed.' .format(env_file, connection_refresh_time)) connection_refresh_time = -1 return connection_refresh_time
def configure(self, **kwargs): account = self._configure_account(**kwargs) self.pool = Pool(account)
class iRODSSession(object): def __init__(self, configure=True, **kwargs): self.pool = None self.numThreads = 0 if configure: self.configure(**kwargs) self.collections = CollectionManager(self) self.data_objects = DataObjectManager(self) self.metadata = MetadataManager(self) self.permissions = AccessManager(self) self.users = UserManager(self) self.user_groups = UserGroupManager(self) self.resources = ResourceManager(self) def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): self.cleanup() def cleanup(self): for conn in self.pool.active | self.pool.idle: try: conn.disconnect() except NetworkException: pass conn.release(True) def _configure_account(self, **kwargs): try: env_file = kwargs['irods_env_file'] except KeyError: # For backward compatibility for key in ['host', 'port', 'authentication_scheme']: if key in kwargs: kwargs['irods_{}'.format(key)] = kwargs.pop(key) for key in ['user', 'zone']: if key in kwargs: kwargs['irods_{}_name'.format(key)] = kwargs.pop(key) return iRODSAccount(**kwargs) # Get credentials from irods environment file creds = self.get_irods_env(env_file) # Get auth scheme try: auth_scheme = creds['irods_authentication_scheme'] except KeyError: # default auth_scheme = 'native' if auth_scheme != 'native': return iRODSAccount(**creds) # Native auth, try to unscramble password try: creds['irods_authentication_uid'] = kwargs[ 'irods_authentication_uid'] except KeyError: pass creds['password'] = self.get_irods_password(**creds) return iRODSAccount(**creds) def configure(self, **kwargs): account = self._configure_account(**kwargs) self.pool = Pool(account) def query(self, *args): return Query(self, *args) @property def username(self): return self.pool.account.client_user @property def zone(self): return self.pool.account.client_zone @property def host(self): return self.pool.account.host @property def port(self): return self.pool.account.port @property def server_version(self): try: conn = next(iter(self.pool.active)) return conn.server_version except StopIteration: conn = self.pool.get_connection() version = conn.server_version conn.release() return version @property def default_resource(self): return self.pool.account.default_resource @default_resource.setter def default_resource(self, name): self.pool.account.default_resource = name @property def connection_timeout(self): return self.pool.connection_timeout @connection_timeout.setter def connection_timeout(self, seconds): self.pool.connection_timeout = seconds @staticmethod def get_irods_password_file(): try: return os.environ['IRODS_AUTHENTICATION_FILE'] except KeyError: return os.path.expanduser('~/.irods/.irodsA') @staticmethod def get_irods_env(env_file): with open(env_file, 'rt') as f: return json.load(f) @staticmethod def get_irods_password(**kwargs): try: irods_auth_file = kwargs['irods_authentication_file'] except KeyError: irods_auth_file = iRODSSession.get_irods_password_file() try: uid = kwargs['irods_authentication_uid'] except KeyError: uid = None with open(irods_auth_file, 'r') as f: return decode(f.read().rstrip('\n'), uid)
class iRODSSession(object): def __init__(self, configure=True, **kwargs): self.pool = None self.numThreads = 0 self.do_configure = (kwargs if configure else {}) self.__configured = None if configure: self.__configured = self.configure(**kwargs) self.collections = CollectionManager(self) self.data_objects = DataObjectManager(self) self.metadata = MetadataManager(self) self.permissions = AccessManager(self) self.users = UserManager(self) self.user_groups = UserGroupManager(self) self.resources = ResourceManager(self) self.zones = ZoneManager(self) def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): self.cleanup() def __del__(self): self.do_configure = {} self.cleanup() def cleanup(self): for conn in self.pool.active | self.pool.idle: try: conn.disconnect() except NetworkException: pass conn.release(True) if self.do_configure: self.__configured = self.configure(**self.do_configure) def _configure_account(self, **kwargs): try: env_file = kwargs['irods_env_file'] except KeyError: # For backward compatibility for key in ['host', 'port', 'authentication_scheme']: if key in kwargs: kwargs['irods_{}'.format(key)] = kwargs.pop(key) for key in ['user', 'zone']: if key in kwargs: kwargs['irods_{}_name'.format(key)] = kwargs.pop(key) return iRODSAccount(**kwargs) # Get credentials from irods environment file creds = self.get_irods_env(env_file) # Update with new keywords arguments only creds.update( (key, value) for key, value in kwargs.items() if key not in creds) # Get auth scheme try: auth_scheme = creds['irods_authentication_scheme'] except KeyError: # default auth_scheme = 'native' if auth_scheme.lower() == PAM_AUTH_SCHEME: if 'password' in creds: return iRODSAccount(**creds) else: # password will be from irodsA file therefore use native login creds['irods_authentication_scheme'] = NATIVE_AUTH_SCHEME elif auth_scheme != 'native': return iRODSAccount(**creds) # Native auth, try to unscramble password try: creds['irods_authentication_uid'] = kwargs[ 'irods_authentication_uid'] except KeyError: pass creds['password'] = self.get_irods_password(**creds) return iRODSAccount(**creds) def configure(self, **kwargs): account = self.__configured if not account: account = self._configure_account(**kwargs) connection_refresh_time = self.get_connection_refresh_time(**kwargs) logger.debug( "In iRODSSession's configure(). connection_refresh_time set to {}". format(connection_refresh_time)) self.pool = Pool(account, application_name=kwargs.pop('application_name', ''), connection_refresh_time=connection_refresh_time) return account def query(self, *args): return Query(self, *args) @property def username(self): return self.pool.account.client_user @property def zone(self): return self.pool.account.client_zone @property def host(self): return self.pool.account.host @property def port(self): return self.pool.account.port @property def server_version(self): try: conn = next(iter(self.pool.active)) return conn.server_version except StopIteration: conn = self.pool.get_connection() version = conn.server_version conn.release() return version @property def pam_pw_negotiated(self): self.pool.account.store_pw = [] conn = self.pool.get_connection() pw = getattr(self.pool.account, 'store_pw', []) delattr(self.pool.account, 'store_pw') conn.release() return pw @property def default_resource(self): return self.pool.account.default_resource @default_resource.setter def default_resource(self, name): self.pool.account.default_resource = name @property def connection_timeout(self): return self.pool.connection_timeout @connection_timeout.setter def connection_timeout(self, seconds): self.pool.connection_timeout = seconds @staticmethod def get_irods_password_file(): try: return os.environ['IRODS_AUTHENTICATION_FILE'] except KeyError: return os.path.expanduser('~/.irods/.irodsA') @staticmethod def get_irods_env(env_file): try: with open(env_file, 'rt') as f: return json.load(f) except IOError: logger.debug("Could not open file {}".format(env_file)) return {} @staticmethod def get_irods_password(**kwargs): try: irods_auth_file = kwargs['irods_authentication_file'] except KeyError: irods_auth_file = iRODSSession.get_irods_password_file() try: uid = kwargs['irods_authentication_uid'] except KeyError: uid = None with open(irods_auth_file, 'r') as f: return decode(f.read().rstrip('\n'), uid) def get_connection_refresh_time(self, **kwargs): connection_refresh_time = -1 connection_refresh_time = int(kwargs.get('refresh_time', -1)) if connection_refresh_time != -1: return connection_refresh_time try: env_file = kwargs['irods_env_file'] except KeyError: return connection_refresh_time if env_file is not None: env_file_map = self.get_irods_env(env_file) connection_refresh_time = int( env_file_map.get('irods_connection_refresh_time', -1)) if connection_refresh_time < 1: # Negative values are not allowed. logger.debug( 'connection_refresh_time in {} file has value of {}. Only values greater than 1 are allowed.' .format(env_file, connection_refresh_time)) connection_refresh_time = -1 return connection_refresh_time
class iRODSSession(object): def __init__(self, configure=True, **kwargs): self.pool = None self.numThreads = 0 if configure: self.configure(**kwargs) self.collections = CollectionManager(self) self.data_objects = DataObjectManager(self) self.metadata = MetadataManager(self) self.permissions = AccessManager(self) self.users = UserManager(self) self.user_groups = UserGroupManager(self) self.resources = ResourceManager(self) def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): self.cleanup() def cleanup(self): for conn in self.pool.active | self.pool.idle: try: conn.disconnect() except NetworkException: pass conn.release(True) def _configure_account(self, **kwargs): try: env_file = kwargs['irods_env_file'] except KeyError: # For backward compatibility for key in ['host', 'port', 'authentication_scheme']: if key in kwargs: kwargs['irods_{}'.format(key)] = kwargs.pop(key) for key in ['user', 'zone']: if key in kwargs: kwargs['irods_{}_name'.format(key)] = kwargs.pop(key) return iRODSAccount(**kwargs) # Get credentials from irods environment file creds = self.get_irods_env(env_file) # Update with new keywords arguments only creds.update((key, value) for key, value in kwargs.items() if key not in creds) # Get auth scheme try: auth_scheme = creds['irods_authentication_scheme'] except KeyError: # default auth_scheme = 'native' if auth_scheme != 'native': return iRODSAccount(**creds) # Native auth, try to unscramble password try: creds['irods_authentication_uid'] = kwargs['irods_authentication_uid'] except KeyError: pass creds['password'] = self.get_irods_password(**creds) return iRODSAccount(**creds) def configure(self, **kwargs): account = self._configure_account(**kwargs) self.pool = Pool(account) def query(self, *args): return Query(self, *args) @property def username(self): return self.pool.account.client_user @property def zone(self): return self.pool.account.client_zone @property def host(self): return self.pool.account.host @property def port(self): return self.pool.account.port @property def server_version(self): try: conn = next(iter(self.pool.active)) return conn.server_version except StopIteration: conn = self.pool.get_connection() version = conn.server_version conn.release() return version @property def default_resource(self): return self.pool.account.default_resource @default_resource.setter def default_resource(self, name): self.pool.account.default_resource = name @property def connection_timeout(self): return self.pool.connection_timeout @connection_timeout.setter def connection_timeout(self, seconds): self.pool.connection_timeout = seconds @staticmethod def get_irods_password_file(): try: return os.environ['IRODS_AUTHENTICATION_FILE'] except KeyError: return os.path.expanduser('~/.irods/.irodsA') @staticmethod def get_irods_env(env_file): with open(env_file, 'rt') as f: return json.load(f) @staticmethod def get_irods_password(**kwargs): try: irods_auth_file = kwargs['irods_authentication_file'] except KeyError: irods_auth_file = iRODSSession.get_irods_password_file() try: uid = kwargs['irods_authentication_uid'] except KeyError: uid = None with open(irods_auth_file, 'r') as f: return decode(f.read().rstrip('\n'), uid)
def configure(self, **kwargs): account = self._configure_account(**kwargs) self.pool = Pool(account, application_name = kwargs.pop('application_name',''))