def _redis_fullkey(self, keypart): """Given a specific part of a new Redis key, create/return the fullkey""" return next_object_id( '{}{}{}'.format(self._base_keyname, self._keysep, keypart), redis_client=self._redis )
def __init__(self, *args, **kwargs): """ kwargs: - chfunc_dict: a dictionary where keys are characters and values are 2-item tuples - first item is a function accepting no arguments - use `functools.partial` if needed - second item is some 'help text' - sep: delimiter character used to separate parts of a Redis key - prefix: string that all Redis keys should start with - prompt: string to display when asking for input - redis_client: an object returned by `redis.StrictRedis()` """ self._chfunc_dict = kwargs.pop('chfunc_dict', {}) self._keysep = kwargs.pop('sep', ':') self._keyprefix = kwargs.pop('prefix', '') self._prompt = kwargs.pop('prompt', '\n> ') self._redis = kwargs.pop('redis_client', REDIS) self._DONT_LOG_CMDS = [ 'docstrings', 'errors', 'history', 'indices', 'session_keys', 'session_notes', 'shortcuts' ] self._method_names = [ m[0] for m in inspect.getmembers(self) if not m[0].startswith('_') ] self._method_docs = { method: getattr(self, method).__doc__ or '' for method in self._method_names } # Setup some things that Redis will use if self._keyprefix: self._base_keyname = next_object_id( '{}{}{}'.format( self._keyprefix, self._keysep, self.__class__.__name__ ), sep=self._keysep, redis_client=self._redis ) self._indexpattern = '{}{}idx{}*'.format( self._keyprefix, self._keysep, self._keysep ) else: self._base_keyname = next_object_id( '{}'.format(self.__class__.__name__), sep=self._keysep, redis_client=self._redis ) self._indexpattern = 'idx{}*'.format(self._keysep) self._session_notes_key = '{}{}notes0'.format( self._base_keyname, self._keysep )