From 3cde36d8a7a54c3d007b5c4e53236d88d3e5b03c Mon Sep 17 00:00:00 2001 From: Siarhei Siniak Date: Fri, 11 Jul 2025 11:34:11 +0300 Subject: [PATCH] [+] use timezone for timestamp --- .../versions/729afc7194c9_add_timezone.py | 38 +++++++++++++++++++ .../test_task_2025_06_30_v1/tickers/models.py | 5 ++- .../tickers_retrieval/emcont.py | 9 ++++- 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/alembic/versions/729afc7194c9_add_timezone.py diff --git a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/alembic/versions/729afc7194c9_add_timezone.py b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/alembic/versions/729afc7194c9_add_timezone.py new file mode 100644 index 0000000..883dfb4 --- /dev/null +++ b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/alembic/versions/729afc7194c9_add_timezone.py @@ -0,0 +1,38 @@ +"""add timezone + +Revision ID: 729afc7194c9 +Revises: eb63f793db3a +Create Date: 2025-07-11 11:30:06.246152 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision: str = '729afc7194c9' +down_revision: Union[str, Sequence[str], None] = 'eb63f793db3a' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('tickers_ticker', 'timestamp', + existing_type=postgresql.TIMESTAMP(), + type_=sa.DateTime(timezone=True), + existing_nullable=False) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('tickers_ticker', 'timestamp', + existing_type=sa.DateTime(timezone=True), + type_=postgresql.TIMESTAMP(), + existing_nullable=False) + # ### end Alembic commands ### diff --git a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/models.py b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/models.py index 8d039c6..6b93689 100644 --- a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/models.py +++ b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/models.py @@ -10,6 +10,7 @@ from sqlalchemy import ( String, ForeignKey, Numeric, + DateTime, UniqueConstraint, ) @@ -34,7 +35,9 @@ class Ticker(Base): 'tickers_market.id', ondelete='CASCADE', )) - timestamp: Mapped[datetime.datetime] = mapped_column() + timestamp: Mapped[datetime.datetime] = mapped_column( + DateTime(timezone=True,) + ) value: Mapped[decimal.Decimal] = mapped_column(Numeric( precision=32, scale=6, )) diff --git a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py index c0c2b97..97173a7 100644 --- a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py +++ b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py @@ -3,6 +3,7 @@ import asyncio import decimal import logging import datetime +# import datetime.timezone import pydantic import json @@ -96,7 +97,9 @@ class Emcont: store_timeout: float | int = 0.5, request_period: float | int = 1, ) -> None: - last_retrieval = datetime.datetime.now() + last_retrieval = datetime.datetime.now( + tz=datetime.timezone.utc, + ) assert request_timeout >= 0 assert store_timeout >= 0 @@ -138,7 +141,9 @@ class Emcont: nonlocal next_retrieval return ( - next_retrieval - datetime.datetime.now() + next_retrieval - datetime.datetime.now( + tz=datetime.timezone.utc, + ) ).total_seconds() while True: