blob: cc0dc44fabfdd0c7b0f7fdb4ec387c890fa4e34d [file] [log] [blame]
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Protocol buffers for Monorail features."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from features import features_constants
from protorpc import messages
class Hotlist(messages.Message):
"""This protocol buffer holds all the metadata associated with a hotlist."""
# A numeric identifier for this hotlist.
hotlist_id = messages.IntegerField(1, required=True)
# The short identifier for this hotlist.
name = messages.StringField(2, required=True)
# A one-line summary (human-readable) of the hotlist.
summary = messages.StringField(3, default='')
# A detailed description of the hotlist.
description = messages.StringField(4, default='')
# Hotlists can be marked private to prevent unwanted users from seeing them.
is_private = messages.BooleanField(5, default=False)
# Note that these lists are disjoint (a user ID will not appear twice).
owner_ids = messages.IntegerField(6, repeated=True)
editor_ids = messages.IntegerField(8, repeated=True)
follower_ids = messages.IntegerField(9, repeated=True)
class HotlistItem(messages.Message):
"""Nested message for a hotlist to issue relation."""
issue_id = messages.IntegerField(1, required=True)
rank = messages.IntegerField(2, required=True)
adder_id = messages.IntegerField(3)
date_added = messages.IntegerField(4)
note = messages.StringField(5, default='')
items = messages.MessageField(HotlistItem, 10, repeated=True)
# The default columns to show on hotlist issues page
default_col_spec = messages.StringField(
11, default=features_constants.DEFAULT_COL_SPEC)
def MakeHotlist(name, hotlist_item_fields=None, **kwargs):
"""Returns a hotlist protocol buffer with the given attributes.
Args:
hotlist_item_fields: tuple of (iid, rank, user, date, note)
kwargs should only include the following:
hotlist_id, summary, description, is_private, owner_ids, editor_ids,
follower_ids, default_col_spec"""
hotlist = Hotlist(name=name, **kwargs)
if hotlist_item_fields is not None:
for iid, rank, user, date, note in hotlist_item_fields:
hotlist.items.append(Hotlist.HotlistItem(
issue_id=iid, rank=rank, adder_id=user, date_added=date, note=note))
return hotlist
# For any issues that were added to hotlists before we started storing that
# timestamp, just use the launch date of the feature as a default.
ADDED_TS_FEATURE_LAUNCH_TS = 1484350000 # Jan 13, 2017
def MakeHotlistItem(
issue_id, rank=None, adder_id=None, date_added=None, note=None):
item = Hotlist.HotlistItem(
issue_id=issue_id,
date_added=date_added or ADDED_TS_FEATURE_LAUNCH_TS)
if rank is not None:
item.rank = rank
if adder_id is not None:
item.adder_id = adder_id
if note is not None:
item.note = note
return item