def _post_experiment(self, experiment, site_owners, site_settings): uid = self.generate_exp_uid(experiment) url = site_settings['url'] username = site_settings['username'] password = site_settings['password'] protocol = site_settings['fileProtocol'] # Create the form with simple fields mpform = MultiPartForm() mpform.add_field('username', username) mpform.add_field('password', password) mpform.add_field('from_url', settings.MYTARDIS_SITE_URL) mpform.add_field('originid', uid) for owner in site_owners: mpform.add_field('experiment_owner', owner) # export METS file filename = 'mets_expid_%i_%s' % (experiment.id, protocol) logger.debug('=== extracting mets file for experiment %s ' % uid) from tardis.tardis_portal.metsexporter import MetsExporter exporter = MetsExporter() if protocol: # translate vbl:// into tardis:// url for datafiles metsfile = exporter.export(experimentId=experiment.id, replace_protocols={'vbl': protocol}, filename=filename, export_images=False) else: metsfile = exporter.export(experimentId=experiment.id, filename=filename, export_images=False) logger.debug('=== extraction done, filename = %s' % metsfile) f = open(metsfile, "r") mpform.add_file('xmldata', 'METS.xml', fileHandle=f) body = str(mpform) logger.debug('about to send register request to site %s' % url) # build the request headers = { 'User-agent': 'MyTardis', 'Content-type': mpform.get_content_type(), } # This should be made into a background task. # Or rather- the processing on the other end should be. h = Http(timeout=9999, disable_ssl_certificate_validation=True) h.force_exception_to_status_code = True resp, content = h.request(url, 'POST', headers=headers, body=body) f.close() if resp.status != 200: logger.error('Posting experiment to %s failed:' % url) logger.error('%s: %s' % (resp.status, resp.reason)) logger.debug('SERVER RESPONSE: ' + content) return False return True