Skip to content

Commit 5694e3e

Browse files
committed
feat: adds disable_descriptions flag
1 parent 0ae38c1 commit 5694e3e

File tree

8 files changed

+122
-22
lines changed

8 files changed

+122
-22
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Set up Python
2424
uses: actions/setup-python@v3
2525
with:
26-
python-version: "3.10"
26+
python-version: "3.11"
2727
- name: Install Dependencies
2828
run: make install
2929
- name: Check format
@@ -34,7 +34,7 @@ jobs:
3434
runs-on: ubuntu-latest
3535
strategy:
3636
matrix:
37-
pythonversion: ["3.7", "3.8", "3.9", "3.10"]
37+
pythonversion: ["3.7", "3.8", "3.9", "3.10", "3.11"]
3838
steps:
3939
- name: Checkout Repository
4040
uses: actions/checkout@v3

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- name: Set up Python
1515
uses: actions/setup-python@v3
1616
with:
17-
python-version: "3.10"
17+
python-version: "3.11"
1818
- name: Build package
1919
run: |
2020
make install

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG
22

3+
## v4.5.0 (2022-10-25)
4+
5+
- Adds `--disable_descriptions` flag which will not populate the description in messages
6+
37
## v4.4.0 (2022-08-08)
48

59
- Adds support for team reviewers to populate in messages

pullbug/bug.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def __init__( # nosec - no hardcoded token here, ignore
6363
location: str = os.path.expanduser('~/pullbug'),
6464
base_url: str = DEFAULT_BASE_URL,
6565
log_level: str = DEFAULT_LOG_LEVEL,
66+
disable_descriptions: bool = False,
6667
):
6768
# Parameter variables
6869
self.github_owner = github_owner
@@ -81,6 +82,7 @@ def __init__( # nosec - no hardcoded token here, ignore
8182
self.location = location
8283
self.base_url = base_url
8384
self.log_level = log_level
85+
self.disable_descriptions = disable_descriptions
8486

8587
# Internal variables
8688
self.github_instance = Github(login_or_token=self.github_token, base_url=self.base_url)
@@ -289,20 +291,20 @@ def iterate_pull_requests(self, pull_requests: PaginatedList.PaginatedList) -> T
289291
users_who_approved=users_who_approved,
290292
users_who_requested_changes=users_who_requested_changes,
291293
users_who_were_dismissed=users_who_were_dismissed,
294+
disable_descriptions=self.disable_descriptions,
292295
)
293296
slack_message_array.append(message)
294297
discord_message_array.append(discord_message)
295298

296299
return slack_message_array, discord_message_array
297300

298-
@staticmethod
299-
def iterate_issues(issues: PaginatedList.PaginatedList) -> Tuple[List[str], List[str]]:
301+
def iterate_issues(self, issues: PaginatedList.PaginatedList) -> Tuple[List[str], List[str]]:
300302
"""Iterate through each issue of a repo and build the message array."""
301303
slack_message_array = []
302304
discord_message_array = []
303305

304306
for issue in issues:
305-
slack_message, discord_message = Message.prepare_issues_message(issue)
307+
slack_message, discord_message = Message.prepare_issues_message(issue, self.disable_descriptions)
306308
slack_message_array.append(slack_message)
307309
discord_message_array.append(discord_message)
308310

pullbug/cli.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ def __init__(self):
146146
choices=set(get_args(LOG_LEVEL_CHOICES)),
147147
help='The log level used for the tool.',
148148
)
149+
parser.add_argument(
150+
'--disable_descriptions',
151+
required=False,
152+
action='store_true',
153+
default=False,
154+
help='Disables descriptions in messages.',
155+
)
149156
parser.parse_args(namespace=self)
150157

151158
def run(self):
@@ -166,6 +173,7 @@ def run(self):
166173
self.location,
167174
self.base_url,
168175
self.log_level,
176+
self.disable_descriptions,
169177
)
170178
bug.run()
171179

pullbug/messages.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,23 @@ def prepare_pulls_message(
8181
users_who_approved: List[NamedUser.NamedUser],
8282
users_who_requested_changes: List[NamedUser.NamedUser],
8383
users_who_were_dismissed: List[NamedUser.NamedUser],
84+
disable_descriptions: bool = False,
8485
) -> Tuple[str, str]:
8586
"""Prepares a GitHub pull request message with a single pull request's data.
8687
This will then be appended to an array of messages.
8788
8889
Slack and Discord each have slightly different formatting required, both messages are returned here.
8990
"""
9091
pull_request_body = pull_request.body if pull_request.body else ''
91-
description = (
92-
pull_request_body[:DESCRIPTION_MAX_LENGTH] + DESCRIPTION_CONTINUATION
93-
if len(pull_request_body) > DESCRIPTION_MAX_LENGTH
94-
else pull_request_body
95-
)
92+
description_message_element = ''
93+
94+
if disable_descriptions is False:
95+
description = (
96+
pull_request_body[:DESCRIPTION_MAX_LENGTH] + DESCRIPTION_CONTINUATION
97+
if len(pull_request_body) > DESCRIPTION_MAX_LENGTH
98+
else pull_request_body
99+
)
100+
description_message_element = f"\n*Description:* {description}"
96101

