Exemple #1
0
    def create(self, validated_data):
        if not (validated_data.get("label_set") or validated_data.get("project_id")):
            raise serializers.ValidationError('Label set or project_id must be present')
        if validated_data.get("label_set") and validated_data.get("project_id"):
            raise serializers.ValidationError('Project must have only one of Label set or project_id')

        labels = validated_data.pop('label_set', [])
        db_task = models.Task.objects.create(**validated_data)
        label_names = list()
        for label in labels:
            attributes = label.pop('attributespec_set')
            if not label.get('color', None):
                label['color'] = get_label_color(label['name'], label_names)
            label_names.append(label['name'])
            db_label = models.Label.objects.create(task=db_task, **label)
            for attr in attributes:
                models.AttributeSpec.objects.create(label=db_label, **attr)

        task_path = db_task.get_task_dirname()
        if os.path.isdir(task_path):
            shutil.rmtree(task_path)

        os.makedirs(db_task.get_task_logs_dirname())
        os.makedirs(db_task.get_task_artifacts_dirname())

        db_task.save()
        return db_task
Exemple #2
0
    def create(self, validated_data):
        labels = validated_data.pop('label_set')
        training_data = validated_data.pop('training_project', {})
        if training_data.get('enabled'):
            host = training_data.pop('host').strip('/')
            username = training_data.pop('username').strip()
            password = training_data.pop('password').strip()
            tr_p = models.TrainingProject.objects.create(**training_data,
                                                         host=host,
                                                         username=username,
                                                         password=password)
            db_project = models.Project.objects.create(**validated_data,
                                                       training_project=tr_p)
        else:
            db_project = models.Project.objects.create(**validated_data)
        label_names = list()
        for label in labels:
            attributes = label.pop('attributespec_set')
            if not label.get('color', None):
                label['color'] = get_label_color(label['name'], label_names)
            label_names.append(label['name'])
            db_label = models.Label.objects.create(project=db_project, **label)
            for attr in attributes:
                models.AttributeSpec.objects.create(label=db_label, **attr)

        project_path = db_project.get_project_dirname()
        if os.path.isdir(project_path):
            shutil.rmtree(project_path)
        os.makedirs(db_project.get_project_logs_dirname())

        return db_project
Exemple #3
0
    def update_instance(validated_data, parent_instance):
        attributes = validated_data.pop('attributespec_set', [])
        instance = dict()
        if isinstance(parent_instance, models.Project):
            instance['project'] = parent_instance
            logger = slogger.project[parent_instance.id]
        else:
            instance['task'] = parent_instance
            logger = slogger.task[parent_instance.id]
        if not validated_data.get('id') is None:
            try:
                db_label = models.Label.objects.get(id=validated_data['id'],
                                                    **instance)
            except models.Label.DoesNotExist:
                raise exceptions.NotFound(
                    detail='Not found label with id #{} to change'.format(
                        validated_data['id']))
            db_label.name = validated_data.get('name', db_label.name)
            logger.info("{}({}) label was updated".format(
                db_label.name, db_label.id))
        else:
            db_label = models.Label.objects.create(
                name=validated_data.get('name'), **instance)
            logger.info("New {} label was created".format(db_label.name))
        if validated_data.get('deleted') == True:
            db_label.delete()
            return

        if not validated_data.get('color', None):
            label_names = [
                l.name
                for l in instance[tuple(instance.keys())[0]].label_set.exclude(
                    id=db_label.id).order_by('id')
            ]
            db_label.color = get_label_color(db_label.name, label_names)
        else:
            db_label.color = validated_data.get('color', db_label.color)
        db_label.save()
        for attr in attributes:
            (db_attr, created) = models.AttributeSpec.objects.get_or_create(
                label=db_label, name=attr['name'], defaults=attr)
            if created:
                logger.info("New {} attribute for {} label was created".format(
                    db_attr.name, db_label.name))
            else:
                logger.info("{} attribute for {} label was updated".format(
                    db_attr.name, db_label.name))

                # FIXME: need to update only "safe" fields
                db_attr.default_value = attr.get('default_value',
                                                 db_attr.default_value)
                db_attr.mutable = attr.get('mutable', db_attr.mutable)
                db_attr.input_type = attr.get('input_type', db_attr.input_type)
                db_attr.values = attr.get('values', db_attr.values)
                db_attr.save()
Exemple #4
0
def alter_label_colors(apps, schema_editor):
    Label = apps.get_model('engine', 'Label')
    Task = apps.get_model('engine', 'Task')

    for task in Task.objects.all():
        labels = Label.objects.filter(task_id=task.id).order_by('id')
        label_names = list()
        for label in labels:
            label.color = get_label_color(label.name, label_names)
            label_names.append(label.name)
            label.save()
