Use aware timestamps in inventory

This commit is contained in:
DevilXD
2022-01-22 19:13:22 +01:00
parent c0d6d8eb60
commit 7e5f34748b
2 changed files with 16 additions and 10 deletions

View File

@@ -1,12 +1,12 @@
from __future__ import annotations
from datetime import datetime
from functools import cached_property
from datetime import datetime, timezone
from typing import Optional, List, Dict, Set, Iterable, TYPE_CHECKING
from channel import Channel
from utils import invalidate_cache, Game
from constants import JsonType, GQL_OPERATIONS
from utils import Game, timestamp, invalidate_cache
if TYPE_CHECKING:
from twitch import Twitch
@@ -19,8 +19,8 @@ class BaseDrop:
self.name: str = data["name"]
self.campaign: DropsCampaign = campaign
self.rewards: List[str] = [b["benefit"]["name"] for b in data["benefitEdges"]]
self.starts_at: datetime = datetime.strptime(data["startAt"], "%Y-%m-%dT%H:%M:%SZ")
self.ends_at: datetime = datetime.strptime(data["endAt"], "%Y-%m-%dT%H:%M:%SZ")
self.starts_at: datetime = timestamp(data["startAt"])
self.ends_at: datetime = timestamp(data["endAt"])
self.claim_id: Optional[str] = None
self.is_claimed: bool = False
if "self" in data:
@@ -53,7 +53,8 @@ class BaseDrop:
self.preconditions # preconditions are met
and not self.is_claimed # drop isn't already claimed
and self.campaign.active # campaign is active
and self.starts_at <= datetime.utcnow() < self.ends_at # it's within the timeframe
# it's within the active timeframe
and self.starts_at <= datetime.now(timezone.utc) < self.ends_at
)
@property
@@ -166,8 +167,8 @@ class DropsCampaign:
self.id: str = data["id"]
self.name: str = data["name"]
self.game: Game = Game(data["game"])
self.starts_at: datetime = datetime.strptime(data["startAt"], "%Y-%m-%dT%H:%M:%SZ")
self.ends_at: datetime = datetime.strptime(data["endAt"], "%Y-%m-%dT%H:%M:%SZ")
self.starts_at: datetime = timestamp(data["startAt"])
self.ends_at: datetime = timestamp(data["endAt"])
allowed = data["allow"]
self.allowed_channels: List[Channel] = (
[
@@ -190,15 +191,15 @@ class DropsCampaign:
@property
def active(self):
return self.starts_at <= datetime.utcnow() < self.ends_at
return self.starts_at <= datetime.now(timezone.utc) < self.ends_at
@property
def upcoming(self) -> bool:
return datetime.utcnow() < self.starts_at
return datetime.now(timezone.utc) < self.starts_at
@property
def expired(self) -> bool:
return self.ends_at <= datetime.utcnow()
return self.ends_at <= datetime.now(timezone.utc)
@property
def total_drops(self) -> int:

View File

@@ -7,6 +7,7 @@ import logging
from functools import wraps
from contextlib import suppress
from collections import OrderedDict
from datetime import datetime, timezone
from typing import Union, List, MutableSet, Iterable, Iterator, Generic, TypeVar
from constants import JsonType
@@ -18,6 +19,10 @@ logger = logging.getLogger("TwitchDrops")
NONCE_CHARS = string.ascii_letters + string.digits
def timestamp(string: str) -> datetime:
return datetime.strptime(string, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc)
def create_nonce(length: int = 30) -> str:
return ''.join(random.choices(NONCE_CHARS, k=length))