Adding ref data to timeline API

remotes/origin/enhancement/email-actions
Alejandro Alonso 2015-04-08 07:34:20 +02:00 committed by David Barragán Merino
parent 4e25b5fa97
commit 9589bba63b
4 changed files with 84 additions and 70 deletions

View File

@ -24,6 +24,7 @@ from functools import partial, wraps
from taiga.base.utils.db import get_typename_for_model_class from taiga.base.utils.db import get_typename_for_model_class
from taiga.celery import app from taiga.celery import app
from taiga.users.services import get_photo_or_gravatar_url, get_big_photo_or_gravatar_url
_timeline_impl_map = {} _timeline_impl_map = {}
@ -165,3 +166,61 @@ def register_timeline_implementation(typename:str, event_type:str, fn=None):
_timeline_impl_map[key] = _wrapper _timeline_impl_map[key] = _wrapper
return _wrapper return _wrapper
def extract_project_info(instance):
return {
"id": instance.pk,
"slug": instance.slug,
"name": instance.name,
}
def extract_user_info(instance):
return {
"id": instance.pk,
"name": instance.get_full_name(),
"photo": get_photo_or_gravatar_url(instance),
"big_photo": get_big_photo_or_gravatar_url(instance),
"username": instance.username,
}
def extract_milestone_info(instance):
return {
"id": instance.pk,
"slug": instance.slug,
"name": instance.name,
}
def extract_userstory_info(instance):
return {
"id": instance.pk,
"ref": instance.ref,
"subject": instance.subject,
}
def extract_issue_info(instance):
return {
"id": instance.pk,
"ref": instance.ref,
"subject": instance.subject,
}
def extract_task_info(instance):
return {
"id": instance.pk,
"ref": instance.ref,
"subject": instance.subject,
}
def extract_wiki_page_info(instance):
return {
"id": instance.pk,
"slug": instance.slug,
}

View File

@ -20,7 +20,8 @@ from taiga.projects.history import services as history_services
from taiga.projects.models import Project from taiga.projects.models import Project
from taiga.users.models import User from taiga.users.models import User
from taiga.projects.history.choices import HistoryType from taiga.projects.history.choices import HistoryType
from taiga.timeline.service import push_to_timeline, build_user_namespace, build_project_namespace from taiga.timeline.service import (push_to_timeline, build_user_namespace,
build_project_namespace, extract_user_info)
# TODO: Add events to followers timeline when followers are implemented. # TODO: Add events to followers timeline when followers are implemented.
# TODO: Add events to project watchers timeline when project watchers are implemented. # TODO: Add events to project watchers timeline when project watchers are implemented.
@ -72,13 +73,14 @@ def on_new_history_entry(sender, instance, created, **kwargs):
elif instance.type == HistoryType.delete: elif instance.type == HistoryType.delete:
event_type = "delete" event_type = "delete"
user = User.objects.get(id=instance.user["pk"])
extra_data = { extra_data = {
"values_diff": instance.values_diff, "values_diff": instance.values_diff,
"user": instance.user, "user": extract_user_info(user),
"comment": instance.comment, "comment": instance.comment,
} }
user = User.objects.get(id=instance.user["pk"])
_push_to_timelines(project, user, obj, event_type, extra_data=extra_data) _push_to_timelines(project, user, obj, event_type, extra_data=extra_data)

View File

