示例#1
0
 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
     )
示例#2
0
    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
        )