def test_prune_points(harness): """Test method that removes data elements by cycle point.""" schd, data = harness points = [ standardise_point_string(p.cycle_point) for p in data[TASK_PROXIES].values() ] point = next(iter(points)) assert point in points schd.data_store_mgr.clear_deltas() schd.data_store_mgr.prune_points([point]) schd.data_store_mgr.apply_deltas() assert point not in [ standardise_point_string(p.cycle_point) for p in schd.data_store_mgr.data[schd.data_store_mgr.workflow_id] [TASK_PROXIES].values() ]
def point_match(self, point: Optional[str]) -> bool: """Return whether a string/glob matches the task's point. None is treated as '*'. """ if point is None: return True with suppress(PointParsingError): # point_str may be a glob point = standardise_point_string(point) return fnmatchcase(str(self.point), point)
def get_standardised_point_string(cls, point_string): """Return a standardised point string. Used to process incoming command arguments. """ try: point_string = standardise_point_string(point_string) except PointParsingError as exc: # (This is only needed to raise a clearer error message). raise ValueError("Invalid cycle point: %s (%s)" % (point_string, exc)) return point_string
def put_broadcast(self, point_strings=None, namespaces=None, settings=None): """Add new broadcast settings (server side interface). Return a tuple (modified_settings, bad_options) where: modified_settings is list of modified settings in the form: [("20200202", "foo", {"script": "true"}, ...] bad_options is as described in the docstring for self.clear(). """ modified_settings = [] bad_point_strings = [] bad_namespaces = [] with self.lock: for setting in settings: for point_string in point_strings: # Standardise the point and check its validity. bad_point = False try: point_string = standardise_point_string(point_string) except PointParsingError: if point_string != '*': bad_point_strings.append(point_string) bad_point = True if not bad_point and point_string not in self.broadcasts: self.broadcasts[point_string] = {} for namespace in namespaces: if namespace not in self.linearized_ancestors: bad_namespaces.append(namespace) elif not bad_point: if namespace not in self.broadcasts[point_string]: self.broadcasts[point_string][namespace] = {} addict(self.broadcasts[point_string][namespace], setting) modified_settings.append( (point_string, namespace, setting)) # Log the broadcast self.suite_db_mgr.put_broadcast(modified_settings) LOG.info(get_broadcast_change_report(modified_settings)) bad_options = {} if bad_point_strings: bad_options["point_strings"] = bad_point_strings if bad_namespaces: bad_options["namespaces"] = bad_namespaces if modified_settings: self.data_store_mgr.delta_broadcast() return modified_settings, bad_options
def put_broadcast( self, point_strings=None, namespaces=None, settings=None): """Add new broadcast settings (server side interface). Return a tuple (modified_settings, bad_options) where: modified_settings is list of modified settings in the form: [("20200202", "foo", {"script": "true"}, ...] bad_options is as described in the docstring for self.clear(). """ modified_settings = [] bad_point_strings = [] bad_namespaces = [] with self.lock: for setting in settings: for point_string in point_strings: # Standardise the point and check its validity. bad_point = False try: point_string = standardise_point_string(point_string) except PointParsingError: if point_string != '*': bad_point_strings.append(point_string) bad_point = True if not bad_point and point_string not in self.broadcasts: self.broadcasts[point_string] = {} for namespace in namespaces: if namespace not in self.linearized_ancestors: bad_namespaces.append(namespace) elif not bad_point: if namespace not in self.broadcasts[point_string]: self.broadcasts[point_string][namespace] = {} self._addict( self.broadcasts[point_string][namespace], setting) modified_settings.append( (point_string, namespace, setting)) # Log the broadcast self.suite_db_mgr.put_broadcast(modified_settings) LOG.info(get_broadcast_change_report(modified_settings)) bad_options = {} if bad_point_strings: bad_options["point_strings"] = bad_point_strings if bad_namespaces: bad_options["namespaces"] = bad_namespaces return modified_settings, bad_options