From 2d82c0d6b4d00ab073ec2638a3ff64e1afd5c8eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20M=C3=A4der?= <maeder@phys.ethz.ch> Date: Tue, 11 Feb 2020 21:23:10 +0100 Subject: [PATCH] Add filters, improve formatting --- base-config.yaml | 16 ++++++++++++++++ rt.py | 34 ++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/base-config.yaml b/base-config.yaml index 319b6f1..1697c60 100644 --- a/base-config.yaml +++ b/base-config.yaml @@ -10,3 +10,19 @@ pass: secret # The list of user IDs who are allowed to use commands whitelist: - '@user:example.com' +# List of ticket properties to show +filter_properties: +- 'Queue' +- 'Owner' +- 'Creator' +- 'Subject' +- 'Status' +- 'Requestors' +- 'Cc' +- 'Created' +- 'LastUpdated' +# List of history entry properties to show +filter_entry: +- 'Description' +- 'Content' +- 'Created' diff --git a/rt.py b/rt.py index 4d014ac..41c35ff 100755 --- a/rt.py +++ b/rt.py @@ -13,6 +13,8 @@ class Config(BaseProxyConfig): helper.copy("user") helper.copy("pass") helper.copy("whitelist") + helper.copy("filter_properties") + helper.copy("filter_entry") class RT(Plugin): @@ -35,6 +37,8 @@ class RT(Plugin): self.whitelist = set(self.config["whitelist"]) self.api = '{}/REST/1.0/'.format(self.config['url']) self.post_data = {'user': self.config['user'], 'pass': self.config['pass']} + self.filter_properties = set(self.config["filter_properties"]) + self.filter_entry = set(self.config["filter_entry"]) @classmethod def get_config_class(cls) -> Type[BaseProxyConfig]: @@ -50,6 +54,9 @@ class RT(Plugin): return True return False + def filter_dict(self, raw: dict, keys: Set) -> dict: + return {k: v for k, v in raw.items() if k in keys} + async def get_markdown_link(self, number: str) -> str: link = "{}/Ticket/Display.html?id={}".format(self.config['url'], number) markdown = "[rt#{}]({})".format(number, link) @@ -60,8 +67,8 @@ class RT(Plugin): api_show = '{}ticket/{}/show'.format(self.api, number) async with self.http.get(api_show, headers=self.headers) as response: content = await response.text() - ticket = dict(self.regex_properties.findall(content)) - return ticket + raw = dict(self.regex_properties.findall(content)) + return self.filter_dict(raw, self.filter_properties) async def _edit(self, number: str, status: str) -> None: api_edit = '{}ticket/{}/edit'.format(self.api, number) @@ -88,11 +95,12 @@ class RT(Plugin): api_entry = '{}ticket/{}/history/id/{}'.format(self.api, number, entry) async with self.http.get(api_entry, headers=self.headers) as response: content = await response.text() - ticket = dict(self.regex_entry.findall(content)) - if 'Content' in ticket and '\n' in ticket['Content']: - formatted_content = '\n\n' + (' ' * 8) + ticket['Content'] - ticket['Content'] = formatted_content.rstrip() - return ticket + raw = dict(self.regex_entry.findall(content)) + entry = self.filter_dict(raw, self.filter_entry) + if 'Content' in entry and '\n' in entry['Content']: + block = ' \n```\n' + entry['Content'].replace('\n ', '\n').rstrip() + '\n```' + entry['Content'] = block + return entry @command.passive("((^| )([rR][tT]#?))([0-9]+)", multiple=True) async def handler(self, evt: MessageEvent, subs: List[Tuple[str, str]]) -> None: @@ -241,14 +249,12 @@ class RT(Plugin): if not await self.can_manage(evt) or not self.is_valid_number(number): return await evt.mark_read() - properties_dict = await self._properties(number) - properties_list = ["{}: {}".format(k, v) for k, v in properties_dict.items()] - markdown_link = await self.get_markdown_link(number) - markdown = '{} properties: \n{} \n\n'.format(markdown_link, ' \n'.join(properties_list)) + prop_dict = await self._properties(number) + prop_list = ["{}: {}".format(k, v) for k, v in prop_dict.items()] + link = await self.get_markdown_link(number) + await evt.respond('{} properties: \n{}'.format(link, ' \n'.join(prop_list))) history_dict = await self._history(number) for entry in history_dict.keys(): entry_dict = await self._entry(number, entry) entry_list = ["{}: {}".format(k, v) for k, v in entry_dict.items()] - markdown += '{} history entry {}: \n{} \n\n'.format(markdown_link, entry, - ' \n'.join(entry_list)) - await evt.respond(markdown) + await evt.respond('history entry {}: \n{}'.format(entry, ' \n'.join(entry_list))) -- GitLab