storyboard/storyboard/db/api/timeline_events.py

175 lines
5.1 KiB
Python

# Copyright (c) 2014 Mirantis Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import json
from oslo.config import cfg
from pecan import request
from storyboard.common import event_types
from storyboard.db.api import base as api_base
from storyboard.db import models
from storyboard.notifications import connection_service
CONF = cfg.CONF
def event_get(event_id):
return api_base.entity_get(models.TimeLineEvent, event_id)
def events_get_all(marker=None, limit=None, sort_field=None, sort_dir=None,
**kwargs):
return api_base.entity_get_all(models.TimeLineEvent,
marker=marker,
limit=limit,
sort_field=sort_field,
sort_dir=sort_dir,
**kwargs)
def events_get_count(**kwargs):
return api_base.entity_get_count(models.TimeLineEvent,
**kwargs)
def event_create(values):
new_event = api_base.entity_create(models.TimeLineEvent, values)
if CONF.enable_notifications:
payload_timeline_events = {
"user_id": request.current_user_id,
"method": "POST",
"resource": "timeline_event",
"event_id": new_event.id
}
payload_timeline_events = json.dumps(payload_timeline_events)
routing_key = "timeline_events"
conn = connection_service.get_connection()
channel = conn.connection.channel()
conn.create_exchange(channel, 'storyboard', 'topic')
channel.basic_publish(exchange='storyboard',
routing_key=routing_key,
body=payload_timeline_events)
channel.close()
return new_event
def story_created_event(story_id, author_id):
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.STORY_CREATED,
})
def story_details_changed_event(story_id, author_id):
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.STORY_DETAILS_CHANGED,
})
def task_created_event(story_id, task_id, task_title, author_id):
event_info = {
"task_id": task_id,
"task_title": task_title
}
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.TASK_CREATED,
"event_info": json.dumps(event_info)
})
def task_status_changed_event(story_id, task_id, task_title, author_id,
old_status, new_status):
event_info = {
"task_id": task_id,
"task_title": task_title,
"old_status": old_status,
"new_status": new_status
}
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.TASK_STATUS_CHANGED,
"event_info": json.dumps(event_info)
})
def task_priority_changed_event(story_id, task_id, task_title, author_id,
old_priority, new_priority):
event_info = {
"task_id": task_id,
"task_title": task_title,
"old_priority": old_priority,
"new_priority": new_priority
}
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.TASK_PRIORITY_CHANGED,
"event_info": json.dumps(event_info)
})
def task_assignee_changed_event(story_id, task_id, task_title, author_id,
old_assignee_id, new_assignee_id):
event_info = {
"task_id": task_id,
"task_title": task_title,
"old_assignee_id": old_assignee_id,
"new_assignee_id": new_assignee_id
}
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.TASK_ASSIGNEE_CHANGED,
"event_info": json.dumps(event_info)
})
def task_details_changed_event(story_id, task_id, task_title, author_id):
event_info = {
"task_id": task_id,
"task_title": task_title
}
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.TASK_DETAILS_CHANGED,
"event_info": json.dumps(event_info)
})
def task_deleted_event(story_id, task_id, task_title, author_id):
event_info = {
"task_id": task_id,
"task_title": task_title
}
return event_create({
"story_id": story_id,
"author_id": author_id,
"event_type": event_types.TASK_DELETED,
"event_info": json.dumps(event_info)
})