Add my_homepage attr to projects list

stable
Álex Hermida 2018-11-22 16:51:36 +01:00 committed by Alex Hermida
parent 809a90b777
commit 4fa4c02d16
3 changed files with 35 additions and 1 deletions

View File

@ -113,8 +113,8 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin,
qs = project_utils.attach_notify_policies(qs) qs = project_utils.attach_notify_policies(qs)
qs = project_utils.attach_is_fan(qs, user=self.request.user) qs = project_utils.attach_is_fan(qs, user=self.request.user)
qs = project_utils.attach_my_role_permissions(qs, user=self.request.user) qs = project_utils.attach_my_role_permissions(qs, user=self.request.user)
qs = project_utils.attach_my_role_permissions(qs, user=self.request.user)
qs = project_utils.attach_closed_milestones(qs) qs = project_utils.attach_closed_milestones(qs)
qs = project_utils.attach_my_homepage(qs, user=self.request.user)
else: else:
qs = project_utils.attach_extra_info(qs, user=self.request.user) qs = project_utils.attach_extra_info(qs, user=self.request.user)

View File

@ -290,6 +290,8 @@ class ProjectSerializer(serializers.LightSerializer):
is_fan = Field(attr="is_fan_attr") is_fan = Field(attr="is_fan_attr")
my_homepage = MethodField()
def get_members(self, obj): def get_members(self, obj):
assert hasattr(obj, "members_attr"), "instance must have a members_attr attribute" assert hasattr(obj, "members_attr"), "instance must have a members_attr attribute"
if obj.members_attr is None: if obj.members_attr is None:
@ -374,6 +376,13 @@ class ProjectSerializer(serializers.LightSerializer):
def get_logo_big_url(self, obj): def get_logo_big_url(self, obj):
return services.get_logo_big_thumbnail_url(obj) return services.get_logo_big_thumbnail_url(obj)
def get_my_homepage(self, obj):
assert hasattr(obj, "my_homepage_attr"), "instance must have a my_homepage_attr attribute"
if obj.my_homepage_attr is None:
return False
return obj.my_homepage_attr
class ProjectDetailSerializer(ProjectSerializer): class ProjectDetailSerializer(ProjectSerializer):
epic_statuses = Field(attr="epic_statuses_attr") epic_statuses = Field(attr="epic_statuses_attr")

View File

@ -593,6 +593,30 @@ def attach_public_projects_same_owner(queryset, user, as_field="public_projects_
return queryset return queryset
def attach_my_homepage(queryset, user, as_field="my_homepage_attr"):
"""Attach a homepage array to each object of the queryset.
:param queryset: A Django projects queryset object.
:param as_field: Attach the settings homepage as an attribute with this name.
:return: Queryset object with the additional `as_field` field.
"""
model = queryset.model
if user is None or user.is_anonymous():
sql = "SELECT '{}'"
else:
sql = """
SELECT homepage
FROM settings_userprojectsettings
WHERE settings_userprojectsettings.project_id = {tbl}.id AND
settings_userprojectsettings.user_id = {user_id}"""
sql = sql.format(tbl=model._meta.db_table, user_id=user.id)
queryset = queryset.extra(select={as_field: sql})
return queryset
def attach_extra_info(queryset, user=None): def attach_extra_info(queryset, user=None):
queryset = attach_members(queryset) queryset = attach_members(queryset)
queryset = attach_closed_milestones(queryset) queryset = attach_closed_milestones(queryset)
@ -618,5 +642,6 @@ def attach_extra_info(queryset, user=None):
queryset = attach_private_projects_same_owner(queryset, user) queryset = attach_private_projects_same_owner(queryset, user)
queryset = attach_public_projects_same_owner(queryset, user) queryset = attach_public_projects_same_owner(queryset, user)
queryset = attach_milestones(queryset) queryset = attach_milestones(queryset)
queryset = attach_my_homepage(queryset, user)
return queryset return queryset