Skip to content

Commit

Permalink
Don't use dateutil
Browse files Browse the repository at this point in the history
  • Loading branch information
tiltowait committed Aug 12, 2023
1 parent 652d77d commit f7ddf4c
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 35 deletions.
28 changes: 14 additions & 14 deletions inconnu/roleplay/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
from datetime import datetime, timezone

import discord
from dateutil.parser import ParserError
from dateutil.parser import parse as parse_dt
from discord.ext.pages import Paginator
from pymongo import DESCENDING

Expand Down Expand Up @@ -55,7 +53,7 @@ async def search(
dt_query["$lt"] = before
if dt_query:
query["date"] = dt_query
except (ValueError, ParserError) as err:
except (ValueError, SyntaxError) as err:
await inconnu.utils.error(ctx, err, title="Invalid date")
return

Expand Down Expand Up @@ -119,18 +117,20 @@ def convert_dates(after: str, before: str) -> tuple[datetime, datetime]:
ValueError if before is after after.
ParserError if a datetime can't be inferred."""

def convert_tzs(dt: datetime) -> datetime:
def convert_tzs(dt: str | None) -> datetime:
"""If the datetime has a timezone, convert it to UTC and remove it."""
if dt.tzinfo is None:
return dt
return dt.astimezone(timezone.utc).replace(tzinfo=None)

# NOTE: In a future dateutil version, this will raise an exception if the
# timezone can't be inferred.
if after:
after = convert_tzs(parse_dt(after))
if before:
before = convert_tzs(parse_dt(before))
if dt is None:
return None
try:
dt = datetime.strptime(dt, "%Y%m%d")
if dt.tzinfo is None:
return dt
return dt.astimezone(timezone.utc).replace(tzinfo=None)
except ValueError as err:
raise SyntaxError(f"Invalid date: `{dt}`.\nAccepted format: YYYYMMDD.") from err

after = convert_tzs(after)
before = convert_tzs(before)

if before and after:
if before <= after:
Expand Down
17 changes: 1 addition & 16 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ fastapi = "^0.100.0"
aiocache = "^0.12.1"
py-cord = "^2.4.1"
pyparsing = "^3.1.1"
python-dateutil = "^2.8.2"

[tool.poetry.dev-dependencies]
debugpy = "^1.6.3"
Expand Down
12 changes: 8 additions & 4 deletions tests/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,17 @@ def test_dyscrasias(res):
@pytest.mark.parametrize(
"after,before,exp_b,exp_a,error",
[
("2023-10-10", "2023-11-10", dt(2023, 10, 10), dt(2023, 11, 10), False),
("2023-10-10", "2023-9-10", None, None, True),
(None, None, None, None, False),
(None, "20231110", None, dt(2023, 11, 10), False),
("20231010", None, dt(2023, 10, 10), None, False),
("20231010", "20231110", dt(2023, 10, 10), dt(2023, 11, 10), False),
("20231010", "20230910", None, None, ValueError), # Date mismatch
("Bad date", "20231010", None, None, SyntaxError),
],
)
def test_convert_dates(after: str, before: str, exp_b: dt, exp_a: dt, error: bool):
def test_convert_dates(after: str, before: str, exp_b: dt, exp_a: dt, error: Exception | None):
if error:
with pytest.raises(ValueError):
with pytest.raises(error):
b, a = convert_dates(after, before)
else:
b, a = convert_dates(after, before)
Expand Down

0 comments on commit f7ddf4c

Please sign in to comment.