def create_task_by_absolute_path(self, abspath, settings, source_data): """ Creates the task by it's absolute path. If the task already exists in the list, then this will throw an exception and return false Calls to read_and_set_task_by_absolute_path() to read back all data out of the database. :param source_data: :param settings: :param abspath: :return: """ try: self.task = Tasks.create(abspath=abspath, status='pending') self.save_task() self._log("Created new task with ID: {} for {}".format( self.task, abspath), level="debug") # Save the current settings against this task self.create_task_settings_entry(settings, self.task) # Fetch the current file data and apply it to the task self.create_task_probe_entry(source_data, self.task) self._log("Set the source data", level="debug") # Read application settings and apply it to the task # Destination data is generated based on the settings saved against this task # (not necessarily the current settings) destination_data = self.get_destination_data() self.set_destination_data(destination_data) self._log("Set the destination data", level="debug") # Set the cache path to use during the transcoding self.set_cache_path() # Set the default priority to the ID of the task self.task.priority = self.task.id # Save the task in order to save that cache path self.save_task() # Read back the task from the database (ensures that our data has been recorded correctly) self.read_and_set_task_by_absolute_path(abspath) self._log("Task read from database", level="debug") return True except IntegrityError as e: self._log("Cancel creating new task for {} - {}".format( abspath, e), level="info") return False
def create_task_by_absolute_path(self, abspath, task_type='local', library_id=1, priority_score=0): """ Creates the task by it's absolute path. If the task already exists in the list, then this will throw an exception and return false Calls to read_and_set_task_by_absolute_path() to read back all data out of the database. :param abspath: :param task_type: :param library_id: :param priority_score: :return: """ try: self.task = Tasks.create(abspath=abspath, status='creating', library_id=library_id) self.save() self._log("Created new task with ID: {} for {}".format(self.task, abspath), level="debug") # Set the cache path to use during the transcoding self.set_cache_path() # Fetch the library priority score also for this task library_priority_score = self.get_task_library_priority_score() # Set the default priority to the ID of the task self.task.priority = int(self.task.id) + int(library_priority_score) + int(priority_score) # Set the task type self.task.type = task_type # Only local tasks should be progressed automatically # Remote tasks need to be progressed to pending by a remote trigger if task_type == 'local': # Now set the status to pending. Only then will it be picked up by a worker. # This will also save the task. self.set_status('pending') else: # Save the tasks updates without settings status to pending self.save() return True except IntegrityError as e: self._log("Cancel creating new task for {} - {}".format(abspath, e), level="info") return False