Move parse stuff to own file

This commit is contained in:
2022-12-15 01:25:24 +01:00
parent dbd0a58f70
commit 581a9d1340
2 changed files with 58 additions and 54 deletions

View File

@ -1,21 +1,18 @@
import dataclasses
import logging import logging
from datetime import datetime
from typing import List from typing import List
import dateparser
import interactions import interactions
from apscheduler import events from apscheduler import events
from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_MISSED from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_MISSED
from apscheduler.jobstores.base import JobLookupError from apscheduler.jobstores.base import JobLookupError
from apscheduler.triggers.date import DateTrigger from apscheduler.triggers.date import DateTrigger
from dateparser.conf import SettingValidationError
from discord_webhook import DiscordWebhook from discord_webhook import DiscordWebhook
from interactions import CommandContext, Embed, Option, OptionType, autodefer from interactions import CommandContext, Embed, Option, OptionType, autodefer
from interactions.ext.paginator import Paginator from interactions.ext.paginator import Paginator
from discord_reminder_bot.countdown import calculate from discord_reminder_bot.countdown import calculate
from discord_reminder_bot.create_pages import create_pages from discord_reminder_bot.create_pages import create_pages
from discord_reminder_bot.parse import parse_time
from discord_reminder_bot.settings import ( from discord_reminder_bot.settings import (
bot_token, bot_token,
config_timezone, config_timezone,
@ -49,56 +46,6 @@ async def base_command(ctx: interactions.CommandContext):
pass pass
@dataclasses.dataclass
class ParsedTime:
"""
This is used when parsing a time or date from a string.
We use this when adding a job with /reminder add.
Attributes:
date_to_parse: The string we parsed the time from.
err: True if an error was raised when parsing the time.
err_msg: The error message.
parsed_time: The parsed time we got from the string.
"""
date_to_parse: str = None
err: bool = False
err_msg: str = ""
parsed_time: datetime = None
def parse_time(date_to_parse: str, timezone: str = config_timezone) -> ParsedTime:
"""Parse the datetime from a string.
Args:
date_to_parse: The string we want to parse.
timezone: The timezone to use when parsing. This will be used when typing things like "22:00".
Returns:
ParsedTime
"""
try:
parsed_date = dateparser.parse(
f"{date_to_parse}",
settings={
"PREFER_DATES_FROM": "future",
"TIMEZONE": f"{timezone}",
"TO_TIMEZONE": f"{timezone}",
},
)
except SettingValidationError as e:
return ParsedTime(err=True, err_msg=f"Timezone is possible wrong?: {e}", date_to_parse=date_to_parse)
except ValueError as e:
return ParsedTime(err=True, err_msg=f"Failed to parse date. Unknown language: {e}", date_to_parse=date_to_parse)
except TypeError as e:
return ParsedTime(err=True, err_msg=f"{e}", date_to_parse=date_to_parse)
if not parsed_date:
return ParsedTime(err=True, err_msg=f"Could not parse the date.", date_to_parse=date_to_parse)
return ParsedTime(parsed_time=parsed_date, date_to_parse=date_to_parse)
@bot.modal("edit_modal") @bot.modal("edit_modal")
async def modal_response_edit(ctx: CommandContext, *response: str): async def modal_response_edit(ctx: CommandContext, *response: str):
"""This is what gets triggerd when the user clicks the Edit button in /reminder list. """This is what gets triggerd when the user clicks the Edit button in /reminder list.

View File

@ -0,0 +1,57 @@
import dataclasses
from datetime import datetime
import dateparser
from dateparser.conf import SettingValidationError
from discord_reminder_bot.settings import config_timezone
@dataclasses.dataclass
class ParsedTime:
"""
This is used when parsing a time or date from a string.
We use this when adding a job with /reminder add.
Attributes:
date_to_parse: The string we parsed the time from.
err: True if an error was raised when parsing the time.
err_msg: The error message.
parsed_time: The parsed time we got from the string.
"""
date_to_parse: str = None
err: bool = False
err_msg: str = ""
parsed_time: datetime = None
def parse_time(date_to_parse: str, timezone: str = config_timezone) -> ParsedTime:
"""Parse the datetime from a string.
Args:
date_to_parse: The string we want to parse.
timezone: The timezone to use when parsing. This will be used when typing things like "22:00".
Returns:
ParsedTime
"""
try:
parsed_date = dateparser.parse(
f"{date_to_parse}",
settings={
"PREFER_DATES_FROM": "future",
"TIMEZONE": f"{timezone}",
"TO_TIMEZONE": f"{timezone}",
},
)
except SettingValidationError as e:
return ParsedTime(err=True, err_msg=f"Timezone is possible wrong?: {e}", date_to_parse=date_to_parse)
except ValueError as e:
return ParsedTime(err=True, err_msg=f"Failed to parse date. Unknown language: {e}", date_to_parse=date_to_parse)
except TypeError as e:
return ParsedTime(err=True, err_msg=f"{e}", date_to_parse=date_to_parse)
if not parsed_date:
return ParsedTime(err=True, err_msg=f"Could not parse the date.", date_to_parse=date_to_parse)
return ParsedTime(parsed_time=parsed_date, date_to_parse=date_to_parse)