code: def get_identity(self, subject_id, entities=None,
                       check_not_on_or_after=True):
          
          res = {}
          oldees = []
          if not entities:
              for item in self._cache.find({"subject_id": subject_id}):
                  try:
                      info = self._get_info(item, check_not_on_or_after)
                  except ToOld:
                      oldees.append(item["entity_id"])
                      continue
  
                  for key, vals in info["ava"].items():
                      try:
                          tmp = set(res[key]).union(set(vals))
                          res[key] = list(tmp)
                      except KeyError:
                          res[key] = vals
          else:
              for entity_id in entities:
                  try:
                      info = self.get(subject_id, entity_id,
                                      check_not_on_or_after)
                  except ToOld:
                      oldees.append(entity_id)
                      continue
  
                  for key, vals in info["ava"].items():
                      try:
                          tmp = set(res[key]).union(set(vals))
                          res[key] = list(tmp)
                      except KeyError:
                          res[key] = vals
  
          return res, oldees
docs: Get all the identity information that has been received and
          are still valid about the subject.
  
          :param subject_id: The identifier of the subject
          :param entities: The identifiers of the entities whoes assertions are
              interesting. If the list is empty all entities are interesting.
          :return: A 2-tuple consisting of the identity information (a
              dictionary of attributes and values) and the list of entities
              whoes information has timed out.