mirror of
https://github.com/rangermix/TwitchDropsMiner.git
synced 2026-06-01 01:49:40 +00:00
Use aware timestamps in inventory
This commit is contained in:
21
inventory.py
21
inventory.py
@@ -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:
|
||||
|
||||
5
utils.py
5
utils.py
@@ -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))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user