serializers.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. from rest_framework import serializers
  2. from projects.serializers.base_serializers import ProjectReferenceSerializer
  3. from user_reports.serializers import UserReportSerializer
  4. from .models import Issue, Event, EventTag
  5. class EventTagSerializer(serializers.ModelSerializer):
  6. key = serializers.StringRelatedField()
  7. class Meta:
  8. model = EventTag
  9. fields = ("key", "value")
  10. class EventSerializer(serializers.ModelSerializer):
  11. eventID = serializers.CharField(source="event_id_hex")
  12. id = serializers.CharField(source="event_id_hex")
  13. dateCreated = serializers.DateTimeField(source="timestamp")
  14. dateReceived = serializers.DateTimeField(source="created")
  15. tags = EventTagSerializer(many=True)
  16. class Meta:
  17. model = Event
  18. fields = (
  19. "eventID",
  20. "id",
  21. "issue",
  22. # "context",
  23. "contexts",
  24. "culprit",
  25. "dateCreated",
  26. "dateReceived",
  27. "entries",
  28. # "errors",
  29. # "location",
  30. "message",
  31. "metadata",
  32. "packages",
  33. "platform",
  34. "sdk",
  35. "tags",
  36. "title",
  37. "type",
  38. # "user",
  39. )
  40. class EventDetailSerializer(EventSerializer):
  41. projectID = serializers.IntegerField(source="issue.project_id")
  42. userReport = UserReportSerializer(source="user_report")
  43. nextEventID = serializers.SerializerMethodField()
  44. previousEventID = serializers.SerializerMethodField()
  45. class Meta(EventSerializer.Meta):
  46. fields = EventSerializer.Meta.fields + (
  47. "projectID",
  48. "userReport",
  49. "nextEventID",
  50. "previousEventID",
  51. )
  52. def get_next_or_previous(self, obj, is_next):
  53. kwargs = self.context["view"].kwargs
  54. filter_kwargs = {}
  55. if kwargs.get("issue_pk"):
  56. filter_kwargs["issue"] = kwargs["issue_pk"]
  57. if is_next:
  58. result = obj.next(**filter_kwargs)
  59. else:
  60. result = obj.previous(**filter_kwargs)
  61. if result:
  62. return str(result)
  63. def get_nextEventID(self, obj):
  64. return self.get_next_or_previous(obj, True)
  65. def get_previousEventID(self, obj):
  66. return self.get_next_or_previous(obj, False)
  67. class IssueSerializer(serializers.ModelSerializer):
  68. annotations = serializers.JSONField(default=list, read_only=True)
  69. assignedTo = serializers.CharField(default=None, read_only=True)
  70. firstSeen = serializers.DateTimeField(source="created", read_only=True)
  71. hasSeen = serializers.BooleanField(source="has_seen", read_only=True)
  72. isBookmarked = serializers.BooleanField(default=False, read_only=True)
  73. isPublic = serializers.BooleanField(source="is_public", read_only=True)
  74. isSubscribed = serializers.BooleanField(default=False, read_only=True)
  75. lastSeen = serializers.DateTimeField(source="last_seen", read_only=True)
  76. level = serializers.CharField(source="get_level_display", read_only=True)
  77. logger = serializers.CharField(default=None, read_only=True)
  78. metadata = serializers.JSONField(default=dict, read_only=True)
  79. numComments = serializers.IntegerField(default=0, read_only=True)
  80. permalink = serializers.CharField(default="Not implemented", read_only=True)
  81. project = ProjectReferenceSerializer(read_only=True)
  82. shareId = serializers.IntegerField(default=None, read_only=True)
  83. shortId = serializers.CharField(source="short_id_display", read_only=True)
  84. stats = serializers.JSONField(default=dict, read_only=True)
  85. status = serializers.CharField(source="get_status_display")
  86. statusDetails = serializers.JSONField(default=dict, read_only=True)
  87. subscriptionDetails = serializers.CharField(default=None, read_only=True)
  88. type = serializers.CharField(source="get_type_display", read_only=True)
  89. userReportCount = serializers.IntegerField(
  90. source="userreport_set.count", read_only=True
  91. )
  92. userCount = serializers.IntegerField(default=0, read_only=True)
  93. class Meta:
  94. model = Issue
  95. fields = (
  96. "annotations",
  97. "assignedTo",
  98. "count",
  99. "culprit",
  100. "firstSeen",
  101. "hasSeen",
  102. "id",
  103. "isBookmarked",
  104. "isPublic",
  105. "isSubscribed",
  106. "lastSeen",
  107. "level",
  108. "logger",
  109. "metadata",
  110. "numComments",
  111. "permalink",
  112. "project",
  113. "shareId",
  114. "shortId",
  115. "stats",
  116. "status",
  117. "statusDetails",
  118. "subscriptionDetails",
  119. "title",
  120. "type",
  121. "userReportCount",
  122. "userCount",
  123. )
  124. read_only_fields = (
  125. "annotations",
  126. "assignedTo",
  127. "count",
  128. "culprit",
  129. "firstSeen",
  130. "hasSeen",
  131. "id",
  132. "isBookmarked",
  133. "isPublic",
  134. "isSubscribed",
  135. "lastSeen",
  136. "level",
  137. "logger",
  138. "metadata",
  139. "numComments",
  140. "permalink",
  141. "project",
  142. "shareId",
  143. "shortId",
  144. "stats",
  145. "subscriptionDetails",
  146. "title",
  147. "type",
  148. "userCount",
  149. )
  150. def to_representation(self, obj):
  151. """ Workaround for a field called "type" """
  152. primitive_repr = super().to_representation(obj)
  153. primitive_repr["type"] = obj.get_type_display()
  154. return primitive_repr