@ -15,18 +15,14 @@
# 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 taiga.timeline.service import register_timeline_implementation from taiga.timeline.service import register_timeline_implementation
from . import service
@register_timeline_implementation("projects.project", "create") @register_timeline_implementation("projects.project", "create")
@register_timeline_implementation("projects.project", "change") @register_timeline_implementation("projects.project", "change")
@register_timeline_implementation("projects.project", "delete") @register_timeline_implementation("projects.project", "delete")
def project_timeline(instance, extra_data={}): def project_timeline(instance, extra_data={}):
result ={ result ={
"project": { "project": service.extract_project_info(instance),
"id": instance.pk,
"slug": instance.slug,
"name": instance.name,
},
} }
result.update(extra_data) result.update(extra_data)
return result return result
@ -37,16 +33,8 @@ def project_timeline(instance, extra_data={}):
@register_timeline_implementation("milestones.milestone", "delete") @register_timeline_implementation("milestones.milestone", "delete")
def project_timeline(instance, extra_data={}): def project_timeline(instance, extra_data={}):
result ={ result ={
"milestone": { "milestone": service.extract_milestone_info(instance),
"id": instance.pk, "project": service.extract_project_info(instance.project),
"slug": instance.slug,
"name": instance.name,
},
"project": {
"id": instance.project.pk,
"slug": instance.project.slug,
"name": instance.project.name,
}
} }
result.update(extra_data) result.update(extra_data)
return result return result
@ -57,15 +45,8 @@ def project_timeline(instance, extra_data={}):
@register_timeline_implementation("userstories.userstory", "delete") @register_timeline_implementation("userstories.userstory", "delete")
def userstory_timeline(instance, extra_data={}): def userstory_timeline(instance, extra_data={}):
result ={ result ={
"userstory": { "userstory": service.extract_userstory_info(instance),
"id": instance.pk, "project": service.extract_project_info(instance.project),
"subject": instance.subject,
},
"project": {
"id": instance.project.pk,
"slug": instance.project.slug,
"name": instance.project.name,
}
} }
result.update(extra_data) result.update(extra_data)
return result return result
@ -76,15 +57,8 @@ def userstory_timeline(instance, extra_data={}):
@register_timeline_implementation("issues.issue", "delete") @register_timeline_implementation("issues.issue", "delete")
def issue_timeline(instance, extra_data={}): def issue_timeline(instance, extra_data={}):
result ={ result ={
"issue": { "issue": service.extract_issue_info(instance),
"id": instance.pk, "project": service.extract_project_info(instance.project),
"subject": instance.subject,
},
"project": {
"id": instance.project.pk,
"slug": instance.project.slug,
"name": instance.project.name,
}
} }
result.update(extra_data) result.update(extra_data)
return result return result
@ -95,15 +69,8 @@ def issue_timeline(instance, extra_data={}):
@register_timeline_implementation("tasks.task", "delete") @register_timeline_implementation("tasks.task", "delete")
def task_timeline(instance, extra_data={}): def task_timeline(instance, extra_data={}):
result ={ result ={
"task": { "task": service.extract_task_info(instance),
"id": instance.pk, "project": service.extract_project_info(instance.project),
"subject": instance.subject,
},
"project": {
"id": instance.project.pk,
"slug": instance.project.slug,
"name": instance.project.name,
}
} }
result.update(extra_data) result.update(extra_data)
return result return result
@ -114,15 +81,8 @@ def task_timeline(instance, extra_data={}):
@register_timeline_implementation("wiki.wikipage", "delete") @register_timeline_implementation("wiki.wikipage", "delete")
def wiki_page_timeline(instance, extra_data={}): def wiki_page_timeline(instance, extra_data={}):
result ={ result ={
"wiki_page": { "wiki_page": service.extract_wiki_page_info(instance),
"id": instance.pk, "project": service.extract_project_info(instance.project),
"slug": instance.slug,
},
"project": {
"id": instance.project.pk,
"slug": instance.project.slug,
"name": instance.project.name,
}
} }
result.update(extra_data) result.update(extra_data)
return result return result
@ -132,15 +92,8 @@ def wiki_page_timeline(instance, extra_data={}):
@register_timeline_implementation("projects.membership", "delete") @register_timeline_implementation("projects.membership", "delete")
def membership_create_timeline(instance, extra_data={}): def membership_create_timeline(instance, extra_data={}):
result = { result = {
"user": { "user": service.extract_user_info(instance.user),
"id": instance.user.pk, "project": service.extract_project_info(instance.project),
"name": instance.user.get_full_name(),
},
"project": {
"id": instance.project.pk,
"slug": instance.project.slug,
"name": instance.project.name,
},
} }
result.update(extra_data) result.update(extra_data)
return result return result

View File

