def __iter__(self):
     distroseries = self.findSeries(getUtility(ILaunchBag).user)
     series = sorted_dotted_numbers(
         [self.toTerm(s) for s in distroseries],
         key=lambda term: term.value.version)
     series.reverse()
     return iter(series)
    def active_series(self):
        """Return active distroseries where this package is published.

        Used in the template code that shows the table of versions.
        The returned series are sorted in reverse order of creation.
        """
        series = set()
        for package in self.active_distroseries_packages:
            series.add(package.distroseries)
        result = sorted_dotted_numbers(series,
                                       key=operator.attrgetter('version'))
        result.reverse()
        return result
    def active_series(self):
        """Return active distroseries where this package is published.

        Used in the template code that shows the table of versions.
        The returned series are sorted in reverse order of creation.
        """
        series = set()
        for package in self.active_distroseries_packages:
            series.add(package.distroseries)
        result = sorted_dotted_numbers(
            series, key=operator.attrgetter('version'))
        result.reverse()
        return result
    def getTimeline(self, include_inactive=False):
        landmarks = []
        for milestone in self.all_milestones[:MAX_TIMELINE_MILESTONES]:
            if milestone.product_release is None:
                # Skip inactive milestones, but include releases,
                # even if include_inactive is False.
                if not include_inactive and not milestone.active:
                    continue
                node_type = 'milestone'
                date = milestone.dateexpected
                uri = canonical_url(milestone, path_only_if_possible=True)
            else:
                node_type = 'release'
                date = milestone.product_release.datereleased
                uri = canonical_url(
                    milestone.product_release, path_only_if_possible=True)

            if isinstance(date, datetime.datetime):
                date = date.date().isoformat()
            elif isinstance(date, datetime.date):
                date = date.isoformat()

            entry = dict(
                name=milestone.name,
                code_name=milestone.code_name,
                type=node_type,
                date=date,
                uri=uri)
            landmarks.append(entry)

        landmarks = sorted_dotted_numbers(landmarks, key=landmark_key)
        landmarks.reverse()
        return TimelineProductSeries(
            name=self.name,
            is_development_focus=self.is_development_focus,
            status=self.status,
            uri=canonical_url(self, path_only_if_possible=True),
            landmarks=landmarks,
            product=self.product)
 def __iter__(self):
     distroseries = self.findSeries(getUtility(ILaunchBag).user)
     series = sorted_dotted_numbers([self.toTerm(s) for s in distroseries], key=lambda term: term.value.version)
     series.reverse()
     return iter(series)