+ def check_quota(self, session):
+ """
+ Check whether topic quota is exceeded by the given project
+ Used by relevant topics' 'new' function to decide whether or not creation of the new item should be allowed
+ :param projects: projects (tuple) for which quota should be checked
+ :param override: boolean. If true, don't raise ValidationError even though quota be exceeded
+ :return: None
+ :raise:
+ DbException if project not found
+ ValidationError if quota exceeded and not overridden
+ """
+ if session["force"] or session["admin"]:
+ return
+ projects = session["project_id"]
+ for project in projects:
+ proj = self.auth.get_project(project)
+ pid = proj["_id"]
+ quota = proj.get("quotas", {}).get(self.topic, self.default_quota)
+ count = self.db.count(self.topic, {"_admin.projects_read": pid})
+ if count >= quota:
+ name = proj["name"]
+ raise ValidationError("{} quota ({}) exceeded for project {} ({})".format(self.topic, quota, name, pid))
+