class BaseCustomAttributesValuesExportValidator(validators.ModelValidator): attributes_values = JSONField(source="attributes_values", required=True) _custom_attribute_model = None _container_field = None class Meta: exclude = ("id", ) def validate_attributes_values(self, attrs, source): # values must be a dict data_values = attrs.get("attributes_values", None) if self.object: data_values = (data_values or self.object.attributes_values) if type(data_values) is not dict: raise ValidationError( _("Invalid content. It must be {\"key\": \"value\",...}")) # Values keys must be in the container object project data_container = attrs.get(self._container_field, None) if data_container: project_id = data_container.project_id elif self.object: project_id = getattr(self.object, self._container_field).project_id else: project_id = None values_ids = list(data_values.keys()) qs = self._custom_attribute_model.objects.filter(project=project_id, id__in=values_ids) if qs.count() != len(values_ids): raise ValidationError(_("It contains invalid custom fields.")) return attrs
class ProjectTemplateValidator(validators.ModelValidator): default_options = JSONField(required=False, label=_("Default options")) us_statuses = JSONField(required=False, label=_("User story's statuses")) points = JSONField(required=False, label=_("Points")) task_statuses = JSONField(required=False, label=_("Task's statuses")) issue_statuses = JSONField(required=False, label=_("Issue's statuses")) issue_types = JSONField(required=False, label=_("Issue's types")) priorities = JSONField(required=False, label=_("Priorities")) severities = JSONField(required=False, label=_("Severities")) roles = JSONField(required=False, label=_("Roles")) class Meta: model = models.ProjectTemplate read_only_fields = ("created_date", "modified_date")
class ProjectExportValidator(WatcheableObjectModelValidatorMixin): logo = FileField(required=False) anon_permissions = PgArrayField(required=False) public_permissions = PgArrayField(required=False) modified_date = serializers.DateTimeField(required=False) roles = RoleExportValidator(many=True, required=False) owner = UserRelatedField(required=False) memberships = MembershipExportValidator(many=True, required=False) points = PointsExportValidator(many=True, required=False) us_statuses = UserStoryStatusExportValidator(many=True, required=False) task_statuses = TaskStatusExportValidator(many=True, required=False) issue_types = IssueTypeExportValidator(many=True, required=False) issue_statuses = IssueStatusExportValidator(many=True, required=False) priorities = PriorityExportValidator(many=True, required=False) severities = SeverityExportValidator(many=True, required=False) swimlanes = SwimlaneExportValidator(many=True, required=False) tags_colors = JSONField(required=False) creation_template = serializers.SlugRelatedField(slug_field="slug", required=False) default_points = serializers.SlugRelatedField(slug_field="name", required=False) default_us_status = serializers.SlugRelatedField(slug_field="name", required=False) default_task_status = serializers.SlugRelatedField(slug_field="name", required=False) default_priority = serializers.SlugRelatedField(slug_field="name", required=False) default_severity = serializers.SlugRelatedField(slug_field="name", required=False) default_issue_status = serializers.SlugRelatedField(slug_field="name", required=False) default_issue_type = serializers.SlugRelatedField(slug_field="name", required=False) default_swimlane = serializers.SlugRelatedField(slug_field="name", required=False) userstorycustomattributes = UserStoryCustomAttributeExportValidator( many=True, required=False) taskcustomattributes = TaskCustomAttributeExportValidator(many=True, required=False) issuecustomattributes = IssueCustomAttributeExportValidator(many=True, required=False) user_stories = UserStoryExportValidator(many=True, required=False) tasks = TaskExportValidator(many=True, required=False) milestones = MilestoneExportValidator(many=True, required=False) issues = IssueExportValidator(many=True, required=False) wiki_links = WikiLinkExportValidator(many=True, required=False) wiki_pages = WikiPageExportValidator(many=True, required=False) class Meta: model = projects_models.Project exclude = ('id', 'members')