From be6ce3ef8da355ca0e56735dbe2cd0944365ef6f Mon Sep 17 00:00:00 2001 From: zevaryx Date: Sat, 26 Mar 2022 03:25:57 -0600 Subject: [PATCH] Fix timestamps being wrong --- jarvis_core/db/models/__init__.py | 21 +++++++++++++-------- jarvis_core/db/models/actions.py | 19 ++++++++++++------- jarvis_core/db/models/modlog.py | 11 ++++++++--- jarvis_core/db/models/twitter.py | 11 ++++++++--- jarvis_core/log.py | 13 +++++++++---- poetry.lock | 4 ++-- 6 files changed, 52 insertions(+), 27 deletions(-) diff --git a/jarvis_core/db/models/__init__.py b/jarvis_core/db/models/__init__.py index 3128bc3..165edc1 100644 --- a/jarvis_core/db/models/__init__.py +++ b/jarvis_core/db/models/__init__.py @@ -1,5 +1,5 @@ """JARVIS database models.""" -from datetime import datetime +from datetime import datetime, timezone from typing import Any, List import marshmallow as ma @@ -11,6 +11,11 @@ from jarvis_core.db.models.modlog import Action, Modlog, Note from jarvis_core.db.models.twitter import TwitterAccount, TwitterFollow +def get_now() -> datetime: + """Get proper timestamp.""" + return datetime.now(tz=timezone.utc) + + class RawField(fields.BaseField, ma.fields.Raw): pass @@ -71,7 +76,7 @@ class Lock(Document): guild: int = fields.IntegerField(required=True) reason: str = fields.StringField(required=True) original_perms: Permission = fields.EmbeddedField(Permission, required=False) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -84,7 +89,7 @@ class Lockdown(Document): guild: int = fields.IntegerField(required=True) reason: str = fields.StringField(required=True) original_perms: int = fields.IntegerField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -95,7 +100,7 @@ class Purge(Document): channel: int = fields.IntegerField(required=True) guild: int = fields.IntegerField(required=True) count: int = fields.IntegerField(default=10) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -108,7 +113,7 @@ class Reminder(Document): channel: int = fields.IntegerField(required=True) message: str = fields.StringField(required=True) remind_at: datetime = fields.DateTimeField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) private: bool = fields.BooleanField(default=False) @@ -137,7 +142,7 @@ class Roleping(Document): guild: int = fields.IntegerField(required=True) admin: int = fields.IntegerField(required=True) bypass: Bypass = fields.EmbeddedField(Bypass) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -161,7 +166,7 @@ class Star(Document): guild: int = fields.IntegerField(required=True) admin: int = fields.IntegerField(required=True) star: int = fields.IntegerField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -171,4 +176,4 @@ class Starboard(Document): channel: int = fields.IntegerField(required=True) guild: int = fields.IntegerField(required=True) admin: int = fields.IntegerField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) diff --git a/jarvis_core/db/models/actions.py b/jarvis_core/db/models/actions.py index 58ac35d..805bf27 100644 --- a/jarvis_core/db/models/actions.py +++ b/jarvis_core/db/models/actions.py @@ -1,11 +1,16 @@ """User action models.""" -from datetime import datetime +from datetime import datetime, timezone from umongo import Document, fields from jarvis_core.db import JARVIS_INST +def get_now() -> datetime: + """Get proper timestamp.""" + return datetime.now(tz=timezone.utc) + + @JARVIS_INST.register class Ban(Document): active: bool = fields.BooleanField(default=True) @@ -13,11 +18,11 @@ class Ban(Document): user: int = fields.IntegerField(required=True) username: str = fields.StringField(required=True) discrim: int = fields.IntegerField(required=True) - duration: int = fields.IntegerField(required=False) + duration: int = fields.IntegerField(required=False, default=None) guild: int = fields.IntegerField(required=True) type: str = fields.StringField(default="perm") reason: str = fields.StringField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -28,7 +33,7 @@ class Kick(Document): guild: int = fields.IntegerField(required=True) reason: str = fields.StringField(required=True) user: int = fields.IntegerField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -41,7 +46,7 @@ class Mute(Document): duration: int = fields.IntegerField(default=10) guild: int = fields.IntegerField(required=True) reason: str = fields.StringField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -54,7 +59,7 @@ class Unban(Document): guild: int = fields.IntegerField(required=True) admin: int = fields.IntegerField(required=True) reason: str = fields.StringField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -67,4 +72,4 @@ class Warning(Document): guild: int = fields.IntegerField(required=True) duration: int = fields.IntegerField(default=24) reason: str = fields.StringField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) diff --git a/jarvis_core/db/models/modlog.py b/jarvis_core/db/models/modlog.py index cde56d1..21e3bc9 100644 --- a/jarvis_core/db/models/modlog.py +++ b/jarvis_core/db/models/modlog.py @@ -1,5 +1,5 @@ """Modlog database models.""" -from datetime import datetime +from datetime import datetime, timezone from typing import List from bson import ObjectId @@ -8,6 +8,11 @@ from umongo import Document, EmbeddedDocument, fields from jarvis_core.db import JARVIS_INST +def get_now() -> datetime: + """Get proper timestamp.""" + return datetime.now(tz=timezone.utc) + + @JARVIS_INST.register class Action(EmbeddedDocument): """Modlog embedded action document.""" @@ -22,7 +27,7 @@ class Note(EmbeddedDocument): admin: int = fields.IntegerField(required=True) content: str = fields.StrField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register @@ -33,5 +38,5 @@ class Modlog(Document): admin: int = fields.IntegerField(required=True) actions: List[Action] = fields.ListField(fields.EmbeddedField(Action), factory=list) open: bool = fields.BoolField(default=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) notes: List[Note] = fields.ListField(fields.EmbeddedField(Note), factory=list) diff --git a/jarvis_core/db/models/twitter.py b/jarvis_core/db/models/twitter.py index ca0a034..fa22c20 100644 --- a/jarvis_core/db/models/twitter.py +++ b/jarvis_core/db/models/twitter.py @@ -1,11 +1,16 @@ """Twitter database models.""" -from datetime import datetime +from datetime import datetime, timezone from umongo import Document, fields from jarvis_core.db import JARVIS_INST +def get_now() -> datetime: + """Get proper timestamp.""" + return datetime.now(tz=timezone.utc) + + @JARVIS_INST.register class TwitterAccount(Document): """Twitter Account object.""" @@ -13,7 +18,7 @@ class TwitterAccount(Document): handle: str = fields.StringField(required=True) twitter_id: int = fields.IntegerField(required=True) last_tweet: int = fields.IntegerField(required=True) - last_sync: datetime = fields.DateTimeField(default=datetime.utcnow) + last_sync: datetime = fields.DateTimeField(default=get_now) class Meta: collection_name = "twitteraccount" @@ -29,7 +34,7 @@ class TwitterFollow(Document): guild: int = fields.IntegerField(required=True) retweets: bool = fields.BooleanField(default=True) admin: int = fields.IntegerField(required=True) - created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + created_at: datetime = fields.DateTimeField(default=get_now) class Meta: collection_name = "twitterfollow" diff --git a/jarvis_core/log.py b/jarvis_core/log.py index b3b5862..f93ffde 100644 --- a/jarvis_core/log.py +++ b/jarvis_core/log.py @@ -6,6 +6,8 @@ FORMAT = "[%(asctime)s] [%(name)s] [%(levelname)8s] %(message)s" handler = logging.StreamHandler() +LOGGER = None + def get_logger(name: str, fmt: Optional[str] = FORMAT) -> logging.Logger: """ @@ -14,8 +16,11 @@ def get_logger(name: str, fmt: Optional[str] = FORMAT) -> logging.Logger: Args: name: Name of the logger """ - logger = logging.getLogger(name) - formatter = logging.Formatter(fmt) - handler.setFormatter(formatter) - logger.addHandler(handler) + global LOGGER + if not (logger := LOGGER): + logger = logging.getLogger(name) + formatter = logging.Formatter(fmt) + handler.setFormatter(formatter) + logger.addHandler(handler) + LOGGER = logger return logger diff --git a/poetry.lock b/poetry.lock index 33fffa1..68aa885 100644 --- a/poetry.lock +++ b/poetry.lock @@ -538,7 +538,7 @@ python-versions = "*" name = "wrapt" version = "1.14.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" @@ -565,7 +565,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "a07e2ba142cae04f133b170017335e96cb4076f0eff2ccbf6a37e080f865505d" +content-hash = "8edf07b473e9615a836f71510d792021c6760ef94abe4b720f9ff12a37c5dce5" [metadata.files] aiohttp = [