def getSpecifications(self, user): """See `IMilestoneData`""" from lp.registry.model.person import Person origin = [Specification] product_origin, clauses = get_specification_active_product_filter( self) origin.extend(product_origin) clauses.extend(get_specification_privacy_filter(user)) origin.append(LeftJoin(Person, Specification._assigneeID == Person.id)) milestones = self._milestone_ids_expr(user) results = Store.of(self.target).using(*origin).find( (Specification, Person), Specification.id.is_in( Union( Select( Specification.id, tables=[Specification], where=(Specification.milestoneID.is_in(milestones))), Select( SpecificationWorkItem.specification_id, tables=[SpecificationWorkItem], where=And( SpecificationWorkItem.milestone_id.is_in( milestones), SpecificationWorkItem.deleted == False)), all=True)), *clauses) ordered_results = results.order_by( Desc(Specification.priority), Specification.definition_status, Specification.implementation_status, Specification.title) ordered_results.config(distinct=True) return DecoratedResultSet(ordered_results, itemgetter(0))
def getSpecifications(self, user): """See `IMilestoneData`""" from lp.registry.model.person import Person origin = [Specification] product_origin, clauses = get_specification_active_product_filter(self) origin.extend(product_origin) clauses.extend(get_specification_privacy_filter(user)) origin.append(LeftJoin(Person, Specification._assigneeID == Person.id)) milestones = self._milestone_ids_expr(user) results = Store.of(self.target).using(*origin).find( (Specification, Person), Specification.id.is_in( Union(Select( Specification.id, tables=[Specification], where=(Specification.milestoneID.is_in(milestones))), Select(SpecificationWorkItem.specification_id, tables=[SpecificationWorkItem], where=And( SpecificationWorkItem.milestone_id.is_in( milestones), SpecificationWorkItem.deleted == False)), all=True)), *clauses) ordered_results = results.order_by(Desc(Specification.priority), Specification.definition_status, Specification.implementation_status, Specification.title) ordered_results.config(distinct=True) return DecoratedResultSet(ordered_results, itemgetter(0))
def spec_filter_clause(self, user, filter=None): """Figure out the appropriate query for specifications on a sprint. We separate out the query generation from the normal specifications() method because we want to reuse this query in the specificationLinks() method. """ # Avoid circular imports. from lp.blueprints.model.specification import Specification tables, query = get_specification_active_product_filter(self) tables.insert(0, Specification) query.append(get_specification_privacy_filter(user)) tables.append( Join(SprintSpecification, SprintSpecification.specification == Specification.id)) query.append(SprintSpecification.sprintID == self.id) if not filter: # filter could be None or [] then we decide the default # which for a sprint is to show everything approved filter = [SpecificationFilter.ACCEPTED] # figure out what set of specifications we are interested in. for # sprint, we need to be able to filter on the basis of: # # - completeness. # - acceptance for sprint agenda. # - informational. # sprint_status = [] # look for specs that have a particular SprintSpecification # status (proposed, accepted or declined) if SpecificationFilter.ACCEPTED in filter: sprint_status.append(SprintSpecificationStatus.ACCEPTED) if SpecificationFilter.PROPOSED in filter: sprint_status.append(SprintSpecificationStatus.PROPOSED) if SpecificationFilter.DECLINED in filter: sprint_status.append(SprintSpecificationStatus.DECLINED) statuses = [ SprintSpecification.status == status for status in sprint_status ] if len(statuses) > 0: query.append(Or(*statuses)) # Filter for specification text query.extend(get_specification_filters(filter, goalstatus=False)) return tables, query
def spec_filter_clause(self, user, filter=None): """Figure out the appropriate query for specifications on a sprint. We separate out the query generation from the normal specifications() method because we want to reuse this query in the specificationLinks() method. """ # Avoid circular imports. from lp.blueprints.model.specification import Specification tables, query = get_specification_active_product_filter(self) tables.insert(0, Specification) query.append(get_specification_privacy_filter(user)) tables.append(Join( SprintSpecification, SprintSpecification.specification == Specification.id)) query.append(SprintSpecification.sprintID == self.id) if not filter: # filter could be None or [] then we decide the default # which for a sprint is to show everything approved filter = [SpecificationFilter.ACCEPTED] # figure out what set of specifications we are interested in. for # sprint, we need to be able to filter on the basis of: # # - completeness. # - acceptance for sprint agenda. # - informational. # sprint_status = [] # look for specs that have a particular SprintSpecification # status (proposed, accepted or declined) if SpecificationFilter.ACCEPTED in filter: sprint_status.append(SprintSpecificationStatus.ACCEPTED) if SpecificationFilter.PROPOSED in filter: sprint_status.append(SprintSpecificationStatus.PROPOSED) if SpecificationFilter.DECLINED in filter: sprint_status.append(SprintSpecificationStatus.DECLINED) statuses = [SprintSpecification.status == status for status in sprint_status] if len(statuses) > 0: query.append(Or(*statuses)) # Filter for specification text query.extend(get_specification_filters(filter, goalstatus=False)) return tables, query