97102
slack_reviewers_string = ''
98103
discord_reviewers_string = ''
@@ -155,33 +160,37 @@ def prepare_pulls_message(
155160
f"\n:arrow_heading_up: *Pull Request:* {Message._create_slack_object_link(pull_request)}"
156161
f"\n*Repo:* <{pull_request.base.repo.html_url}|{pull_request.base.repo.name}>"
157162
f"\n*Author:* <{pull_request.user.html_url}|{pull_request.user.login}>"
158-
f"\n*Description:* {description}"
163+
f"{description_message_element}"
159164
f"\n*Reviewers:*{slack_reviewers_string if slack_reviewers_string else ' NA'}\n"
160165
)
161166

162167
discord_message = (
163168
f"\n:arrow_heading_up: **Pull Request:** {Message._create_discord_object_link(pull_request)}"
164169
f"\n**Repo:** {pull_request.base.repo.name} (<{pull_request.base.repo.html_url}>)"
165170
f"\n**Author:** {pull_request.user.html_url} (<{pull_request.user.login}>)"
166-
f"\n**Description:** {description}"
171+
f"{description_message_element}"
167172
f"\n*Reviewers:*{discord_reviewers_string if discord_reviewers_string else ' NA'}\n"
168173
)
169174

170175
return slack_message, discord_message
171176

172177
@staticmethod
173-
def prepare_issues_message(issue: Issue.Issue) -> Tuple[str, str]:
178+
def prepare_issues_message(issue: Issue.Issue, disable_descriptions: bool = False) -> Tuple[str, str]:
174179
"""Prepares a GitHub issue message with a single issue's data.
175180
This will then be appended to an array of messages.
176181
177182
Slack and Discord each have slightly different formatting required, both messages are returned here.
178183
"""
179184
issue_body = issue.body if issue.body else ''
180-
description = (
181-
issue_body[:DESCRIPTION_MAX_LENGTH] + DESCRIPTION_CONTINUATION
182-
if len(issue_body) > DESCRIPTION_MAX_LENGTH
183-
else issue_body
184-
)
185+
description_message_element = ''
186+
187+
if disable_descriptions is False:
188+
description = (
189+
issue_body[:DESCRIPTION_MAX_LENGTH] + DESCRIPTION_CONTINUATION
190+
if len(issue_body) > DESCRIPTION_MAX_LENGTH
191+
else issue_body
192+
)
193+
description_message_element = f"\n*Description:* {description}"
185194

186195
if issue.assignees:
187196
slack_users = []
@@ -196,14 +205,14 @@ def prepare_issues_message(issue: Issue.Issue) -> Tuple[str, str]:
196205
slack_message = (
197206
f"\n:exclamation: *Issue:* {Message._create_slack_object_link(issue)}"
198207
f"\n*Repo:* <{issue.repository.html_url}|{issue.repository.name}>"
199-
f"\n*Description:* {description}"
208+
f"{description_message_element}"
200209
f"\n*Assigned to:* {', '.join(slack_users)}\n"
201210
)
202211

