docs: def get_limits(self, limit_sum=None):
          """
          Gets the current limit data if it is different from the data
          indicated by limit_sum.  The db argument is used for hydrating
          the limit objects.  Raises a NoChangeException if the
          limit_sum represents no change, otherwise returns a tuple
          consisting of the current limit_sum and a list of Limit
          objects.
          """
  
          with self.limit_lock:
              # Any changes?
              if limit_sum and self.limit_sum == limit_sum:
                  raise NoChangeException()
  
              # Return a tuple of the limits and limit sum
              return (self.limit_sum, self.limit_data)