def delete_script(self, script): """Deletes a script. """ check_resource_type(script, SCRIPT_PATH, message="A script id is needed.") script_id = get_script_id(script) if script_id: return self._delete("%s%s" % (self.url, script_id))
def update_script(self, script, changes): """Updates a script. """ check_resource_type(script, SCRIPT_PATH, message="A script id is needed.") script_id = get_script_id(script) if script_id: body = json.dumps(changes) return self._update("%s%s" % (self.url, script_id), body)
def create_script(self, source_code=None, args=None, wait_time=3, retries=10): """Creates a whizzml script from its source code. The `source_code` parameter can be a: {script ID}: the ID for an existing whizzml script {path}: the path to a file containing the source code {string} : the string containing the source code for the script """ create_args = {} if args is not None: create_args.update(args) if source_code is None: raise Exception('A valid code string' ' or a script id must be provided.') resource_type = get_resource_type(source_code) if resource_type == SCRIPT_PATH: script_id = get_script_id(source_code) if script_id: check_resource(script_id, query_string=TINY_RESOURCE, wait_time=wait_time, retries=retries, raise_on_error=True, api=self) create_args.update({"origin": script_id}) elif isinstance(source_code, str): if is_url(source_code): script_args = retrieve_script_args(source_code) source_code = script_args.get("source_code") create_args.update(json.loads(script_args.get("json"))) else: try: if os.path.exists(source_code): with open(source_code) as code_file: source_code = code_file.read() except IOError: raise IOError("Could not open the source code file %s." % source_code) create_args.update({"source_code": source_code}) else: raise Exception("A script id or a valid source code" " is needed to create a" " script. %s found." % resource_type) body = json.dumps(create_args) return self._create(self.script_url, body)
def create_execution(self, origin_resource, args=None, wait_time=3, retries=10): """Creates an execution from a `script` or a list of `scripts`. """ create_args = {} if args is not None: create_args.update(args) if (isinstance(origin_resource, str) or isinstance(origin_resource, dict)): # single script scripts = [origin_resource] else: scripts = origin_resource try: script_ids = [get_script_id(script) for script in scripts] except TypeError: raise Exception("A script id or a list of them is needed to create" " a script execution. %s found." % get_resource_type(origin_resource)) if all([ get_resource_type(script_id) == SCRIPT_PATH for script_id in script_ids ]): for script in scripts: check_resource(script, query_string=TINY_RESOURCE, wait_time=wait_time, retries=retries, raise_on_error=True, api=self) else: raise Exception("A script id or a list of them is needed to create" " a script execution. %s found." % get_resource_type(origin_resource)) if len(scripts) > 1: create_args.update({"scripts": script_ids}) else: create_args.update({"script": script_ids[0]}) body = json.dumps(create_args) return self._create(self.execution_url, body)
def get_script(self, script, query_string=''): """Retrieves a script. The script parameter should be a string containing the script id or the dict returned by create_script. As script is an evolving object that is processed until it reaches the FINISHED or FAULTY state, the function will return a dict that encloses the script content and state info available at the time it is called. """ check_resource_type(script, SCRIPT_PATH, message="A script id is needed.") script_id = get_script_id(script) if script_id: return self._get("%s%s" % (self.url, script_id), query_string=query_string)