[backport] Adding end points for getting projects by slug, tasks, userstories and issues by ref

remotes/origin/enhancement/email-actions
Alejandro Alonso 2014-12-23 12:30:51 +01:00 committed by Jesús Espino
parent 0d70eb088a
commit e1183deaa6
7 changed files with 39 additions and 0 deletions

View File

@ -60,6 +60,12 @@ class ProjectViewSet(ModelCrudViewSet):
qs = models.Project.objects.all()
return attach_votescount_to_queryset(qs, as_field="stars_count")
@list_route(methods=["GET"])
def by_slug(self, request):
slug = request.QUERY_PARAMS.get("slug", None)
project = get_object_or_404(models.Project, slug=slug)
return self.retrieve(request, pk=project.pk)
@detail_route(methods=["GET", "PATCH"])
def modules(self, request, pk=None):
project = self.get_object()

View File

@ -153,6 +153,13 @@ class IssueViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
if obj.type and obj.type.project != obj.project:
raise exc.PermissionDenied(_("You don't have permissions to set this type to this issue."))
@list_route(methods=["GET"])
def by_ref(self, request):
ref = request.QUERY_PARAMS.get("ref", None)
project_id = request.QUERY_PARAMS.get("project", None)
issue = get_object_or_404(models.Issue, ref=ref, project_id=project_id)
return self.retrieve(request, pk=issue.pk)
@list_route(methods=["POST"])
def bulk_create(self, request, **kwargs):
serializer = serializers.IssuesBulkSerializer(data=request.DATA)

View File

@ -40,6 +40,7 @@ class CanLeaveProject(PermissionComponent):
class ProjectPermission(TaigaResourcePermission):
retrieve_perms = HasProjectPerm('view_project')
by_slug_perms = HasProjectPerm('view_project')
create_perms = IsAuthenticated()
update_perms = IsProjectOwner()
partial_update_perms = IsProjectOwner()

View File

@ -236,6 +236,7 @@ class ProjectSerializer(ModelSerializer):
my_permissions = serializers.SerializerMethodField("get_my_permissions")
i_am_owner = serializers.SerializerMethodField("get_i_am_owner")
tags_colors = TagsColorsField(required=False)
users = serializers.SerializerMethodField("get_users")
class Meta:
model = models.Project
@ -256,6 +257,9 @@ class ProjectSerializer(ModelSerializer):
return is_project_owner(self.context["request"].user, obj)
return False
def get_users(self, obj):
return UserSerializer(obj.members.all(), many=True).data
def validate_total_milestones(self, attrs, source):
"""
Check that total_milestones is not null, it's an optional parameter but

View File

@ -64,6 +64,13 @@ class TaskViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
if obj.milestone and obj.user_story and obj.milestone != obj.user_story.milestone:
raise exc.WrongArguments(_("You don't have permissions for add/modify this task."))
@list_route(methods=["GET"])
def by_ref(self, request):
ref = request.QUERY_PARAMS.get("ref", None)
project_id = request.QUERY_PARAMS.get("project", None)
task = get_object_or_404(models.Task, ref=ref, project_id=project_id)
return self.retrieve(request, pk=task.pk)
@list_route(methods=["POST"])
def bulk_create(self, request, **kwargs):
serializer = serializers.TasksBulkSerializer(data=request.DATA)

View File

@ -95,6 +95,13 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
super().post_save(obj, created)
@list_route(methods=["GET"])
def by_ref(self, request):
ref = request.QUERY_PARAMS.get("ref", None)
project_id = request.QUERY_PARAMS.get("project", None)
userstory = get_object_or_404(models.UserStory, ref=ref, project_id=project_id)
return self.retrieve(request, pk=userstory.pk)
@list_route(methods=["POST"])
def bulk_create(self, request, **kwargs):
serializer = serializers.UserStoriesBulkSerializer(data=request.DATA)

View File

@ -45,6 +45,13 @@ class WikiViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMixin,
filter_backends = (filters.CanViewWikiPagesFilterBackend,)
filter_fields = ("project", "slug")
@list_route(methods=["GET"])
def by_slug(self, request):
slug = request.QUERY_PARAMS.get("slug", None)
project_id = request.QUERY_PARAMS.get("project", None)
wiki_page = get_object_or_404(models.WikiPage, slug=slug, project_id=project_id)
return self.retrieve(request, pk=wiki_page.pk)
@list_route(methods=["POST"])
def render(self, request, **kwargs):
content = request.DATA.get("content", None)