Merge lp:~cjwatson/launchpad/ptuj-via-disk into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18586
Proposed branch: lp:~cjwatson/launchpad/ptuj-via-disk
Merge into: lp:launchpad
Diff against target: 59 lines (+22/-10)
1 file modified
lib/lp/soyuz/model/packagetranslationsuploadjob.py (+22/-10)
To merge this branch: bzr merge lp:~cjwatson/launchpad/ptuj-via-disk
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+338894@code.launchpad.net

Commit message

Make PackageTranslationsUploadJob download librarian files to disk rather than memory.

Description of the change

This seems like a better idea for files that are potentially hundreds of megabytes (hi, LibreOffice). I suspect that the gzip module will still buffer in memory, but this is a start.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/soyuz/model/packagetranslationsuploadjob.py'
--- lib/lp/soyuz/model/packagetranslationsuploadjob.py 2018-02-22 14:06:35 +0000
+++ lib/lp/soyuz/model/packagetranslationsuploadjob.py 2018-03-26 09:24:08 +0000
@@ -9,6 +9,8 @@
9 ]9 ]
1010
11import json11import json
12import os
13import tempfile
1214
13from lazr.delegates import delegate_to15from lazr.delegates import delegate_to
14from zope.component import getUtility16from zope.component import getUtility
@@ -28,6 +30,7 @@
28 )30 )
29from lp.services.job.runner import BaseRunnableJob31from lp.services.job.runner import BaseRunnableJob
30from lp.services.librarian.interfaces import ILibraryFileAliasSet32from lp.services.librarian.interfaces import ILibraryFileAliasSet
33from lp.services.librarian.utils import filechunks
31from lp.services.mail.sendmail import format_address_for_person34from lp.services.mail.sendmail import format_address_for_person
32from lp.soyuz.interfaces.packagetranslationsuploadjob import (35from lp.soyuz.interfaces.packagetranslationsuploadjob import (
33 IPackageTranslationsUploadJob,36 IPackageTranslationsUploadJob,
@@ -149,19 +152,28 @@
149 def attachTranslationFiles(self, by_maintainer):152 def attachTranslationFiles(self, by_maintainer):
150 distroseries = self.distroseries153 distroseries = self.distroseries
151 sourcepackagename = self.sourcepackagename154 sourcepackagename = self.sourcepackagename
155 libraryfilealias = self.libraryfilealias
152 only_templates = distroseries.getSourcePackage(156 only_templates = distroseries.getSourcePackage(
153 sourcepackagename).has_sharing_translation_templates157 sourcepackagename).has_sharing_translation_templates
154 importer = self.requester158 importer = self.requester
155 tarball = self.libraryfilealias.read()159 with tempfile.NamedTemporaryFile(
156160 prefix='package-translations-upload-job-') as tarball:
157 queue = getUtility(ITranslationImportQueue)161 libraryfilealias.open()
158162 try:
159 queue.addOrUpdateEntriesFromTarball(163 for chunk in filechunks(self.libraryfilealias):
160 tarball, by_maintainer, importer,164 tarball.write(chunk)
161 sourcepackagename=sourcepackagename,165 finally:
162 distroseries=distroseries,166 libraryfilealias.close()
163 filename_filter=_filter_ubuntu_translation_file,167 tarball.seek(0, os.SEEK_SET)
164 only_templates=only_templates)168
169 queue = getUtility(ITranslationImportQueue)
170
171 queue.addOrUpdateEntriesFromTarball(
172 tarball, by_maintainer, importer,
173 sourcepackagename=sourcepackagename,
174 distroseries=distroseries,
175 filename_filter=_filter_ubuntu_translation_file,
176 only_templates=only_templates)
165177
166 def run(self):178 def run(self):
167 self.attachTranslationFiles(True)179 self.attachTranslationFiles(True)