aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2021-08-07 10:57:24 -0700
committerGravatar MarkKoz <[email protected]>2021-08-07 10:57:24 -0700
commit1af466753975b70effd5e600d0afc8b21f272dd0 (patch)
tree5f06c423e211b06d0b0bf5f5aabf9649872dfb8f
parentFix create_user_embed tests (diff)
Time: return strings from until_expiration instead of ambiguous None
None was returned for two separate cases: permanent infractions and expired infractions. This resulted in an ambiguity.
-rw-r--r--bot/exts/moderation/infraction/management.py6
-rw-r--r--bot/utils/time.py8
-rw-r--r--tests/bot/utils/test_time.py5
3 files changed, 9 insertions, 10 deletions
diff --git a/bot/exts/moderation/infraction/management.py b/bot/exts/moderation/infraction/management.py
index 0dfd2d759..dda3fadae 100644
--- a/bot/exts/moderation/infraction/management.py
+++ b/bot/exts/moderation/infraction/management.py
@@ -179,8 +179,8 @@ class ModManagement(commands.Cog):
self.infractions_cog.schedule_expiration(new_infraction)
log_text += f"""
- Previous expiry: {time.until_expiration(infraction['expires_at']) or "Permanent"}
- New expiry: {time.until_expiration(new_infraction['expires_at']) or "Permanent"}
+ Previous expiry: {time.until_expiration(infraction['expires_at'])}
+ New expiry: {time.until_expiration(new_infraction['expires_at'])}
""".rstrip()
changes = ' & '.join(confirm_messages)
@@ -362,7 +362,7 @@ class ModManagement(commands.Cog):
user_str = f"<@{user['id']}> ({name}#{user['discriminator']:04})"
if active:
- remaining = time.until_expiration(expires_at) or "Expired"
+ remaining = time.until_expiration(expires_at)
else:
remaining = "Inactive"
diff --git a/bot/utils/time.py b/bot/utils/time.py
index 8ba49a455..4b2fbae2c 100644
--- a/bot/utils/time.py
+++ b/bot/utils/time.py
@@ -303,19 +303,19 @@ def format_with_duration(
return f"{formatted_timestamp} ({duration})"
-def until_expiration(expiry: Optional[Timestamp]) -> Optional[str]:
+def until_expiration(expiry: Optional[Timestamp]) -> str:
"""
Get the remaining time until an infraction's expiration as a Discord timestamp.
`expiry` can be any type supported by the single-arg `arrow.get()`, except for a `tzinfo`.
- Return None if `expiry` is falsy or is in the past.
+ Return "Permanent" if `expiry` is falsy. Return "Expired" if `expiry` is in the past.
"""
if not expiry:
- return None
+ return "Permanent"
expiry = arrow.get(expiry)
if expiry < arrow.utcnow():
- return None
+ return "Expired"
return format_relative(expiry)
diff --git a/tests/bot/utils/test_time.py b/tests/bot/utils/test_time.py
index e235f9b70..120d65176 100644
--- a/tests/bot/utils/test_time.py
+++ b/tests/bot/utils/test_time.py
@@ -100,8 +100,8 @@ class TimeTests(unittest.TestCase):
self.assertEqual(time.format_with_duration(expiry, date_from, max_units), expected)
def test_until_expiration_with_duration_none_expiry(self):
- """until_expiration should work for None expiry."""
- self.assertEqual(time.until_expiration(None), None)
+ """until_expiration should return "Permanent" is expiry is None."""
+ self.assertEqual(time.until_expiration(None), "Permanent")
def test_until_expiration_with_duration_custom_units(self):
"""until_expiration should work for custom max_units."""
@@ -122,7 +122,6 @@ class TimeTests(unittest.TestCase):
('3000-12-12T00:00:00Z', '<t:32533488000:R>'),
('3000-11-23T20:09:00Z', '<t:32531918940:R>'),
('3000-11-23T20:09:00Z', '<t:32531918940:R>'),
- (None, None),
)
for expiry, expected in test_cases: