diff --git a/generator/src/clickstream_generator/world.py b/generator/src/clickstream_generator/world.py index 3f99b83..e25e6e8 100644 --- a/generator/src/clickstream_generator/world.py +++ b/generator/src/clickstream_generator/world.py @@ -16,17 +16,14 @@ from datetime import date # Счётчик стенда: сайт один, номер — константа мира. COUNTER_ID = 42150607 -# Часовой пояс счётчика — Самара, UTC+4 — записан двумя способами, потому что -# стороны просят разное. Генератору нужны минуты: в этом поясе считаются -# модельные сутки, как в выгрузке Метрики — `EventDate` дата в поясе счётчика, -# `UTCEventTime` абсолютная метка. Отсюда следствие, о котором сторона -# хранилища должна знать заранее: `toDate(UTCEventTime)` ≠ `EventDate` у ночных -# событий (спека генератора, раздел 9). Хранилищу тот же пояс нужен именем из -# базы поясов — так пишутся `toDate` и типы колонок DDS -# (docs/architecture/storage.md, «Часовые пояса»). Пути отсюда в SQL нет, имя -# переносят руками — но берут его здесь. -COUNTER_TIMEZONE = "Europe/Samara" -COUNTER_TIMEZONE_MINUTES = 240 +# Часовой пояс счётчика, минуты от UTC. Модельные сутки считаются в этом поясе, +# как в выгрузке Метрики: `EventDate` — дата в поясе счётчика, `UTCEventTime` — +# абсолютная метка. Отсюда следствие, о котором сторона хранилища должна знать +# заранее: `toDate(UTCEventTime)` ≠ `EventDate` у ночных событий (спека +# генератора, раздел 9). Рядом имя того же пояса: числа ClickHouse в этом месте +# не принимает, витрины пишутся именем (docs/architecture/storage.md, «Часовые +# пояса»). +COUNTER_TIMEZONE_MINUTES = 240 # Europe/Samara # D0 — первый день оси модельного времени, понедельник. Реальный календарь в # модели не участвует: дата нужна лишь затем, чтобы дни оси легли в diff --git a/generator/tests/test_world.py b/generator/tests/test_world.py index 57da1fe..872b16f 100644 --- a/generator/tests/test_world.py +++ b/generator/tests/test_world.py @@ -6,9 +6,6 @@ «в среднем 3–4 возврата» и «средняя кука активна ≈1,9 дня». """ -from datetime import datetime, time, timedelta -from zoneinfo import ZoneInfo - from clickstream_generator import catalog, world @@ -30,13 +27,6 @@ def test_origin_is_a_monday(): 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(): assert len(world.WEEKLY_PROFILE_PERCENT) == 7 assert sum(world.WEEKLY_PROFILE_PERCENT) == 700