Add project extra info to the user story serializer
parent
d307318b90
commit
9a1b422a42
|
@ -16,12 +16,13 @@
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from taiga.base.api import serializers
|
from taiga.base.api import serializers
|
||||||
from taiga.base.fields import Field, MethodField
|
from taiga.base.fields import Field, MethodField
|
||||||
|
from taiga.projects import services
|
||||||
from taiga.users.serializers import UserBasicInfoSerializer
|
from taiga.users.serializers import UserBasicInfoSerializer
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
|
||||||
|
|
||||||
|
|
||||||
class CachedUsersSerializerMixin(serializers.LightSerializer):
|
class CachedUsersSerializerMixin(serializers.LightSerializer):
|
||||||
def to_value(self, instance):
|
def to_value(self, instance):
|
||||||
|
@ -77,3 +78,27 @@ class StatusExtraInfoSerializerMixin(serializers.LightSerializer):
|
||||||
self._serialized_status[obj.status_id] = serialized_status
|
self._serialized_status[obj.status_id] = serialized_status
|
||||||
|
|
||||||
return serialized_status
|
return serialized_status
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectExtraInfoSerializerMixin(serializers.LightSerializer):
|
||||||
|
project = Field(attr="project_id")
|
||||||
|
project_extra_info = MethodField()
|
||||||
|
|
||||||
|
def to_value(self, instance):
|
||||||
|
self._serialized_project = {}
|
||||||
|
return super().to_value(instance)
|
||||||
|
|
||||||
|
def get_project_extra_info(self, obj):
|
||||||
|
if obj.project_id is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
serialized_project = self._serialized_project.get(obj.project_id, None)
|
||||||
|
if serialized_project is None:
|
||||||
|
serialized_project = {
|
||||||
|
"name": obj.project.name,
|
||||||
|
"slug": obj.project.slug,
|
||||||
|
"logo_small_url": services.get_logo_small_thumbnail_url(obj.project)
|
||||||
|
}
|
||||||
|
self._serialized_project[obj.project_id] = serialized_project
|
||||||
|
|
||||||
|
return serialized_project
|
||||||
|
|
|
@ -434,8 +434,10 @@ class ProjectDetailSerializer(ProjectSerializer):
|
||||||
return len(obj.members_attr)
|
return len(obj.members_attr)
|
||||||
|
|
||||||
def get_is_out_of_owner_limits(self, obj):
|
def get_is_out_of_owner_limits(self, obj):
|
||||||
assert hasattr(obj, "private_projects_same_owner_attr"), "instance must have a private_projects_same_owner_attr attribute"
|
assert hasattr(obj, "private_projects_same_owner_attr"), ("instance must have a private_projects_same"
|
||||||
assert hasattr(obj, "public_projects_same_owner_attr"), "instance must have a public_projects_same_owner_attr attribute"
|
"_owner_attr attribute")
|
||||||
|
assert hasattr(obj, "public_projects_same_owner_attr"), ("instance must have a public_projects_same_"
|
||||||
|
"owner_attr attribute")
|
||||||
return services.check_if_project_is_out_of_owner_limits(
|
return services.check_if_project_is_out_of_owner_limits(
|
||||||
obj,
|
obj,
|
||||||
current_memberships=self.get_total_memberships(obj),
|
current_memberships=self.get_total_memberships(obj),
|
||||||
|
@ -444,8 +446,10 @@ class ProjectDetailSerializer(ProjectSerializer):
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_is_private_extra_info(self, obj):
|
def get_is_private_extra_info(self, obj):
|
||||||
assert hasattr(obj, "private_projects_same_owner_attr"), "instance must have a private_projects_same_owner_attr attribute"
|
assert hasattr(obj, "private_projects_same_owner_attr"), ("instance must have a private_projects_same_"
|
||||||
assert hasattr(obj, "public_projects_same_owner_attr"), "instance must have a public_projects_same_owner_attr attribute"
|
"owner_attr attribute")
|
||||||
|
assert hasattr(obj, "public_projects_same_owner_attr"), ("instance must have a public_projects_same"
|
||||||
|
"_owner_attr attribute")
|
||||||
return services.check_if_project_privacity_can_be_changed(
|
return services.check_if_project_privacity_can_be_changed(
|
||||||
obj,
|
obj,
|
||||||
current_memberships=self.get_total_memberships(obj),
|
current_memberships=self.get_total_memberships(obj),
|
||||||
|
|
|
@ -22,11 +22,12 @@ from taiga.base.neighbors import NeighborsSerializerMixin
|
||||||
|
|
||||||
from taiga.mdrender.service import render as mdrender
|
from taiga.mdrender.service import render as mdrender
|
||||||
from taiga.projects.attachments.serializers import BasicAttachmentsInfoSerializerMixin
|
from taiga.projects.attachments.serializers import BasicAttachmentsInfoSerializerMixin
|
||||||
from taiga.projects.tagging.serializers import TaggedInProjectResourceSerializer
|
|
||||||
from taiga.projects.mixins.serializers import OwnerExtraInfoSerializerMixin
|
|
||||||
from taiga.projects.mixins.serializers import AssignedToExtraInfoSerializerMixin
|
from taiga.projects.mixins.serializers import AssignedToExtraInfoSerializerMixin
|
||||||
|
from taiga.projects.mixins.serializers import OwnerExtraInfoSerializerMixin
|
||||||
|
from taiga.projects.mixins.serializers import ProjectExtraInfoSerializerMixin
|
||||||
from taiga.projects.mixins.serializers import StatusExtraInfoSerializerMixin
|
from taiga.projects.mixins.serializers import StatusExtraInfoSerializerMixin
|
||||||
from taiga.projects.notifications.mixins import WatchedResourceSerializer
|
from taiga.projects.notifications.mixins import WatchedResourceSerializer
|
||||||
|
from taiga.projects.tagging.serializers import TaggedInProjectResourceSerializer
|
||||||
from taiga.projects.votes.mixins.serializers import VoteResourceSerializerMixin
|
from taiga.projects.votes.mixins.serializers import VoteResourceSerializerMixin
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ class OriginIssueSerializer(serializers.LightSerializer):
|
||||||
return super().to_value(instance)
|
return super().to_value(instance)
|
||||||
|
|
||||||
|
|
||||||
class UserStoryListSerializer(
|
class UserStoryListSerializer(ProjectExtraInfoSerializerMixin,
|
||||||
VoteResourceSerializerMixin, WatchedResourceSerializer,
|
VoteResourceSerializerMixin, WatchedResourceSerializer,
|
||||||
OwnerExtraInfoSerializerMixin, AssignedToExtraInfoSerializerMixin,
|
OwnerExtraInfoSerializerMixin, AssignedToExtraInfoSerializerMixin,
|
||||||
StatusExtraInfoSerializerMixin, BasicAttachmentsInfoSerializerMixin,
|
StatusExtraInfoSerializerMixin, BasicAttachmentsInfoSerializerMixin,
|
||||||
|
|
Loading…
Reference in New Issue