From 1a2e7446c72ec287dd9a94f678fab851ba89349c Mon Sep 17 00:00:00 2001 From: Luna Date: Fri, 25 Jun 2021 15:32:29 -0300 Subject: [PATCH] fix winter usage across codebase --- litecord/blueprints/auth.py | 4 ++-- litecord/blueprints/channel/messages.py | 4 ++-- litecord/blueprints/channel/pins.py | 17 ++++++++--------- litecord/blueprints/channels.py | 3 +-- litecord/blueprints/dm_channels.py | 4 ++-- litecord/blueprints/dms.py | 4 ++-- litecord/blueprints/guild/channels.py | 4 ++-- litecord/blueprints/guild/emoji.py | 4 ++-- litecord/blueprints/guilds.py | 8 ++++---- litecord/blueprints/user/billing.py | 11 +++++------ litecord/blueprints/user/billing_job.py | 3 +-- litecord/blueprints/webhooks.py | 6 +++--- litecord/common/guilds.py | 3 +-- litecord/common/messages.py | 3 +-- litecord/common/users.py | 3 +-- litecord/system_messages.py | 12 ++++++------ run.py | 2 ++ 17 files changed, 45 insertions(+), 50 deletions(-) diff --git a/litecord/blueprints/auth.py b/litecord/blueprints/auth.py index aae2143..f36ebc7 100644 --- a/litecord/blueprints/auth.py +++ b/litecord/blueprints/auth.py @@ -24,7 +24,7 @@ import itsdangerous import bcrypt from quart import Blueprint, jsonify, request, current_app as app from logbook import Logger -from winter import get_snowflake + from litecord.auth import token_check from litecord.common.users import create_user @@ -187,7 +187,7 @@ async def _logout(): @bp.route("/fingerprint", methods=["POST"]) async def _fingerprint(): """No idea what this route is about.""" - fingerprint_id = get_snowflake() + fingerprint_id = app.winter_factory.snowflake() fingerprint = f"{fingerprint_id}.{secrets.token_urlsafe(32)}" return jsonify({"fingerprint": fingerprint}) diff --git a/litecord/blueprints/channel/messages.py b/litecord/blueprints/channel/messages.py index 78eebca..2df02da 100644 --- a/litecord/blueprints/channel/messages.py +++ b/litecord/blueprints/channel/messages.py @@ -27,7 +27,7 @@ from litecord.blueprints.auth import token_check from litecord.blueprints.checks import channel_check, channel_perm_check from litecord.errors import MessageNotFound, Forbidden from litecord.enums import MessageType, ChannelType, GUILD_CHANS -from winter import get_snowflake + from litecord.schemas import validate, MESSAGE_CREATE from litecord.utils import pg_set_json, query_tuple_from_args, extract_limit from litecord.permissions import get_permissions @@ -150,7 +150,7 @@ async def _dm_pre_dispatch(channel_id, peer_id): async def create_message( channel_id: int, actual_guild_id: Optional[int], author_id: int, data: dict ) -> int: - message_id = get_snowflake() + message_id = app.winter_factory.snowflake() async with app.db.acquire() as conn: await pg_set_json(conn) diff --git a/litecord/blueprints/channel/pins.py b/litecord/blueprints/channel/pins.py index 0f11812..6e683d8 100644 --- a/litecord/blueprints/channel/pins.py +++ b/litecord/blueprints/channel/pins.py @@ -21,7 +21,6 @@ from quart import Blueprint, current_app as app, jsonify from litecord.auth import token_check from litecord.blueprints.checks import channel_check, channel_perm_check -from winter import snowflake_datetime from litecord.types import timestamp_ from litecord.system_messages import send_sys_message @@ -95,16 +94,16 @@ async def add_pin(channel_id, message_id): row = await app.db.fetchrow( """ - SELECT message_id - FROM channel_pins - WHERE channel_id = $1 - ORDER BY message_id ASC - LIMIT 1 - """, + SELECT message_id + FROM channel_pins + WHERE channel_id = $1 + ORDER BY message_id ASC + LIMIT 1 + """, channel_id, ) - timestamp = snowflake_datetime(row["message_id"]) + timestamp = app.winter_factory.to_datetime(row["message_id"]) await app.dispatcher.channel.dispatch( channel_id, @@ -151,7 +150,7 @@ async def delete_pin(channel_id, message_id): channel_id, ) - timestamp = snowflake_datetime(row["message_id"]) + timestamp = app.winter_factory.to_datetime(row["message_id"]) await app.dispatcher.channel.dispatch( channel_id, diff --git a/litecord/blueprints/channels.py b/litecord/blueprints/channels.py index feea63e..2681b12 100644 --- a/litecord/blueprints/channels.py +++ b/litecord/blueprints/channels.py @@ -24,7 +24,6 @@ from dataclasses import dataclass from quart import Blueprint, request, current_app as app, jsonify from logbook import Logger -from winter import snowflake_datetime from litecord.auth import token_check from litecord.enums import ChannelType, GUILD_CHANS, MessageType, MessageFlags @@ -851,7 +850,7 @@ async def bulk_delete(channel_id: int): # we must error. a cuter behavior would be returning the message ids # that were deleted, ignoring the 2 week+ old ones. for message_id in message_ids: - message_dt = snowflake_datetime(message_id) + message_dt = app.winter_factory.to_datetime(message_id) delta = datetime.datetime.utcnow() - message_dt if delta.days > 14: diff --git a/litecord/blueprints/dm_channels.py b/litecord/blueprints/dm_channels.py index f5e25c6..3a21829 100644 --- a/litecord/blueprints/dm_channels.py +++ b/litecord/blueprints/dm_channels.py @@ -24,7 +24,7 @@ from litecord.blueprints.auth import token_check from litecord.blueprints.checks import channel_check from litecord.enums import ChannelType, MessageType from litecord.errors import BadRequest, Forbidden -from winter import get_snowflake + from litecord.system_messages import send_sys_message from litecord.pubsub.channel import gdm_recipient_view from litecord.pubsub.user import dispatch_user @@ -60,7 +60,7 @@ async def gdm_create(user_id, peer_id) -> int: Returns the new GDM id. """ - channel_id = get_snowflake() + channel_id = app.winter_factory.snowflake() await app.db.execute( """ diff --git a/litecord/blueprints/dms.py b/litecord/blueprints/dms.py index ef9fbe6..cec199e 100644 --- a/litecord/blueprints/dms.py +++ b/litecord/blueprints/dms.py @@ -26,7 +26,7 @@ from logbook import Logger from ..schemas import validate, CREATE_DM, CREATE_GROUP_DM from ..enums import ChannelType -from winter import get_snowflake + from .auth import token_check @@ -70,7 +70,7 @@ async def create_dm(user_id, recipient_id): # if no dm was found, create a new one - dm_id = get_snowflake() + dm_id = app.winter_factory.snowflake() await app.db.execute( """ INSERT INTO channels (id, channel_type) diff --git a/litecord/blueprints/guild/channels.py b/litecord/blueprints/guild/channels.py index c05b3ed..3f5d809 100644 --- a/litecord/blueprints/guild/channels.py +++ b/litecord/blueprints/guild/channels.py @@ -20,7 +20,7 @@ along with this program. If not, see . from quart import Blueprint, request, current_app as app, jsonify from litecord.blueprints.auth import token_check -from winter import get_snowflake + from litecord.errors import BadRequest from litecord.enums import ChannelType from litecord.blueprints.guild.roles import gen_pairs @@ -56,7 +56,7 @@ async def create_channel(guild_id): if channel_type not in (ChannelType.GUILD_TEXT, ChannelType.GUILD_VOICE): raise BadRequest("Invalid channel type") - new_channel_id = get_snowflake() + new_channel_id = app.winter_factory.snowflake() await create_guild_channel(guild_id, new_channel_id, channel_type, **j) chan = await app.storage.get_channel(new_channel_id) diff --git a/litecord/blueprints/guild/emoji.py b/litecord/blueprints/guild/emoji.py index 74f5740..7012e24 100644 --- a/litecord/blueprints/guild/emoji.py +++ b/litecord/blueprints/guild/emoji.py @@ -22,7 +22,7 @@ from quart import Blueprint, jsonify, current_app as app, request from litecord.auth import token_check from litecord.blueprints.checks import guild_check, guild_perm_check from litecord.schemas import validate, NEW_EMOJI, PATCH_EMOJI -from winter import get_snowflake + from litecord.types import KILOBYTES from litecord.images import parse_data_uri from litecord.errors import BadRequest @@ -94,7 +94,7 @@ async def _put_emoji(guild_id): mime, _ = parse_data_uri(j["image"]) await _guild_emoji_size_check(guild_id, mime) - emoji_id = get_snowflake() + emoji_id = app.winter_factory.snowflake() icon = await app.icons.put( "emoji", diff --git a/litecord/blueprints/guilds.py b/litecord/blueprints/guilds.py index 1f15f3a..5d887d1 100644 --- a/litecord/blueprints/guilds.py +++ b/litecord/blueprints/guilds.py @@ -29,7 +29,7 @@ from litecord.common.guilds import ( ) from ..auth import token_check -from winter import get_snowflake + from ..enums import ChannelType from ..schemas import ( validate, @@ -79,7 +79,7 @@ async def guild_create_roles_prep(guild_id: int, roles: list): async def guild_create_channels_prep(guild_id: int, channels: list): """Create channels pre-guild create""" for channel_raw in channels: - channel_id = get_snowflake() + channel_id = app.winter_factory.snowflake() ctype = ChannelType(channel_raw["type"]) await create_guild_channel(guild_id, channel_id, ctype) @@ -120,7 +120,7 @@ async def create_guild(): user_id = await token_check() j = validate(await request.get_json(), GUILD_CREATE) - guild_id = get_snowflake() + guild_id = app.winter_factory.snowflake() if "icon" in j: image = await put_guild_icon(guild_id, j["icon"]) @@ -177,7 +177,7 @@ async def create_guild(): ) # create a single #general channel. - general_id = get_snowflake() + general_id = app.winter_factory.snowflake() await create_guild_channel( guild_id, general_id, ChannelType.GUILD_TEXT, name="general" diff --git a/litecord/blueprints/user/billing.py b/litecord/blueprints/user/billing.py index ce8f64c..acccae5 100644 --- a/litecord/blueprints/user/billing.py +++ b/litecord/blueprints/user/billing.py @@ -26,7 +26,6 @@ from logbook import Logger from litecord.auth import token_check from litecord.schemas import validate -from winter import snowflake_datetime, get_snowflake from litecord.errors import BadRequest from litecord.types import timestamp_, HOURS from litecord.enums import UserFlags, PremiumType @@ -240,7 +239,7 @@ async def get_payment(payment_id: int): drow.pop("subscription_id") drow.pop("user_id") - drow["created_at"] = snowflake_datetime(int(drow["id"])) + drow["created_at"] = app.winter_factory.to_datetime(int(drow["id"])) drow["payment_source"] = await get_payment_source(row["user_id"], row["source_id"]) @@ -253,7 +252,7 @@ async def create_payment(subscription_id): """Create a payment.""" sub = await get_subscription(subscription_id) - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() amount = AMOUNTS[sub["payment_gateway_plan_id"]] @@ -302,7 +301,7 @@ async def process_subscription(subscription_id: int): subscription_id, ) - first_payment_ts = snowflake_datetime(first_payment_id) + first_payment_ts = app.winter_factory.to_datetime(first_payment_id) premium_since = await app.db.fetchval( """ @@ -394,7 +393,7 @@ async def _create_payment_source(): j = validate(await request.get_json(), PAYMENT_SOURCE) - new_source_id = get_snowflake() + new_source_id = app.winter_factory.snowflake() await app.db.execute( """ @@ -438,7 +437,7 @@ async def _create_subscription(): "premium_year_tier_2": "1 year", }[plan_id] - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() await app.db.execute( f""" diff --git a/litecord/blueprints/user/billing_job.py b/litecord/blueprints/user/billing_job.py index 5e3a2c9..0824f82 100644 --- a/litecord/blueprints/user/billing_job.py +++ b/litecord/blueprints/user/billing_job.py @@ -34,7 +34,6 @@ from litecord.blueprints.user.billing import ( process_subscription, ) -from winter import snowflake_datetime from litecord.types import MINUTES log = Logger(__name__) @@ -71,7 +70,7 @@ async def _process_user_payments(user_id: int): # calculate the difference between this payment # and now. now = datetime.datetime.now() - payment_tstamp = snowflake_datetime(int(payment_data["id"])) + payment_tstamp = app.winter_factory.to_datetime(int(payment_data["id"])) delta = now - payment_tstamp diff --git a/litecord/blueprints/webhooks.py b/litecord/blueprints/webhooks.py index 10e8254..26675be 100644 --- a/litecord/blueprints/webhooks.py +++ b/litecord/blueprints/webhooks.py @@ -39,7 +39,7 @@ from litecord.schemas import ( WEBHOOK_MESSAGE_CREATE, ) from litecord.enums import ChannelType -from winter import get_snowflake + from litecord.utils import async_map from litecord.errors import WebhookNotFound, Unauthorized, ChannelNotFound, BadRequest @@ -174,7 +174,7 @@ async def create_webhook(channel_id: int): guild_id = await app.storage.guild_from_channel(channel_id) - webhook_id = get_snowflake() + webhook_id = app.winter_factory.snowflake() # I'd say generating a full fledged token with itsdangerous is # relatively wasteful since webhooks don't even have a password_hash, @@ -352,7 +352,7 @@ async def del_webhook_tokened(webhook_id, webhook_token): async def create_message_webhook(guild_id, channel_id, webhook_id, data): """Create a message, but for webhooks only.""" - message_id = get_snowflake() + message_id = app.winter_factory.snowflake() async with app.db.acquire() as conn: await pg_set_json(conn) diff --git a/litecord/common/guilds.py b/litecord/common/guilds.py index 715688c..4dd9e81 100644 --- a/litecord/common/guilds.py +++ b/litecord/common/guilds.py @@ -21,7 +21,6 @@ from typing import List from logbook import Logger from quart import current_app as app -from ..snowflake import get_snowflake from ..permissions import get_role_perms, get_permissions from ..utils import dict_get, maybe_lazy_guild_dispatch from ..enums import ChannelType @@ -70,7 +69,7 @@ async def remove_member_multi(guild_id: int, members: list): async def create_role(guild_id, name: str, **kwargs): """Create a role in a guild.""" - new_role_id = get_snowflake() + new_role_id = app.winter_factory.snowflake() everyone_perms = await get_role_perms(guild_id, guild_id) default_perms = dict_get(kwargs, "default_perms", everyone_perms.binary) diff --git a/litecord/common/messages.py b/litecord/common/messages.py index ab43767..5923f85 100644 --- a/litecord/common/messages.py +++ b/litecord/common/messages.py @@ -5,7 +5,6 @@ from PIL import Image from quart import request, current_app as app from litecord.errors import BadRequest -from ..snowflake import get_snowflake log = logging.getLogger(__name__) @@ -69,7 +68,7 @@ async def msg_add_attachment(message_id: int, channel_id: int, attachment_file) quart FileStorage instance of the file. """ - attachment_id = get_snowflake() + attachment_id = app.winter_factory.snowflake() filename = attachment_file.filename # understand file info diff --git a/litecord/common/users.py b/litecord/common/users.py index a7b8842..550218b 100644 --- a/litecord/common/users.py +++ b/litecord/common/users.py @@ -25,7 +25,6 @@ from asyncpg import UniqueViolationError from logbook import Logger from ..presence import BasePresence -from ..snowflake import get_snowflake from ..errors import BadRequest from ..auth import hash_data from ..utils import rand_hex @@ -149,7 +148,7 @@ async def create_user(username: str, email: str, password: str) -> Tuple[int, st Generates a distriminator and other information. You can fetch the user data back with :meth:`Storage.get_user`. """ - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() new_discrim = await roll_discrim(username) if new_discrim is None: diff --git a/litecord/system_messages.py b/litecord/system_messages.py index 43e0a38..5f1dfe4 100644 --- a/litecord/system_messages.py +++ b/litecord/system_messages.py @@ -20,7 +20,7 @@ along with this program. If not, see . from logbook import Logger from quart import current_app as app -from winter import get_snowflake + from litecord.enums import MessageType log = Logger(__name__) @@ -28,7 +28,7 @@ log = Logger(__name__) async def _handle_pin_msg(channel_id, _pinned_id, author_id): """Handle a message pin.""" - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() await app.db.execute( """ @@ -48,7 +48,7 @@ async def _handle_pin_msg(channel_id, _pinned_id, author_id): # TODO: decrease repetition between add and remove handlers async def _handle_recp_add(channel_id, author_id, peer_id): - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() await app.db.execute( """ @@ -68,7 +68,7 @@ async def _handle_recp_add(channel_id, author_id, peer_id): async def _handle_recp_rmv(channel_id, author_id, peer_id): - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() await app.db.execute( """ @@ -88,7 +88,7 @@ async def _handle_recp_rmv(channel_id, author_id, peer_id): async def _handle_gdm_name_edit(channel_id, author_id): - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() gdm_name = await app.db.fetchval( """ @@ -120,7 +120,7 @@ async def _handle_gdm_name_edit(channel_id, author_id): async def _handle_gdm_icon_edit(channel_id, author_id): - new_id = get_snowflake() + new_id = app.winter_factory.snowflake() await app.db.execute( """ diff --git a/run.py b/run.py index 9f4ab10..2776547 100644 --- a/run.py +++ b/run.py @@ -28,6 +28,7 @@ from quart import Quart, jsonify, request from logbook import StreamHandler, Logger from logbook.compat import redirect_logging from aiohttp import ClientSession +from winter import SnowflakeFactory # import the config set by instance owner import config @@ -257,6 +258,7 @@ async def init_app_db(app_): def init_app_managers(app_: Quart, *, init_voice=True): """Initialize singleton classes.""" + app_.winter_factory = SnowflakeFactory() app_.loop = asyncio.get_event_loop() app_.ratelimiter = RatelimitManager(app_.config.get("_testing")) app_.state_manager = StateManager()