def _getRequestedExportsNames(self):
        """Return a list of display names for requested exports."""
        requested_names = []
        for translation_object in self.requested_exports:
            if IPOTemplate.providedBy(translation_object):
                request_name = translation_object.displayname
            else:
                request_name = translation_object.title
            requested_names.append(request_name)

        return requested_names
    def _getRequestedExportsNames(self):
        """Return a list of display names for requested exports."""
        requested_names = []
        for translation_object in self.requested_exports:
            if IPOTemplate.providedBy(translation_object):
                request_name = translation_object.displayname
            else:
                request_name = translation_object.title
            requested_names.append(request_name)

        return requested_names
    def _getShortRequestName(self, request):
        """Return a short request name for use in email subjects."""
        if IPOFile.providedBy(request):
            title = '%s translation of %s' % (
                request.language.englishname,
                request.potemplate.name)
            productseries = request.potemplate.productseries
            distroseries = request.potemplate.distroseries
            sourcepackagename = request.potemplate.sourcepackagename
        elif IPOTemplate.providedBy(request):
            title = '%s template' % (request.name)
            productseries = request.productseries
            distroseries = request.distroseries
            sourcepackagename = request.sourcepackagename
        elif IProductSeries.providedBy(request):
            title = None
            productseries = request
            distroseries = None
            sourcepackagename = None
        elif ISourcePackage.providedBy(request):
            title = None
            productseries = None
            distroseries = request.distroseries
            sourcepackagename = request.sourcepackagename
        else:
            raise AssertionError(
                "We can not figure out short name for this translation "
                "export origin.")

        if productseries is not None:
            root = '%s %s' % (
                productseries.product.displayname,
                productseries.name)
        else:
            root = '%s %s %s' % (
                distroseries.distribution.displayname,
                distroseries.displayname,
                sourcepackagename.name)
        if title is not None:
            return '%s - %s' % (root, title)
        else:
            return root
    def _getShortRequestName(self, request):
        """Return a short request name for use in email subjects."""
        if IPOFile.providedBy(request):
            title = '%s translation of %s' % (request.language.englishname,
                                              request.potemplate.name)
            productseries = request.potemplate.productseries
            distroseries = request.potemplate.distroseries
            sourcepackagename = request.potemplate.sourcepackagename
        elif IPOTemplate.providedBy(request):
            title = '%s template' % (request.name)
            productseries = request.productseries
            distroseries = request.distroseries
            sourcepackagename = request.sourcepackagename
        elif IProductSeries.providedBy(request):
            title = None
            productseries = request
            distroseries = None
            sourcepackagename = None
        elif ISourcePackage.providedBy(request):
            title = None
            productseries = None
            distroseries = request.distroseries
            sourcepackagename = request.sourcepackagename
        else:
            raise AssertionError(
                "We can not figure out short name for this translation "
                "export origin.")

        if productseries is not None:
            root = '%s %s' % (productseries.product.displayname,
                              productseries.name)
        else:
            root = '%s %s %s' % (distroseries.distribution.displayname,
                                 distroseries.displayname,
                                 sourcepackagename.name)
        if title is not None:
            return '%s - %s' % (root, title)
        else:
            return root
    def _getExportRequestOrigin(self):
        """Figure out where an export request was made."""
        # Determine all objects that export request could have
        # originated on.
        export_requested_at = None
        pofiles = set()
        implicit_potemplates = set()
        direct_potemplates = set()
        productseries = set()
        sourcepackages = set()

        last_template_name = None
        for request in self.requested_exports:
            if IPOTemplate.providedBy(request):
                # If we are exporting a template, add it to
                # the list of directly requested potemplates.
                potemplate = request
                direct_potemplates.add(potemplate)
            else:
                # Otherwise, we are exporting a POFile.
                potemplate = request.potemplate
                implicit_potemplates.add(potemplate)
                pofiles.add(request)
            if potemplate.displayname != last_template_name:
                self.logger.debug(
                    'Exporting objects for %s, related to template %s'
                    % (self.person.displayname, potemplate.displayname))
                last_template_name = potemplate.displayname

            # Determine productseries or sourcepackage for any
            # productseries/sourcepackage an export was requested at.
            if potemplate.productseries is not None:
                productseries.add(potemplate.productseries)
            elif potemplate.sourcepackagename is not None:
                sourcepackage = potemplate.distroseries.getSourcePackage(
                    potemplate.sourcepackagename)
                sourcepackages.add(sourcepackage)
            else:
                raise AssertionError(
                    "Requesting a translation export which belongs to "
                    "neither a ProductSeries nor a SourcePackage.")

        if len(pofiles) == 1 and len(direct_potemplates) == 0:
            # One POFile was requested.
            export_requested_at = pofiles.pop()
        elif len(pofiles) == 0 and len(direct_potemplates) == 1:
            # A POTemplate was requested.
            export_requested_at = direct_potemplates.pop()
        elif len(pofiles) + len(direct_potemplates) >= 2:
            # More than one file was requested.
            all_potemplates = implicit_potemplates.union(direct_potemplates)
            if len(all_potemplates) == 1:
                # It's all part of a single POTemplate.
                export_requested_at = all_potemplates.pop()
            else:
                # More than one POTemplate: request was made on
                # either ProductSeries or SourcePackage.
                if len(sourcepackages) > 0:
                    export_requested_at = sourcepackages.pop()
                elif len(productseries) > 0:
                    export_requested_at = productseries.pop()

        if IPOTemplate.providedBy(export_requested_at):
            if len(sourcepackages) > 0:
                container = sourcepackages.pop()
            elif len(productseries) > 0:
                container = productseries.pop()
            else:
                raise AssertionError(
                    "Requesting a translation export which belongs to "
                    "neither a ProductSeries nor a SourcePackage.")
            if container.getCurrentTranslationTemplates().count() == 1:
                export_requested_at = container

        return export_requested_at
    def addRequest(self, person, potemplates=None, pofiles=None,
            format=TranslationFileFormat.PO):
        """See `IPOExportRequestSet`."""
        if potemplates is None:
            potemplates = []
        elif IPOTemplate.providedBy(potemplates):
            # Allow single POTemplate as well as list of POTemplates
            potemplates = [potemplates]
        if pofiles is None:
            pofiles = []

        if not (potemplates or pofiles):
            raise AssertionError(
                "Can't add a request with no PO templates and no PO files.")

        potemplate_ids = ", ".join(
            [quote(template) for template in potemplates])
        # A null pofile stands for the template itself.  We represent it in
        # SQL as -1, because that's how it's indexed in the request table.
        pofile_ids = ", ".join([quote(pofile) for pofile in pofiles] + ["-1"])

        query_params = {
            'person': quote(person),
            'format': quote(format),
            'templates': potemplate_ids,
            'pofiles': pofile_ids,
            }

        store = IMasterStore(POExportRequest)

        if potemplates:
            # Create requests for all these templates, insofar as the same
            # user doesn't already have requests pending for them in the same
            # format.
            store.execute("""
                INSERT INTO POExportRequest(person, potemplate, format)
                SELECT %(person)s, template.id, %(format)s
                FROM POTemplate AS template
                LEFT JOIN POExportRequest AS existing ON
                    existing.person = %(person)s AND
                    existing.potemplate = template.id AND
                    existing.pofile IS NULL AND
                    existing.format = %(format)s
                WHERE
                    template.id IN (%(templates)s) AND
                    existing.id IS NULL
            """ % query_params)

        if pofiles:
            # Create requests for all these translations, insofar as the same
            # user doesn't already have identical requests pending.
            store.execute("""
                INSERT INTO POExportRequest(
                    person, potemplate, pofile, format)
                SELECT %(person)s, template.id, pofile.id, %(format)s
                FROM POFile
                JOIN POTemplate AS template ON template.id = POFile.potemplate
                LEFT JOIN POExportRequest AS existing ON
                    existing.person = %(person)s AND
                    existing.pofile = POFile.id AND
                    existing.format = %(format)s
                WHERE
                    POFile.id IN (%(pofiles)s) AND
                    existing.id IS NULL
                """ % query_params)
