Пример #1
0
    def patch(self, request, *args, **kwargs):
        project = self.get_object()
        label_config = self.request.query_params.get('label_config')

        # config changes can break view, so we need to reset them
        if parse_config(label_config) != parse_config(project.label_config):
            View.objects.filter(project=project).all().delete()

        return super(ProjectAPI, self).patch(request, *args, **kwargs)
Пример #2
0
    def get(self, request, *args, **kwargs):
        project = self.get_object()
        label_config = self.request.query_params.get('label_config')

        # check new config includes meaningful changes
        config_essential_data_has_changed = False
        if parse_config(label_config) != parse_config(project.label_config):
            config_essential_data_has_changed = True

        project.validate_config(label_config)
        return Response({'config_essential_data_has_changed': config_essential_data_has_changed}, status=status.HTTP_200_OK)
Пример #3
0
    def config_essential_data_has_changed(cls, new_config_str, old_config_str):
        new_config = parse_config(new_config_str)
        old_config = parse_config(old_config_str)

        for tag, new_info in new_config.items():
            if tag not in old_config:
                return True
            old_info = old_config[tag]
            if new_info['type'] != old_info['type']:
                return True
            if new_info['inputs'] != old_info['inputs']:
                return True
            if not set(old_info['labels']).issubset(new_info['labels']):
                return True
Пример #4
0
 def get_updated_weights(self):
     outputs = parse_config(self.label_config)
     control_weights = {}
     exclude_control_types = ('Filter',)
     for control_name in outputs:
         control_type = outputs[control_name]['type']
         if control_type in exclude_control_types:
             continue
         control_weights[control_name] = {
             'overall': 1.0,
             'type': control_type,
             'labels': {label: 1.0 for label in outputs[control_name].get('labels', [])}
         }
     return control_weights
Пример #5
0
 def get_parsed_config(self):
     return parse_config(self.label_config)
Пример #6
0
 def get_control_tags_from_config(self):
     return parse_config(self.label_config)