@ -134,7 +134,7 @@ def test_create_project_timeline():
project_timeline = service.get_project_timeline(project) project_timeline = service.get_project_timeline(project)
assert project_timeline[0].event_type == "projects.project.create" assert project_timeline[0].event_type == "projects.project.create"
assert project_timeline[0].data["project"]["name"] == "test project timeline" assert project_timeline[0].data["project"]["name"] == "test project timeline"
assert project_timeline[0].data["user"]["pk"] == project.owner.id assert project_timeline[0].data["user"]["id"] == project.owner.id
assert project_timeline[0].data["user"]["name"] == project.owner.get_full_name() assert project_timeline[0].data["user"]["name"] == project.owner.get_full_name()
@ -144,7 +144,7 @@ def test_create_milestone_timeline():
milestone_timeline = service.get_project_timeline(milestone.project) milestone_timeline = service.get_project_timeline(milestone.project)
assert milestone_timeline[0].event_type == "milestones.milestone.create" assert milestone_timeline[0].event_type == "milestones.milestone.create"
assert milestone_timeline[0].data["milestone"]["name"] == "test milestone timeline" assert milestone_timeline[0].data["milestone"]["name"] == "test milestone timeline"
assert milestone_timeline[0].data["user"]["pk"] == milestone.owner.id assert milestone_timeline[0].data["user"]["id"] == milestone.owner.id
assert milestone_timeline[0].data["user"]["name"] == milestone.owner.get_full_name() assert milestone_timeline[0].data["user"]["name"] == milestone.owner.get_full_name()
@ -154,7 +154,7 @@ def test_create_user_story_timeline():
project_timeline = service.get_project_timeline(user_story.project) project_timeline = service.get_project_timeline(user_story.project)
assert project_timeline[0].event_type == "userstories.userstory.create" assert project_timeline[0].event_type == "userstories.userstory.create"
assert project_timeline[0].data["userstory"]["subject"] == "test us timeline" assert project_timeline[0].data["userstory"]["subject"] == "test us timeline"
assert project_timeline[0].data["user"]["pk"] == user_story.owner.id assert project_timeline[0].data["user"]["id"] == user_story.owner.id
assert project_timeline[0].data["user"]["name"] == user_story.owner.get_full_name() assert project_timeline[0].data["user"]["name"] == user_story.owner.get_full_name()
@ -164,7 +164,7 @@ def test_create_issue_timeline():
project_timeline = service.get_project_timeline(issue.project) project_timeline = service.get_project_timeline(issue.project)
assert project_timeline[0].event_type == "issues.issue.create" assert project_timeline[0].event_type == "issues.issue.create"
assert project_timeline[0].data["issue"]["subject"] == "test issue timeline" assert project_timeline[0].data["issue"]["subject"] == "test issue timeline"
assert project_timeline[0].data["user"]["pk"] == issue.owner.id assert project_timeline[0].data["user"]["id"] == issue.owner.id
assert project_timeline[0].data["user"]["name"] == issue.owner.get_full_name() assert project_timeline[0].data["user"]["name"] == issue.owner.get_full_name()
@ -174,7 +174,7 @@ def test_create_task_timeline():
project_timeline = service.get_project_timeline(task.project) project_timeline = service.get_project_timeline(task.project)
assert project_timeline[0].event_type == "tasks.task.create" assert project_timeline[0].event_type == "tasks.task.create"
assert project_timeline[0].data["task"]["subject"] == "test task timeline" assert project_timeline[0].data["task"]["subject"] == "test task timeline"
assert project_timeline[0].data["user"]["pk"] == task.owner.id assert project_timeline[0].data["user"]["id"] == task.owner.id
assert project_timeline[0].data["user"]["name"] == task.owner.get_full_name() assert project_timeline[0].data["user"]["name"] == task.owner.get_full_name()
@ -184,7 +184,7 @@ def test_create_wiki_page_timeline():
project_timeline = service.get_project_timeline(page.project) project_timeline = service.get_project_timeline(page.project)
assert project_timeline[0].event_type == "wiki.wikipage.create" assert project_timeline[0].event_type == "wiki.wikipage.create"
assert project_timeline[0].data["wiki_page"]["slug"] == "test wiki page timeline" assert project_timeline[0].data["wiki_page"]["slug"] == "test wiki page timeline"
assert project_timeline[0].data["user"]["pk"] == page.owner.id assert project_timeline[0].data["user"]["id"] == page.owner.id
assert project_timeline[0].data["user"]["name"] == page.owner.get_full_name() assert project_timeline[0].data["user"]["name"] == page.owner.get_full_name()