Exemple #5
0
    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.owner = validated_data.get('owner', instance.owner)
        instance.assignee = validated_data.get('assignee', instance.assignee)
        instance.bug_tracker = validated_data.get('bug_tracker',
                                                  instance.bug_tracker)
        instance.z_order = validated_data.get('z_order', instance.z_order)
        instance.project = validated_data.get('project', instance.project)
        labels = validated_data.get('label_set', [])
        for label in labels:
            attributes = label.pop('attributespec_set', [])
            (db_label,
             created) = models.Label.objects.get_or_create(task=instance,
                                                           name=label['name'])
            if created:
                slogger.task[instance.id].info(
                    "New {} label was created".format(db_label.name))
            else:
                slogger.task[instance.id].info("{} label was updated".format(
                    db_label.name))
            if not label.get('color', None):
                label_names = [
                    l.name for l in models.Label.objects.filter(
                        task_id=instance.id).exclude(
                            id=db_label.id).order_by('id')
                ]
                db_label.color = get_label_color(db_label.name, label_names)
            else:
                db_label.color = label.get('color', db_label.color)
            db_label.save()
            for attr in attributes:
                (db_attr,
                 created) = models.AttributeSpec.objects.get_or_create(
                     label=db_label, name=attr['name'], defaults=attr)
                if created:
                    slogger.task[instance.id].info(
                        "New {} attribute for {} label was created".format(
                            db_attr.name, db_label.name))
                else:
                    slogger.task[instance.id].info(
                        "{} attribute for {} label was updated".format(
                            db_attr.name, db_label.name))

                    # FIXME: need to update only "safe" fields
                    db_attr.default_value = attr.get('default_value',
                                                     db_attr.default_value)
                    db_attr.mutable = attr.get('mutable', db_attr.mutable)
                    db_attr.input_type = attr.get('input_type',
                                                  db_attr.input_type)
                    db_attr.values = attr.get('values', db_attr.values)
                    db_attr.save()

        instance.save()
        return instance
Exemple #6
0
    def update_instance(validated_data, parent_instance):
        attributes = validated_data.pop('attributespec_set', [])
        instance = dict()
        if isinstance(parent_instance, models.Project):
            instance['project'] = parent_instance
            logger = slogger.project[parent_instance.id]
        else:
            instance['task'] = parent_instance
            logger = slogger.task[parent_instance.id]
        (db_label, created) = models.Label.objects.get_or_create(
            name=validated_data['name'], **instance)
        if created:
            logger.info("New {} label was created".format(db_label.name))
        else:
            logger.info("{} label was updated".format(db_label.name))
        if not validated_data.get('color', None):
            label_names = [
                l.name
                for l in instance[tuple(instance.keys())[0]].label_set.exclude(
                    id=db_label.id).order_by('id')
            ]
            db_label.color = get_label_color(db_label.name, label_names)
        else:
            db_label.color = validated_data.get('color', db_label.color)
        db_label.save()
        for attr in attributes:
            (db_attr, created) = models.AttributeSpec.objects.get_or_create(
                label=db_label, name=attr['name'], defaults=attr)
            if created:
                logger.info("New {} attribute for {} label was created".format(
                    db_attr.name, db_label.name))
            else:
                logger.info("{} attribute for {} label was updated".format(
                    db_attr.name, db_label.name))

                # FIXME: need to update only "safe" fields
                db_attr.default_value = attr.get('default_value',
                                                 db_attr.default_value)
                db_attr.mutable = attr.get('mutable', db_attr.mutable)
                db_attr.input_type = attr.get('input_type', db_attr.input_type)
                db_attr.values = attr.get('values', db_attr.values)
                db_attr.save()
Exemple #7
0
    def create(self, validated_data):
        labels = validated_data.pop('label_set')
        db_project = models.Project.objects.create(**validated_data)
        label_names = list()
        for label in labels:
            attributes = label.pop('attributespec_set')
            if not label.get('color', None):
                label['color'] = get_label_color(label['name'], label_names)
            label_names.append(label['name'])
            db_label = models.Label.objects.create(project=db_project, **label)
            for attr in attributes:
                models.AttributeSpec.objects.create(label=db_label, **attr)

        project_path = db_project.get_project_dirname()
        if os.path.isdir(project_path):
            shutil.rmtree(project_path)
        os.makedirs(db_project.get_project_logs_dirname())

        db_project.save()
        return db_project