From b8db789590bc2b5148e19f15e86167403b3e8cc3 Mon Sep 17 00:00:00 2001 From: zevaryx Date: Sat, 19 Feb 2022 13:27:17 -0700 Subject: [PATCH] Add more utils, change twitter model(s), re-work config --- jarvis_core/__init__.py | 2 +- jarvis_core/config.py | 12 ++---------- jarvis_core/db/models.py | 15 +++++++++++---- jarvis_core/util/__init__.py | 27 +++++++++++++++++++++++++++ pyproject.toml | 2 +- 5 files changed, 42 insertions(+), 16 deletions(-) diff --git a/jarvis_core/__init__.py b/jarvis_core/__init__.py index 8a35a45..80f2df5 100644 --- a/jarvis_core/__init__.py +++ b/jarvis_core/__init__.py @@ -1,2 +1,2 @@ """JARVIS core shared functionalities.""" -__version__ = "0.1.0" +__version__ = "0.3.0" diff --git a/jarvis_core/config.py b/jarvis_core/config.py index 181c106..8290a57 100644 --- a/jarvis_core/config.py +++ b/jarvis_core/config.py @@ -16,16 +16,8 @@ DEFAULT_PATH = Path("config.yaml") class Config(Singleton): - REQUIRED = ["token", "client_id", "mongo", "urls"] - OPTIONAL = { - "sync": False, - "log_level": "WARNING", - "scales": None, - "events": True, - "gitlab_token": None, - "max_messages": 1000, - "twitter": None, - } + REQUIRED = [] + OPTIONAL = {} @classmethod def from_yaml(cls, filepath: Union[Path, str] = DEFAULT_PATH) -> "Config": diff --git a/jarvis_core/db/models.py b/jarvis_core/db/models.py index ee25983..e8325ad 100644 --- a/jarvis_core/db/models.py +++ b/jarvis_core/db/models.py @@ -189,19 +189,26 @@ class Starboard(Document): @JARVIS_INST.register -class Twitter(Document): +class TwitterAccount(Document): + """Twitter Account object.""" + + handle = fields.StringField(required=True) + twitter_id = fields.IntegerField(required=True) + last_tweet = fields.IntegerField(required=True) + last_sync = fields.DateTimeField(default=datetime.utcnow) + + +@JARVIS_INST.register +class TwitterFollow(Document): """Twitter Follow object.""" active = fields.BooleanField(default=True) twitter_id = fields.IntegerField(required=True) - handle = fields.StringField(required=True) channel = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) - last_tweet = fields.IntegerField(required=True) retweets = fields.BooleanField(default=True) admin = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) - last_sync = fields.DateTimeField() @JARVIS_INST.register diff --git a/jarvis_core/util/__init__.py b/jarvis_core/util/__init__.py index 02ebf37..bbef2da 100644 --- a/jarvis_core/util/__init__.py +++ b/jarvis_core/util/__init__.py @@ -1,8 +1,10 @@ """JARVIS quality of life utilities.""" import hashlib +from datetime import datetime from typing import Any, Callable, Iterable, List, Optional, Tuple, Union from aiohttp import ClientSession +from dis_snek.models.discord.embed import Embed from jarvis_core.filters import url @@ -41,6 +43,29 @@ class Singleton(object): setattr(self, key, value) +def build_embed( + title: str, + description: str, + fields: list, + color: str = "#FF0000", + timestamp: datetime = None, + **kwargs: dict, +) -> Embed: + """Embed builder utility function.""" + if not timestamp: + timestamp = datetime.now() + embed = Embed( + title=title, + description=description, + color=color, + timestamp=timestamp, + **kwargs, + ) + for field in fields: + embed.add_field(**field.to_dict()) + return embed + + async def hash( data: str, method: Union[Callable, str] = hashlib.sha256, size: int = DEFAULT_BLOCKSIZE ) -> Tuple[str, int, str]: @@ -83,6 +108,8 @@ async def hash( def convert_bytesize(b: int) -> str: """Convert bytes amount to human readable.""" + if not b: + return "??? B" b = float(b) sizes = ["B", "KB", "MB", "GB", "TB", "PB"] size = 0 diff --git a/pyproject.toml b/pyproject.toml index 8d20e8c..3d42f07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "jarvis-core" -version = "0.2.1" +version = "0.3.0" description = "" authors = ["Your Name "]