refactor(generator): имя пояса — комментарием, а не константой
- Зачем:
- константу COUNTER_TIMEZONE не читал ни один модуль, единственным её
читателем был тест про неё же; связь имени и смещения держится тем, что
они стоят в одной строке.
- Что:
- COUNTER_TIMEZONE снят, имя пояса ушло комментарием к
COUNTER_TIMEZONE_MINUTES.
- тест сходимости имени и смещения снят вместе с ним; test_world.py
вернулся к прежнему виду.
- Проверка:
- make lint, make typecheck, make test (407 тестов)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,17 +16,14 @@ from datetime import date
|
|||||||
# Счётчик стенда: сайт один, номер — константа мира.
|
# Счётчик стенда: сайт один, номер — константа мира.
|
||||||
COUNTER_ID = 42150607
|
COUNTER_ID = 42150607
|
||||||
|
|
||||||
# Часовой пояс счётчика — Самара, UTC+4 — записан двумя способами, потому что
|
# Часовой пояс счётчика, минуты от UTC. Модельные сутки считаются в этом поясе,
|
||||||
# стороны просят разное. Генератору нужны минуты: в этом поясе считаются
|
# как в выгрузке Метрики: `EventDate` — дата в поясе счётчика, `UTCEventTime` —
|
||||||
# модельные сутки, как в выгрузке Метрики — `EventDate` дата в поясе счётчика,
|
# абсолютная метка. Отсюда следствие, о котором сторона хранилища должна знать
|
||||||
# `UTCEventTime` абсолютная метка. Отсюда следствие, о котором сторона
|
# заранее: `toDate(UTCEventTime)` ≠ `EventDate` у ночных событий (спека
|
||||||
# хранилища должна знать заранее: `toDate(UTCEventTime)` ≠ `EventDate` у ночных
|
# генератора, раздел 9). Рядом имя того же пояса: числа ClickHouse в этом месте
|
||||||
# событий (спека генератора, раздел 9). Хранилищу тот же пояс нужен именем из
|
# не принимает, витрины пишутся именем (docs/architecture/storage.md, «Часовые
|
||||||
# базы поясов — так пишутся `toDate` и типы колонок DDS
|
# пояса»).
|
||||||
# (docs/architecture/storage.md, «Часовые пояса»). Пути отсюда в SQL нет, имя
|
COUNTER_TIMEZONE_MINUTES = 240 # Europe/Samara
|
||||||
# переносят руками — но берут его здесь.
|
|
||||||
COUNTER_TIMEZONE = "Europe/Samara"
|
|
||||||
COUNTER_TIMEZONE_MINUTES = 240
|
|
||||||
|
|
||||||
# D0 — первый день оси модельного времени, понедельник. Реальный календарь в
|
# D0 — первый день оси модельного времени, понедельник. Реальный календарь в
|
||||||
# модели не участвует: дата нужна лишь затем, чтобы дни оси легли в
|
# модели не участвует: дата нужна лишь затем, чтобы дни оси легли в
|
||||||
|
|||||||
@@ -6,9 +6,6 @@
|
|||||||
«в среднем 3–4 возврата» и «средняя кука активна ≈1,9 дня».
|
«в среднем 3–4 возврата» и «средняя кука активна ≈1,9 дня».
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from datetime import datetime, time, timedelta
|
|
||||||
from zoneinfo import ZoneInfo
|
|
||||||
|
|
||||||
from clickstream_generator import catalog, world
|
from clickstream_generator import catalog, world
|
||||||
|
|
||||||
|
|
||||||
@@ -30,13 +27,6 @@ def test_origin_is_a_monday():
|
|||||||
assert world.ORIGIN.weekday() == 0
|
assert world.ORIGIN.weekday() == 0
|
||||||
|
|
||||||
|
|
||||||
def test_the_counter_timezone_name_and_offset_say_the_same_thing():
|
|
||||||
"""Имя пояса просит хранилище, минуты — генератор; расходиться им нельзя."""
|
|
||||||
midnight = datetime.combine(world.ORIGIN, time())
|
|
||||||
named = ZoneInfo(world.COUNTER_TIMEZONE).utcoffset(midnight)
|
|
||||||
assert named == timedelta(minutes=world.COUNTER_TIMEZONE_MINUTES)
|
|
||||||
|
|
||||||
|
|
||||||
def test_weekly_profile_covers_a_week_and_averages_to_one():
|
def test_weekly_profile_covers_a_week_and_averages_to_one():
|
||||||
assert len(world.WEEKLY_PROFILE_PERCENT) == 7
|
assert len(world.WEEKLY_PROFILE_PERCENT) == 7
|
||||||
assert sum(world.WEEKLY_PROFILE_PERCENT) == 700
|
assert sum(world.WEEKLY_PROFILE_PERCENT) == 700
|
||||||
|
|||||||
Reference in New Issue
Block a user