boartty/gertty/palette.py
James E. Blair 1c97e81578 Add custom palettes and commentlinks
Allow the user to modify the palette and create entire custom palettes
in the config file.

Add support for commentlinks, where matching text can be reformatted
and color added.  A future possibility is adding clickable buttons to
the text.  The following snippet in .gertty.yaml will format and colorize
the Zuul messages:

palettes:
  - name: default
    test-SUCCESS: ['light green', '', '']
    test-FAILURE: ['light red', '', '']

commentlinks:
  - match: "^- (?P<job>.*?) (?P<url>.*?) : (?P<result>.*?) (?P<rest>.*)$"
    replacements:
      - text: "{job:<42}"
      - text:
          color: "test-{result}"
          text: "{result} "
      - text: "{rest}"

Change-Id: Ib4644edd42333f2ef252a6318182efeff16ce1e1
2014-05-27 09:10:23 -07:00

89 lines
3.4 KiB
Python

# Copyright 2014 OpenStack Foundation
#
# 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.
DEFAULT_PALETTE={
'focused': ['default,standout', ''],
'header': ['white,bold', 'dark blue'],
'error': ['light red', 'dark blue'],
'table-header': ['white,bold', ''],
'filename': ['light cyan', ''],
'positive-label': ['dark green', ''],
'negative-label': ['dark red', ''],
'max-label': ['light green', ''],
'min-label': ['light red', ''],
# Diff
'context-button': ['dark magenta', ''],
'focused-context-button': ['light magenta', ''],
'removed-line': ['dark red', ''],
'removed-word': ['light red', ''],
'added-line': ['dark green', ''],
'added-word': ['light green', ''],
'nonexistent': ['default', ''],
'focused-removed-line': ['dark red,standout', ''],
'focused-removed-word': ['light red,standout', ''],
'focused-added-line': ['dark green,standout', ''],
'focused-added-word': ['light green,standout', ''],
'focused-nonexistent': ['default,standout', ''],
'draft-comment': ['default', 'dark gray'],
'comment': ['light gray', 'dark gray'],
'comment-name': ['white', 'dark gray'],
'line-number': ['dark gray', ''],
'focused-line-number': ['dark gray,standout', ''],
# Change view
'change-data': ['light cyan', ''],
'change-header': ['light blue', ''],
'revision-name': ['light blue', ''],
'revision-commit': ['dark blue', ''],
'revision-comments': ['default', ''],
'revision-drafts': ['dark red', ''],
'focused-revision-name': ['light blue,standout', ''],
'focused-revision-commit': ['dark blue,standout', ''],
'focused-revision-comments': ['default,standout', ''],
'focused-revision-drafts': ['dark red,standout', ''],
'change-message-name': ['yellow', ''],
'change-message-header': ['brown', ''],
'revision-button': ['dark magenta', ''],
'focused-revision-button': ['light magenta', ''],
'lines-added': ['light green', ''],
'lines-removed': ['light red', ''],
'reviewer-name': ['yellow', ''],
# project list
'unreviewed-project': ['white', ''],
'subscribed-project': ['default', ''],
'unsubscribed-project': ['dark gray', ''],
'focused-unreviewed-project': ['white,standout', ''],
'focused-subscribed-project': ['default,standout', ''],
'focused-unsubscribed-project': ['dark gray,standout', ''],
# change list
'unreviewed-change': ['default', ''],
'reviewed-change': ['dark gray', ''],
'focused-unreviewed-change': ['default,standout', ''],
'focused-reviewed-change': ['dark gray,standout', ''],
}
class Palette(object):
def __init__(self, config):
self.palette = {}
self.palette.update(DEFAULT_PALETTE)
d = config.copy()
if 'name' in d:
del d['name']
self.palette.update(d)
def getPalette(self):
ret = []
for k,v in self.palette.items():
ret.append(tuple([k]+v))
return ret