Exemple #7
0
    def addRequest(self,
                   person,
                   potemplates=None,
                   pofiles=None,
                   format=TranslationFileFormat.PO):
        """See `IPOExportRequestSet`."""
        if potemplates is None:
            potemplates = []
        elif IPOTemplate.providedBy(potemplates):
            # Allow single POTemplate as well as list of POTemplates
            potemplates = [potemplates]
        if pofiles is None:
            pofiles = []

        if not (potemplates or pofiles):
            raise AssertionError(
                "Can't add a request with no PO templates and no PO files.")

        potemplate_ids = ", ".join(
            [quote(template) for template in potemplates])
        # A null pofile stands for the template itself.  We represent it in
        # SQL as -1, because that's how it's indexed in the request table.
        pofile_ids = ", ".join([quote(pofile) for pofile in pofiles] + ["-1"])

        query_params = {
            'person': quote(person),
            'format': quote(format),
            'templates': potemplate_ids,
            'pofiles': pofile_ids,
        }

        store = IMasterStore(POExportRequest)

        if potemplates:
            # Create requests for all these templates, insofar as the same
            # user doesn't already have requests pending for them in the same
            # format.
            store.execute("""
                INSERT INTO POExportRequest(person, potemplate, format)
                SELECT %(person)s, template.id, %(format)s
                FROM POTemplate AS template
                LEFT JOIN POExportRequest AS existing ON
                    existing.person = %(person)s AND
                    existing.potemplate = template.id AND
                    existing.pofile IS NULL AND
                    existing.format = %(format)s
                WHERE
                    template.id IN (%(templates)s) AND
                    existing.id IS NULL
            """ % query_params)

        if pofiles:
            # Create requests for all these translations, insofar as the same
            # user doesn't already have identical requests pending.
            store.execute("""
                INSERT INTO POExportRequest(
                    person, potemplate, pofile, format)
                SELECT %(person)s, template.id, pofile.id, %(format)s
                FROM POFile
                JOIN POTemplate AS template ON template.id = POFile.potemplate
                LEFT JOIN POExportRequest AS existing ON
                    existing.person = %(person)s AND
                    existing.pofile = POFile.id AND
                    existing.format = %(format)s
                WHERE
                    POFile.id IN (%(pofiles)s) AND
                    existing.id IS NULL
                """ % query_params)
    def _getExportRequestOrigin(self):
        """Figure out where an export request was made."""
        # Determine all objects that export request could have
        # originated on.
        export_requested_at = None
        pofiles = set()
        implicit_potemplates = set()
        direct_potemplates = set()
        productseries = set()
        sourcepackages = set()

        last_template_name = None
        for request in self.requested_exports:
            if IPOTemplate.providedBy(request):
                # If we are exporting a template, add it to
                # the list of directly requested potemplates.
                potemplate = request
                direct_potemplates.add(potemplate)
            else:
                # Otherwise, we are exporting a POFile.
                potemplate = request.potemplate
                implicit_potemplates.add(potemplate)
                pofiles.add(request)
            if potemplate.displayname != last_template_name:
                self.logger.debug(
                    'Exporting objects for %s, related to template %s' %
                    (self.person.displayname, potemplate.displayname))
                last_template_name = potemplate.displayname

            # Determine productseries or sourcepackage for any
            # productseries/sourcepackage an export was requested at.
            if potemplate.productseries is not None:
                productseries.add(potemplate.productseries)
            elif potemplate.sourcepackagename is not None:
                sourcepackage = potemplate.distroseries.getSourcePackage(
                    potemplate.sourcepackagename)
                sourcepackages.add(sourcepackage)
            else:
                raise AssertionError(
                    "Requesting a translation export which belongs to "
                    "neither a ProductSeries nor a SourcePackage.")

        if len(pofiles) == 1 and len(direct_potemplates) == 0:
            # One POFile was requested.
            export_requested_at = pofiles.pop()
        elif len(pofiles) == 0 and len(direct_potemplates) == 1:
            # A POTemplate was requested.
            export_requested_at = direct_potemplates.pop()
        elif len(pofiles) + len(direct_potemplates) >= 2:
            # More than one file was requested.
            all_potemplates = implicit_potemplates.union(direct_potemplates)
            if len(all_potemplates) == 1:
                # It's all part of a single POTemplate.
                export_requested_at = all_potemplates.pop()
            else:
                # More than one POTemplate: request was made on
                # either ProductSeries or SourcePackage.
                if len(sourcepackages) > 0:
                    export_requested_at = sourcepackages.pop()
                elif len(productseries) > 0:
                    export_requested_at = productseries.pop()

        if IPOTemplate.providedBy(export_requested_at):
            if len(sourcepackages) > 0:
                container = sourcepackages.pop()
            elif len(productseries) > 0:
                container = productseries.pop()
            else:
                raise AssertionError(
                    "Requesting a translation export which belongs to "
                    "neither a ProductSeries nor a SourcePackage.")
            if container.getCurrentTranslationTemplates().count() == 1:
                export_requested_at = container

        return export_requested_at