def get_by_task_id(call: APICall, company_id, _): task_id = call.data["task"] with translate_errors_context(): query = dict(id=task_id, company=company_id) task = Task.get(_only=["output"], **query) if not task: raise errors.bad_request.InvalidTaskId(**query) if not task.output: raise errors.bad_request.MissingTaskFields(field="output") if not task.output.model: raise errors.bad_request.MissingTaskFields(field="output.model") model_id = task.output.model model = Model.objects( Q(id=model_id) & get_company_or_none_constraint(company_id)).first() if not model: raise errors.bad_request.InvalidModelId( "no such public or company model", id=model_id, company=company_id, ) model_dict = model.to_proper_dict() conform_output_tags(call, model_dict) call.result.data = {"model": model_dict}
def get_by_task_id(call): assert isinstance(call, APICall) task_id = call.data["task"] with translate_errors_context(): query = dict(id=task_id, company=call.identity.company) res = Task.get(_only=["output"], **query) if not res: raise errors.bad_request.InvalidTaskId(**query) if not res.output: raise errors.bad_request.MissingTaskFields(field="output") if not res.output.model: raise errors.bad_request.MissingTaskFields(field="output.model") model_id = res.output.model res = Model.objects( Q(id=model_id) & get_company_or_none_constraint(call.identity.company)).first() if not res: raise errors.bad_request.InvalidModelId( "no such public or company model", id=model_id, company=call.identity.company, ) call.result.data = {"model": res.to_proper_dict()}
def get_types(cls, company, project_ids: Optional[Sequence]) -> set: """ Return the list of unique task types used by company and public tasks If project ids passed then only tasks from these projects are considered """ query = get_company_or_none_constraint(company) if project_ids: query &= Q(project__in=project_ids) res = Task.objects(query).distinct(field="type") return set(res).intersection(external_task_types)
def get_frameworks(self, company, project_ids: Optional[Sequence]) -> Sequence: """ Return the list of unique frameworks used by company and public models If project ids passed then only models from these projects are considered """ query = get_company_or_none_constraint(company) if project_ids: query &= Q(project__in=project_ids) return Model.objects(query).distinct(field="framework")
def validate_execution_model(task, allow_only_public=False): if not task.execution or not task.execution.model: return company = None if allow_only_public else task.company model_id = task.execution.model model = Model.objects( Q(id=model_id) & get_company_or_none_constraint(company)).first() if not model: raise errors.bad_request.InvalidModelId(model=model_id) return model
def get_by_id(call): assert isinstance(call, APICall) project_id = call.data["project"] with translate_errors_context(): with TimingContext("mongo", "projects_by_id"): query = Q(id=project_id) & get_company_or_none_constraint( call.identity.company) project = Project.objects(query).first() if not project: raise errors.bad_request.InvalidProjectId(id=project_id) project_dict = project.to_proper_dict() conform_output_tags(call, project_dict) call.result.data = {"project": project_dict}
def get_many_public( cls, query: Q = None, projection: Collection[str] = None, ): """ Fetch all public documents matching a provided query. :param query: Optional query object (mongoengine.Q). :param projection: A list of projection fields. :return: A list of documents matching the query. """ q = get_company_or_none_constraint() _query = (q & query) if query else q return cls._get_many_no_company(query=_query, override_projection=projection)
def _prepare_perm_query(cls, company, allow_public=False): if allow_public: return get_company_or_none_constraint(company) return Q(company=company)