Adding resolver API endpoint

remotes/origin/enhancement/email-actions
Jesús Espino 2014-01-07 15:07:32 +01:00
parent 0575a80e7a
commit f2ec19e61f
5 changed files with 78 additions and 0 deletions

View File

View File

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
from django.db.models.loading import get_model
from rest_framework.response import Response
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from greenmine.base import exceptions as excp
class ResolverViewSet(viewsets.ViewSet):
permission_classes = (IsAuthenticated,)
def list(self, request, **kwargs):
project_model = get_model("projects", "Project")
userstory_model = get_model("userstories", "UserStory")
task_model = get_model("tasks", "Task")
issue_model = get_model("issues", "Issue")
milestone_model = get_model("milestones", "Milestone")
project_slug = request.QUERY_PARAMS.get('project', None)
us_ref = request.QUERY_PARAMS.get('us', None)
task_ref = request.QUERY_PARAMS.get('task', None)
issue_ref = request.QUERY_PARAMS.get('issue', None)
milestone_slug = request.QUERY_PARAMS.get('milestone', None)
if project_slug is None:
return Response({})
try:
project = project_model.objects.get(slug=project_slug)
except project_model.DoesNotExist:
return Response({})
result = {"project": project.id}
if us_ref is not None:
try:
us = project.user_stories.get(ref=us_ref)
result["us"] = us.id
except userstory_model.DoesNotExist:
pass
if task_ref is not None:
try:
task = project.tasks.get(ref=task_ref)
result["task"] = task.id
except task_model.DoesNotExist:
pass
if issue_ref is not None:
try:
issue = project.issues.get(ref=issue_ref)
result["issue"] = issue.id
except issue_model.DoesNotExist:
pass
if milestone_slug is not None:
try:
milestone = project.milestones.get(slug=milestone_slug)
result["milestone"] = milestone.id
except milestone_model.DoesNotExist:
pass
return Response(result)

View File

@ -18,6 +18,7 @@ import datetime
class Milestone(WatchedMixin, models.Model): class Milestone(WatchedMixin, models.Model):
name = models.CharField(max_length=200, db_index=True, null=False, blank=False, name = models.CharField(max_length=200, db_index=True, null=False, blank=False,
verbose_name=_("name")) verbose_name=_("name"))
# TODO: Change the unique restriction to a unique together with the project id
slug = models.SlugField(max_length=250, unique=True, null=False, blank=True, slug = models.SlugField(max_length=250, unique=True, null=False, blank=True,
verbose_name=_("slug")) verbose_name=_("slug"))
owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, owner = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True,

View File

@ -12,9 +12,16 @@ import reversion
class TaskSerializer(serializers.ModelSerializer): class TaskSerializer(serializers.ModelSerializer):
tags = PickleField(required=False, default=[]) tags = PickleField(required=False, default=[])
comment = serializers.SerializerMethodField("get_comment") comment = serializers.SerializerMethodField("get_comment")
milestone_slug = serializers.SerializerMethodField("get_milestone_slug")
class Meta: class Meta:
model = models.Task model = models.Task
def get_comment(self, obj): def get_comment(self, obj):
return "" return ""
def get_milestone_slug(self, obj):
if obj.milestone:
return obj.milestone.slug
else:
return None

View File

@ -5,6 +5,7 @@ from greenmine.base.auth.api import AuthViewSet
from greenmine.base.users.api import RolesViewSet, UsersViewSet from greenmine.base.users.api import RolesViewSet, UsersViewSet
from greenmine.base.searches.api import SearchViewSet from greenmine.base.searches.api import SearchViewSet
from greenmine.base.domains.api import DomainViewSet, DomainMembersViewSet from greenmine.base.domains.api import DomainViewSet, DomainMembersViewSet
from greenmine.base.resolver.api import ResolverViewSet
from greenmine.projects.api import (ProjectViewSet, MembershipViewSet, InvitationViewSet, from greenmine.projects.api import (ProjectViewSet, MembershipViewSet, InvitationViewSet,
UserStoryStatusViewSet, PointsViewSet, TaskStatusViewSet, UserStoryStatusViewSet, PointsViewSet, TaskStatusViewSet,
IssueStatusViewSet, IssueTypeViewSet, PriorityViewSet, IssueStatusViewSet, IssueTypeViewSet, PriorityViewSet,
@ -25,6 +26,9 @@ router.register(r"users", UsersViewSet, base_name="users")
router.register(r"roles", RolesViewSet, base_name="roles") router.register(r"roles", RolesViewSet, base_name="roles")
router.register(r"auth", AuthViewSet, base_name="auth") router.register(r"auth", AuthViewSet, base_name="auth")
# greenmine.base.resolver
router.register(r"resolver", ResolverViewSet, base_name="resolver")
# greenmine.base.searches # greenmine.base.searches
router.register(r"search", SearchViewSet, base_name="search") router.register(r"search", SearchViewSet, base_name="search")