docs: def get_data(self, data_key, key=''):
          """Get the data from the cache.
  
          :param data_key: a key for accessing the data; 
          :param key: if provided (e.g. non-empty string), will be used to
                      decrypt the data as a password;
          :returns: the data extracted from the cache, a python object.
          """
  
          flag = False  # set to True if data was successfully extracted.
          extracted = self.get(data_key, -1)
  
          if extracted != -1:
              try:
                  data, expired, noc, ncalls = self._from_bytes(extracted, key=key)
                  flag = True
              except ValueError:
                  return None, flag
  
              if noc:
                  ncalls += 1
                  self[data_key] = self._to_bytes(data, expired=expired,
                                                  key=key, noc=noc,
                                                  ncalls=ncalls)
                  if ncalls >= noc:
                      self.remove(data_key)
                      flag = False
  
              if expired and datetime.datetime.now() > expired:
                  self.remove(data_key)
                  flag = False
  
          return (data, flag) if flag else (None, flag)