docs: def get_predicates(self, class_, controller=None):
          """Get full predicate information for given request class, and cache
          for subsequent calls.
          """
          if class_ not in self._predicates:
              if controller is None:
                  controller = self._find_controller(class_)
              else:
                  classes = self.request_controllers.get(controller, None)
                  if classes is None:
                      raise ValueError(
                          'Unknown request controller {!r}'.format(controller))
                  if class_ not in classes:
                      raise ValueError(
                          'Unknown request class {!r}'.format(class_))
  
              predicates_data = self._download_predicate_data(class_, controller)
              predicate_objects = self._parse_predicates_data(predicates_data)
              self._predicates[class_] = predicate_objects
  
          return self._predicates[class_]