203212
discord_message = (
204213
f"\n:exclamation: **Issue:** {Message._create_discord_object_link(issue)}"
205214
f"\n**Repo:** {issue.repository.name} (<{issue.repository.html_url}>)"
206-
f"\n**Description:** {description}"
215+
f"{description_message_element}"
207216
f"\n**Assigned to:** {', '.join(discord_users)}\n"
208217
)
209218

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
setuptools.setup(
3030
name='pullbug',
31-
version='4.4.0',
31+
version='4.5.0',
3232
description='Get bugged via Discord or Slack to merge your GitHub pull requests or close open issues.',
3333
long_description=long_description,
3434
long_description_content_type="text/markdown",

test/unit/test_messages.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def test_prepare_pulls_message(mock_pull_request, mock_user, mock_repo):
9797

9898
# Slack message
9999
assert 'Pull Request' in slack_message
100+
assert 'Description' in slack_message
100101
assert f'{reviewer.html_url}|{reviewer.login}' in slack_message
101102
assert team.name in slack_message
102103
assert f'{approved_reviewer.html_url}|{approved_reviewer.login}' in slack_message
@@ -106,6 +107,7 @@ def test_prepare_pulls_message(mock_pull_request, mock_user, mock_repo):
106107

107108
# Discord message
108109
assert 'Pull Request' in discord_message
110+
assert 'Description' in discord_message
109111
assert f'{reviewer.login} (<{reviewer.html_url}>)' in discord_message
110112
assert team.name in discord_message
111113
assert f'{approved_reviewer.login} (<{approved_reviewer.html_url}>)' in discord_message
@@ -155,17 +157,75 @@ def test_prepare_pulls_message_no_reviewers(mock_pull_request):
155157
assert '*Reviewers:* NA' in discord_message
156158

157159

160+
def test_prepare_pulls_message_disabled_description(mock_pull_request, mock_user, mock_repo):
161+
"""Tests that we build all user strings and messages correctly when descriptions are disabled."""
162+
reviewer = MagicMock(spec=NamedUser.NamedUser)
163+
reviewer.login = 'reviewer'
164+
reviewer.html_url = f'https://github.com/{mock_user}'
165+
166+
team = MagicMock(spec=Team.Team)
167+
team.name = 'team'
168+
169+
reviewers = [reviewer, team]
170+
171+
approved_reviewer = MagicMock(spec=NamedUser.NamedUser)
172+
approved_reviewer.login = 'approved_reviewer'
173+
approved_reviewer.html_url = f'https://github.com/{mock_user}'
174+
approved_reviewers = [approved_reviewer]
175+
176+
requested_changes_reviewer = MagicMock(spec=NamedUser.NamedUser)
177+
requested_changes_reviewer.login = 'requested_changes_reviewer'
178+
requested_changes_reviewer.html_url = f'https://github.com/{mock_user}'
179+
requested_changes_reviewers = [requested_changes_reviewer]
180+
181+
dismissed_reviewer = MagicMock(spec=NamedUser.NamedUser)
182+
dismissed_reviewer.login = 'dismissed_reviewer'
183+
dismissed_reviewer.html_url = f'https://github.com/{mock_user}'
184+
dismissed_reviewers = [dismissed_reviewer]
185+
186+
slack_message, discord_message = Message.prepare_pulls_message(
187+
pull_request=mock_pull_request,
188+
reviewers=reviewers,
189+
users_who_approved=approved_reviewers,
190+
users_who_requested_changes=requested_changes_reviewers,
191+
users_who_were_dismissed=dismissed_reviewers,
192+
disable_descriptions=True,
193+
)
194+
195+
# Slack message
196+
assert 'Pull Request' in slack_message
197+
assert 'Description' not in slack_message
198+
assert f'{reviewer.html_url}|{reviewer.login}' in slack_message
199+
assert team.name in slack_message
200+
assert f'{approved_reviewer.html_url}|{approved_reviewer.login}' in slack_message
201+
assert f'{requested_changes_reviewer.html_url}|{requested_changes_reviewer.login}' in slack_message
202+
assert f'{dismissed_reviewer.html_url}|{dismissed_reviewer.login}' in slack_message
203+
assert f'{mock_pull_request.html_url}|{mock_pull_request.title}' in slack_message
204+
205+
# Discord message
206+
assert 'Pull Request' in discord_message
207+
assert 'Description' not in discord_message
208+
assert f'{reviewer.login} (<{reviewer.html_url}>)' in discord_message
209+
assert team.name in discord_message
210+
assert f'{approved_reviewer.login} (<{approved_reviewer.html_url}>)' in discord_message
211+
assert f'{requested_changes_reviewer.login} (<{requested_changes_reviewer.html_url}>)' in discord_message
212+
assert f'{dismissed_reviewer.login} (<{dismissed_reviewer.html_url}>)' in discord_message
213+
assert f'{mock_pull_request.title} (<{mock_pull_request.html_url}>)' in discord_message
214+
215+
158216
def test_prepare_issues_message(mock_issue, mock_user, mock_repo):
159217
"""Tests that we build the issue message strings correctly when there is an assignee."""
160218
slack_message, discord_message = Message.prepare_issues_message(mock_issue)
161219

162220
# Slack message
163221
assert 'Issue' in slack_message
222+
assert 'Description' in slack_message
164223
assert f'{mock_issue.assignees[0].html_url}|{mock_issue.assignees[0].login}' in slack_message
165224
assert f'{mock_issue.html_url}|{mock_issue.title}' in slack_message
166225

167226
# Discord message
168227
assert 'Issue' in discord_message
228+
assert 'Description' in discord_message
169229
assert f'{mock_issue.assignees[0].login} (<{mock_issue.assignees[0].html_url}>)' in discord_message
170230
assert f'{mock_issue.title} (<{mock_issue.html_url}>)' in discord_message
171231

@@ -176,3 +236,20 @@ def test_prepare_issues_message_no_assignee(mock_issue):
176236
slack_message, _ = Message.prepare_issues_message(mock_issue)
177237

178238
assert '*Assigned to:* NA' in slack_message
239+
240+
241+
def test_prepare_issues_message_disable_descriptions(mock_issue, mock_user, mock_repo):
242+
"""Tests that we build the issue message strings correctly when descriptions are disabled."""
243+
slack_message, discord_message = Message.prepare_issues_message(issue=mock_issue, disable_descriptions=True)
244+
245+
# Slack message
246+
assert 'Issue' in slack_message
247+
assert 'Description' not in slack_message
248+
assert f'{mock_issue.assignees[0].html_url}|{mock_issue.assignees[0].login}' in slack_message
249+
assert f'{mock_issue.html_url}|{mock_issue.title}' in slack_message
250+
251+
# Discord message
252+
assert 'Issue' in discord_message
253+
assert 'Description' not in discord_message
254+
assert f'{mock_issue.assignees[0].login} (<{mock_issue.assignees[0].html_url}>)' in discord_message
255+
assert f'{mock_issue.title} (<{mock_issue.html_url}>)' in discord_message

0 commit comments

Comments
 (0)