class IssueCustomAttributeExportSerializer(RelatedExportSerializer): name = Field() description = Field() type = Field() order = Field() created_date = DateTimeField() modified_date = DateTimeField()
class UserBasicInfoSerializer(serializers.LightSerializer): username = Field() full_name_display = MethodField() photo = MethodField() big_photo = MethodField() gravatar_id = MethodField() is_active = Field() id = Field() def get_full_name_display(self, obj): return obj.get_full_name() def get_photo(self, obj): return get_user_photo_url(obj) def get_big_photo(self, obj): return get_user_big_photo_url(obj) def get_gravatar_id(self, obj): return get_user_gravatar_id(obj) def to_value(self, instance): if instance is None: return None return super().to_value(instance)
class HistoryEntrySerializer(serializers.LightSerializer): comment = Field() comment_html = Field() delete_comment_date = Field() comment_versions = Field() edit_comment_date = Field() diff = HistoryDiffField(attr="values_diff")
class VoterSerializer(serializers.LightSerializer): id = Field() username = Field() full_name = MethodField() def get_full_name(self, obj): return obj.get_full_name()
class MembershipExportSerializer(RelatedExportSerializer): user = UserRelatedField() role = SlugRelatedField(slug_field="name") invited_by = UserRelatedField() is_admin = Field() email = Field() created_at = DateTimeField() invitation_extra_text = Field() user_order = Field()
class OriginItemSerializer(serializers.LightSerializer): id = Field() ref = Field() subject = Field() def to_value(self, instance): if instance is None: return None return super().to_value(instance)
class WebhookSerializer(serializers.LightSerializer): id = Field() project = Field(attr="project_id") name = Field() url = Field() key = Field() logs_counter = MethodField() def get_logs_counter(self, obj): return obj.logs.count()
class UserSerializer(serializers.LightSerializer): id = Field() username = Field() full_name = Field() full_name_display = MethodField() color = Field() bio = Field() lang = Field() theme = Field() timezone = Field() is_active = Field() photo = MethodField() big_photo = MethodField() gravatar_id = MethodField() roles = MethodField() def get_full_name_display(self, obj): return obj.get_full_name() if obj else "" def get_photo(self, user): return get_user_photo_url(user) def get_big_photo(self, user): return get_user_big_photo_url(user) def get_gravatar_id(self, user): return get_user_gravatar_id(user) def get_roles(self, user): if hasattr(user, "roles_attr"): return user.roles_attr return user.memberships.order_by("role__name").values_list( "role__name", flat=True).distinct()
class EpicRelatedUserStorySerializer(serializers.LightSerializer): id = Field() user_story = MethodField() epic = MethodField() order = Field() def get_user_story(self, obj): return UserStorySerializer(obj.user_story).data def get_epic(self, obj): return EpicSerializer(obj.epic).data
class WebhookLogSerializer(serializers.LightSerializer): id = Field() webhook = Field(attr="webhook_id") url = Field() status = Field() request_data = Field() request_headers = Field() response_data = Field() response_headers = Field() duration = Field() created = Field()
class HistoryExportSerializer(serializers.LightSerializer): user = HistoryUserField() diff = HistoryDiffField() snapshot = MethodField() values = HistoryValuesField() comment = Field() delete_comment_date = DateTimeField() delete_comment_user = HistoryUserField() comment_versions = Field() created_at = DateTimeField() edit_comment_date = DateTimeField() is_hidden = Field() is_snapshot = Field() type = Field() def __init__(self, *args, **kwargs): # Don't pass the extra ids args up to the superclass self.statuses_queryset = kwargs.pop("statuses_queryset", {}) # Instantiate the superclass normally super().__init__(*args, **kwargs) def get_snapshot(self, obj): user_model_cls = get_user_model() snapshot = obj.snapshot if snapshot is None: return None try: owner_field = snapshot.get("owner", None) if isinstance(owner_field, int): owner = cached_get_user_by_pk(owner_field) else: owner = cached_get_user_by_email(owner_field) snapshot["owner"] = owner.email except user_model_cls.DoesNotExist: pass try: assigned_to_field = snapshot.get("assigned_to", None) if isinstance(assigned_to_field, int): assigned_to = cached_get_user_by_pk(assigned_to_field) else: assigned_to = cached_get_user_by_email(assigned_to_field) snapshot["assigned_to"] = assigned_to.email except user_model_cls.DoesNotExist: pass if "status" in snapshot: snapshot["status"] = self.statuses_queryset.get(snapshot["status"]) return snapshot
class WikiPageSerializer(serializers.LightSerializer): id = Field() slug = Field() content = Field() created_date = Field() modified_date = Field() permalink = serializers.SerializerMethodField("get_permalink") project = ProjectSerializer() owner = UserSerializer() last_modifier = UserSerializer() def get_permalink(self, obj): return resolve_front_url("wiki", obj.project.slug, obj.slug)
class BaseCustomAttributeSerializer(serializers.LightSerializer): id = Field() name = Field() description = Field() type = Field() order = Field() project = Field(attr="project_id") extra = Field() created_date = Field() modified_date = Field()
class WikiPageExportSerializer(HistoryExportSerializerMixin, AttachmentExportSerializerMixin, WatcheableObjectLightSerializerMixin, RelatedExportSerializer): slug = Field() owner = UserRelatedField() last_modifier = UserRelatedField() modified_date = DateTimeField() created_date = DateTimeField() content = Field() version = Field() def statuses_queryset(self, project): return {}
class UserSerializer(serializers.LightSerializer): id = Field(attr="pk") permalink = MethodField() username = MethodField() full_name = MethodField() photo = MethodField() gravatar_id = MethodField() def get_permalink(self, obj): return resolve_front_url("user", obj.username) def get_username(self, obj): return obj.get_username() def get_full_name(self, obj): return obj.get_full_name() def get_photo(self, obj): return get_user_photo_url(obj) def get_gravatar_id(self, obj): return get_user_gravatar_id(obj) def to_value(self, instance): if instance is None: return None return super().to_value(instance)
class UserStoryStatusSerializer(serializers.LightSerializer): id = Field() name = I18NField() slug = Field() order = Field() is_closed = Field() is_archived = Field() color = Field() wip_limit = Field() project = Field(attr="project_id")
class UserStoryStatusExportSerializer(RelatedExportSerializer): name = Field() slug = Field() order = Field() is_closed = Field() is_archived = Field() color = Field() wip_limit = Field()
class DueDateSerializerMixin(serializers.LightSerializer): due_date = Field() due_date_reason = Field() due_date_status = MethodField() THRESHOLD = 14 def get_due_date_status(self, obj): if obj.due_date is None: return 'not_set' elif obj.status and obj.status.is_closed: return 'no_longer_applicable' elif timezone.now().date() > obj.due_date: return 'past_due' elif (timezone.now().date() + dt.timedelta( days=self.THRESHOLD)) >= obj.due_date: return 'due_soon' else: return 'set'
class SeveritySerializer(serializers.LightSerializer): id = Field(attr="pk") name = MethodField() color = MethodField() def get_name(self, obj): return obj.name def get_color(self, obj): return obj.color
class MembershipSerializer(serializers.LightSerializer): id = Field() user = Field(attr="user_id") project = Field(attr="project_id") role = Field(attr="role_id") is_admin = Field() created_at = Field() invited_by = Field(attr="invited_by_id") invitation_extra_text = Field() user_order = Field() role_name = MethodField() full_name = MethodField() is_user_active = MethodField() color = MethodField() photo = MethodField() gravatar_id = MethodField() project_name = MethodField() project_slug = MethodField() invited_by = UserBasicInfoSerializer() is_owner = MethodField() def get_role_name(self, obj): return obj.role.name if obj.role else None def get_full_name(self, obj): return obj.user.get_full_name() if obj.user else None def get_is_user_active(self, obj): return obj.user.is_active if obj.user else False def get_color(self, obj): return obj.user.color if obj.user else None def get_photo(self, obj): return get_user_photo_url(obj.user) def get_gravatar_id(self, obj): return get_user_gravatar_id(obj.user) def get_project_name(self, obj): return obj.project.name if obj and obj.project else "" def get_project_slug(self, obj): return obj.project.slug if obj and obj.project else "" def get_is_owner(self, obj): return (obj and obj.user_id and obj.project_id and obj.project.owner_id and obj.user_id == obj.project.owner_id)
class UserStorySearchResultsSerializer(serializers.LightSerializer): id = Field() ref = Field() subject = Field() status = Field(attr="status_id") total_points = MethodField() milestone_name = MethodField() milestone_slug = MethodField() def get_milestone_name(self, obj): return obj.milestone.name if obj.milestone else None def get_milestone_slug(self, obj): return obj.milestone.slug if obj.milestone else None def get_total_points(self, obj): assert hasattr(obj, "total_points_attr"), \ "instance must have a total_points_attr attribute" return obj.total_points_attr
class IssueExportSerializer(CustomAttributesValuesExportSerializerMixin, HistoryExportSerializerMixin, AttachmentExportSerializerMixin, WatcheableObjectLightSerializerMixin, RelatedExportSerializer): owner = UserRelatedField() status = SlugRelatedField(slug_field="name") assigned_to = UserRelatedField() priority = SlugRelatedField(slug_field="name") severity = SlugRelatedField(slug_field="name") type = SlugRelatedField(slug_field="name") milestone = SlugRelatedField(slug_field="name") votes = MethodField("get_votes") modified_date = DateTimeField() created_date = DateTimeField() finished_date = DateTimeField() ref = Field() subject = Field() description = Field() external_reference = Field() version = Field() blocked_note = Field() is_blocked = Field() tags = Field() due_date = DateTimeField() due_date_reason = Field() def get_votes(self, obj): return [x.email for x in votes_service.get_voters(obj)] def custom_attributes_queryset(self, project): if project.id not in _custom_issues_attributes_cache: _custom_issues_attributes_cache[project.id] = list( project.issuecustomattributes.all().values('id', 'name')) return _custom_issues_attributes_cache[project.id] def statuses_queryset(self, project): if project.id not in _issues_statuses_cache: _issues_statuses_cache[project.id] = { s.id: s.name for s in project.issue_statuses.all() } return _issues_statuses_cache[project.id]
class UserAdminSerializer(UserSerializer): total_private_projects = MethodField() total_public_projects = MethodField() email = Field() uuid = Field() date_joined = Field() read_new_terms = Field() accepted_terms = Field() max_private_projects = Field() max_public_projects = Field() max_memberships_private_projects = Field() max_memberships_public_projects = Field() def get_total_private_projects(self, user): return user.owned_projects.filter(is_private=True).count() def get_total_public_projects(self, user): return user.owned_projects.filter(is_private=False).count()
class VotedObjectSerializer(HighLightedContentSerializer): is_voter = MethodField() total_voters = Field() def __init__(self, *args, **kwargs): # Don't pass the extra ids args up to the superclass self.user_votes = kwargs.pop("user_votes", {}) # Instantiate the superclass normally super().__init__(*args, **kwargs) def get_is_voter(self, obj): return obj.id in self.user_votes.get(obj.type, [])
class TaskStatusSerializer(serializers.LightSerializer): id = Field() name = I18NField() slug = Field() order = Field() is_closed = Field() color = Field() project = Field(attr="project_id")
class BaseDueDateSerializer(serializers.LightSerializer): id = Field() name = I18NField() order = Field() by_default = Field() days_to_due = Field() color = Field() project = Field(attr="project_id")
class MilestoneExportSerializer(WatcheableObjectLightSerializerMixin, RelatedExportSerializer): name = Field() owner = UserRelatedField() created_date = DateTimeField() modified_date = DateTimeField() estimated_start = Field() estimated_finish = Field() slug = Field() closed = Field() disponibility = Field() order = Field()
class RoleSerializer(serializers.LightSerializer): id = Field() name = Field() slug = Field() project = Field(attr="project_id") order = Field() computable = Field() permissions = Field() members_count = MethodField() def get_members_count(self, obj): return obj.memberships.count()
class ProjectSerializer(serializers.LightSerializer): id = Field(attr="pk") permalink = MethodField() name = MethodField() logo_big_url = MethodField() def get_permalink(self, obj): return resolve_front_url("project", obj.slug) def get_name(self, obj): return obj.name def get_logo_big_url(self, obj): return get_logo_big_thumbnail_url(obj)
class EpicSerializer(EpicListSerializer): comment = MethodField() blocked_note_html = MethodField() description = Field() description_html = MethodField() def get_comment(self, obj): return "" def get_blocked_note_html(self, obj): return mdrender(obj.project, obj.blocked_note) def get_description_html(self, obj): return mdrender(obj.project, obj.description)