def data_sync(self): """ downloads/uploads/uses the local file depending on availability """ self.checksum_lookup() # local file not on repository, so upload if not self.on_server and os.path.isfile(self.in_file.name): cookiejar = gui.repository.QRepositoryDialog.cookiejar if cookiejar: register_openers(cookiejar=cookiejar) params = { 'dataset_file': open(self.in_file.name, 'rb'), 'name': self.in_file.name.split('/')[-1], 'origin': 'vistrails', 'checksum': self.checksum } upload_url = "%s/datasets/upload/" % self.base_url datagen, headers = multipart_encode(params) request = urllib2.Request(upload_url, datagen, headers) try: result = urllib2.urlopen(request) if result.code != 200: show_warning("Upload Failure", "Data failed to upload to repository") # make temporarily uncachable self.is_cacheable = self.invalidate_cache else: debug.warning("Push to repository was successful") # make sure module caches self.is_cacheable = self.validate_cache except Exception, e: show_warning("Upload Failure", "Data failed to upload to repository") # make temporarily uncachable self.is_cacheable = self.invalidate_cache debug.warning('RepoSync uploaded %s to the repository' % \ self.in_file.name) else: show_warning("Please login", ("You must be logged into the web" " repository in order to upload " "data. No data was synced")) # make temporarily uncachable self.is_cacheable = self.invalidate_cache # use local data self.setResult("file", self.in_file)
def data_sync(self): """ downloads/uploads/uses the local file depending on availability """ self.checksum_lookup() # local file not on repository, so upload if not self.on_server and os.path.isfile(self.in_file.name): cookiejar = gui.repository.QRepositoryDialog.cookiejar if cookiejar: register_openers(cookiejar=cookiejar) params = { "dataset_file": open(self.in_file.name, "rb"), "name": self.in_file.name.split("/")[-1], "origin": "vistrails", "checksum": self.checksum, } upload_url = "%s/datasets/upload/" % self.base_url datagen, headers = multipart_encode(params) request = urllib2.Request(upload_url, datagen, headers) try: result = urllib2.urlopen(request) if result.code != 200: show_warning("Upload Failure", "Data failed to upload to repository") # make temporarily uncachable self.is_cacheable = self.invalidate_cache else: debug.warning("Push to repository was successful") # make sure module caches self.is_cacheable = self.validate_cache except Exception, e: show_warning("Upload Failure", "Data failed to upload to repository") # make temporarily uncachable self.is_cacheable = self.invalidate_cache debug.warning("RepoSync uploaded %s to the repository" % self.in_file.name) else: show_warning( "Please login", ("You must be logged into the web" " repository in order to upload " "data. No data was synced"), ) # make temporarily uncachable self.is_cacheable = self.invalidate_cache # use local data self.setResult("file", self.in_file)
def push_vistrail_to_repository(self, branching=False): """ uploads current VisTrail to web repository """ self._repository_status['details'] = "Pushing to repository..." self._push_button.setEnabled(False) self._branch_button.setEnabled(False) self.update_push_information() try: # create temp file self.directory = tempfile.mkdtemp(prefix='vt_tmp') (fd, filename) = tempfile.mkstemp(suffix='.vt', prefix='vt_tmp', dir=self.directory) os.close(fd) # writing tmp vt and switching back to orginal vt locator = ZIPFileLocator(filename) controller = api.get_current_controller() tmp_controller = VistrailController() tmp_controller.set_vistrail(controller.vistrail.do_copy(), locator) tmp_controller.changed = True tmp_controller.write_vistrail(locator) # check if this vt is from the repository if controller.vistrail.get_annotation('repository_vt_id'): repository_vt_id = controller.vistrail.get_annotation( 'repository_vt_id').value else: repository_vt_id = -1 # upload vistrail temp file to repository register_openers(cookiejar=self.dialog.cookiejar) project = self.serverCombo.itemData( self.serverCombo.currentIndex()).toList()[0].toString() if project == "Default": project = "" params = {'vistrail_file': open(filename, 'rb'), 'action': 'upload', 'name': controller.locator.short_name, 'repository_vt_id': repository_vt_id if not branching else -1, 'is_runnable': not bool(len(self.unsupported_packages)+ \ len(self.local_data_modules)), 'vt_id': 0, 'branched_from': "" if not branching else repository_vt_id, 'project': project, 'everyone_can_view': self.perm_view.checkState(), 'everyone_can_edit': self.perm_edit.checkState(), 'everyone_can_download': self.perm_download.checkState() } upload_url = "%s/vistrails/remote_upload/" % \ self.config.webRepositoryURL datagen, headers = multipart_encode(params) request = urllib2.Request(upload_url, datagen, headers) result = urllib2.urlopen(request) updated_response = result.read() os.unlink(filename) if updated_response[:6] == "upload": # No update, just upload if result.code != 200: self._repository_status['details'] = \ "Push to repository failed" else: repository_vt_id = int(updated_response[8:]) controller.vistrail.set_annotation('repository_vt_id', repository_vt_id) controller.vistrail.set_annotation( 'repository_creator', self.dialog.loginUser.text()) # ensure that the annotations get saved controller.set_changed(True) self._repository_status['details'] = \ "Push to repository was successful" else: # update, load updated vistrail if result.code != 200: self._repository_status['details'] = "Update Failed" else: debug.log("getting version from web") # request file to download download_url = "%s/vistrails/download/%s/" % \ (self.config.webRepositoryURL, updated_response) request = urllib2.Request(download_url) result = urllib2.urlopen(request) updated_file = result.read() # create temp file of updated vistrail self.directory = tempfile.mkdtemp(prefix='vt_tmp') (fd, updated_filename) = tempfile.mkstemp(suffix='.vtl', prefix='vtl_tmp', dir=self.directory) os.close(fd) updated_vt = open(updated_filename, 'w') updated_vt.write(updated_file) updated_vt.close() # switch vistrails to updated one controller = api.get_current_controller() updated_locator = FileLocator(updated_filename) (up_vistrail, abstractions, thumbnails, mashups) = \ load_vistrail(updated_locator) controller.set_vistrail(up_vistrail, controller.vistrail.locator, abstractions, thumbnails, mashups) # update version tree drawing controller.recompute_terse_graph() controller.invalidate_version_tree() os.remove(updated_filename) os.remove(updated_filename[:-1]) os.rmdir(self.directory) self._repository_status['details'] = \ "Update to repository was successful" except Exception, e: debug.critical(str(e)) self._repository_status['details'] = "An error occurred"
def push_vistrail_to_repository(self, branching=False): """ uploads current VisTrail to web repository """ self._repository_status['details'] = "Pushing to repository..." self._push_button.setEnabled(False) self._branch_button.setEnabled(False) self.update_push_information() try: # create temp file self.directory = tempfile.mkdtemp(prefix='vt_tmp') (fd, filename) = tempfile.mkstemp(suffix='.vt', prefix='vt_tmp', dir=self.directory) os.close(fd) # writing tmp vt and switching back to orginal vt locator = ZIPFileLocator(filename) controller = api.get_current_controller() tmp_controller = VistrailController() tmp_controller.set_vistrail(controller.vistrail.do_copy(), locator) tmp_controller.changed = True tmp_controller.write_vistrail(locator) # check if this vt is from the repository if controller.vistrail.get_annotation('repository_vt_id'): repository_vt_id = controller.vistrail.get_annotation('repository_vt_id').value else: repository_vt_id = -1 # upload vistrail temp file to repository register_openers(cookiejar=self.dialog.cookiejar) project = self.serverCombo.itemData(self.serverCombo.currentIndex()).toList()[0].toString() if project == "Default": project = "" params = {'vistrail_file': open(filename, 'rb'), 'action': 'upload', 'name': controller.locator.short_name, 'repository_vt_id': repository_vt_id if not branching else -1, 'is_runnable': not bool(len(self.unsupported_packages)+ \ len(self.local_data_modules)), 'vt_id': 0, 'branched_from': "" if not branching else repository_vt_id, 'project': project, 'everyone_can_view': self.perm_view.checkState(), 'everyone_can_edit': self.perm_edit.checkState(), 'everyone_can_download': self.perm_download.checkState() } upload_url = "%s/vistrails/remote_upload/" % \ self.config.webRepositoryURL datagen, headers = multipart_encode(params) request = urllib2.Request(upload_url, datagen, headers) result = urllib2.urlopen(request) updated_response = result.read() os.unlink(filename) if updated_response[:6] == "upload": # No update, just upload if result.code != 200: self._repository_status['details'] = \ "Push to repository failed" else: repository_vt_id = int(updated_response[8:]) controller.vistrail.set_annotation('repository_vt_id', repository_vt_id) controller.vistrail.set_annotation('repository_creator', self.dialog.loginUser.text()) # ensure that the annotations get saved controller.set_changed(True) self._repository_status['details'] = \ "Push to repository was successful" else: # update, load updated vistrail if result.code != 200: self._repository_status['details'] = "Update Failed" else: debug.log("getting version from web") # request file to download download_url = "%s/vistrails/download/%s/" % \ (self.config.webRepositoryURL, updated_response) request = urllib2.Request(download_url) result = urllib2.urlopen(request) updated_file = result.read() # create temp file of updated vistrail self.directory = tempfile.mkdtemp(prefix='vt_tmp') (fd, updated_filename) = tempfile.mkstemp(suffix='.vtl', prefix='vtl_tmp', dir=self.directory) os.close(fd) updated_vt = open(updated_filename, 'w') updated_vt.write(updated_file) updated_vt.close() # switch vistrails to updated one controller = api.get_current_controller() updated_locator = FileLocator(updated_filename) (up_vistrail, abstractions, thumbnails, mashups) = \ load_vistrail(updated_locator) controller.set_vistrail(up_vistrail, controller.vistrail.locator, abstractions, thumbnails, mashups) # update version tree drawing controller.recompute_terse_graph() controller.invalidate_version_tree() os.remove(updated_filename) os.remove(updated_filename[:-1]) os.rmdir(self.directory) self._repository_status['details'] = \ "Update to repository was successful" except Exception, e: debug.critical(str(e)) self._repository_status['details'] = "An error occurred"