def _set_attr(self, key, value): from aiida.backends.djsite.db.models import DbAttribute DbAttribute.validate_key(key) if self._to_be_stored: self._attrs_cache[key] = copy.deepcopy(value) else: DbAttribute.set_value_for_node(self.dbnode, key, value) self._increment_version_number_db()
def _set_db_attr(self, key, value): """ Set the value directly in the DB, without checking if it is stored, or using the cache. DO NOT USE DIRECTLY. :param str key: key name :param value: its value """ from aiida.backends.djsite.db.models import DbAttribute DbAttribute.set_value_for_node(self.dbnode, key, value) self._increment_version_number_db()
def code_update(self, *args): import datetime from aiida.backends.utils import get_automatic_user if len(args) != 1: print >> sys.stderr, ("after 'code update' there should be one " "argument only, being the code id.") sys.exit(1) code = self.get_code(args[0]) if code.has_children: print "***********************************" print "| |" print "| WARNING! |" print "| Consider to create another code |" print "| You risk of losing the history |" print "| |" print "***********************************" # load existing stuff set_params = CodeInputValidationClass() set_params.label = code.label set_params.description = code.description set_params.input_plugin = code.get_input_plugin_name() was_local_before = code.is_local() set_params.is_local = code.is_local() if code.is_local(): set_params.local_rel_path = code.get_local_executable() # I don't have saved the folder with code, so I will just have the list of files # file_list = [ code._get_folder_pathsubfolder.get_abs_path(i) # for i in code.get_folder_list() ] else: set_params.computer = code.get_computer() set_params.remote_abs_path = code.get_remote_exec_path() set_params.prepend_text = code.get_prepend_text() set_params.append_text = code.get_append_text() # ask for the new values set_params.ask() # prepare a comment containing the previous version of the code now = datetime.datetime.now() new_comment = [] new_comment.append("Code modified on {}".format(now)) new_comment.append("Old configuration was:") new_comment.append("label: {}".format(code.label)) new_comment.append("description: {}".format(code.description)) new_comment.append("input_plugin_name: {}".format( code.get_input_plugin_name())) new_comment.append("is_local: {}".format(code.is_local())) if was_local_before: new_comment.append("local_executable: {}".format( code.get_local_executable())) else: new_comment.append("computer: {}".format(code.get_computer())) new_comment.append("remote_exec_path: {}".format( code.get_remote_exec_path())) new_comment.append("prepend_text: {}".format(code.get_prepend_text())) new_comment.append("append_text: {}".format(code.get_append_text())) comment = "\n".join(new_comment) if set_params.is_local: print "WARNING: => Folder with the code, and" print " => Relative path of the executable, " print " will be ignored! It is not possible to replace " print " the scripts, you have to create a new code for that." else: if was_local_before: # some old files will be left in the repository, and I cannot delete them print >> sys.stderr, ("It is not possible to change a " "code from local to remote.\n" "Modification cancelled.") sys.exit(1) print "WARNING: => computer" print " will be ignored! It is not possible to replace it" print " you have to create a new code for that." code.label = set_params.label code.description = set_params.description code.set_input_plugin_name(set_params.input_plugin) code.set_prepend_text(set_params.prepend_text) code.set_append_text(set_params.append_text) if not was_local_before: if set_params.remote_abs_path != code.get_remote_exec_path(): print "Are you sure about changing the path of the code?" print "This operation may imply loss of provenance." print "[Enter] to continue, [Ctrl + C] to exit" raw_input() from aiida.backends.djsite.db.models import DbAttribute DbAttribute.set_value_for_node(code.dbnode, 'remote_exec_path', set_params.remote_abs_path) # store comment, to track history code.add_comment(comment, user=get_automatic_user())