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)