def rebuild(location, upload, sdk_source_dir, hashtag, package_overrides={}, filename=None, pingback=None, post=None, **kwargs): """creates a Repackage instance, downloads xpi and rebuilds it :params: * location (String) location of the file to download rebuild ``XPI`` * sdk_source_dir (String) absolute path of the SDK * hashtag (String) filename for the buid XPI * package_overrides (dict) override original ``package.json`` fields * filename (String) desired filename for the downloaded ``XPI`` * pingback (String) URL to pass the result * post (String) urlified ``request.POST`` * kwargs is just collecting the task decorator overhead :returns: (list) ``cfx xpi`` response where ``[0]`` is ``stdout`` and ``[1]`` ``stderr`` """ rep = Repackage() if location: log.info("[%s] Starting package rebuild... (%s)" % (hashtag, location)) rep.download(location) log.debug("[%s] XPI file downloaded (%s)" % (hashtag, location)) if not filename: filename = '.'.join( os.path.basename(urlparse(location).path).split('.')[0:-1]) elif upload: log.info("[%s] Starting package rebuild from upload" % hashtag) rep.retrieve(upload) log.debug("[%s] XPI file retrieved from upload" % hashtag) if not filename: filename = '.'.join(upload.name.split('.')[0:-1]) else: log.error("[%s] No location or upload provided" % hashtag) raise ValueError("No location or upload provided") response = rep.rebuild(sdk_source_dir, hashtag, package_overrides) log.debug('[%s] Response from rebuild: %s' % (hashtag, str(response))) if pingback: data = { 'id': rep.manifest['id'], 'secret': settings.AMO_SECRET_KEY, 'result': 'success' if not response[1] else 'failure', 'msg': response[1] or response[0], 'location': "%s%s" % (settings.SITE_URL, reverse('jp_download_xpi', args=[hashtag, filename]))} if post: data['request'] = post log.debug('[%s] Pingback: %s' % (hashtag, pingback)) urllib.urlopen(pingback, data=urllib.urlencode(data)) log.info("[%s] Finished package rebuild." % hashtag) return response
def test_forcing_version(self): for sample in self.sample_addons: rep = Repackage() rep.download(os.path.join(self.xpi_file_prefix, sample)) rep.get_manifest({'version': 'force.version'}) eq_(rep.manifest['version'], 'force.version')
def test_repackage(self): for sample in self.sample_addons: rep = Repackage() rep.download(os.path.join(self.xpi_file_prefix, sample)) response = rep.rebuild(self.sdk_source_dir, self.hashtag) assert not response[1]