Repository navigation
Conversation
| class AssignmentSource: | ||
| source_name: str | ||
| integration_id: int | ||
| queued: datetime = timezone.now() |
There was a problem hiding this comment.
🟠 Значение по умолчанию timezone.now() для поля queued вычисляется однократно при импорте модуля
В frozen-датаклассе AssignmentSource поле queued объявлено как queued: datetime = timezone.now(). В Python значения по умолчанию для полей dataclass вычисляются один раз — в момент определения класса (при импорте модуля), а не при создании каждого экземпляра. В результате все объекты, созданные через from_integration или from_dict без явного указания queued, получат один и тот же таймстамп — время первого импорта модуля. Следует использовать field(default_factory=timezone.now).
| @@ -1,32 +1,53 @@ | |||
| from typing import TYPE_CHECKING | |||
There was a problem hiding this comment.
🟡 Потеря типа datetime при round-trip to_dict()/from_dict() через Celery kwargs
Функция sync_group_assignee_outbound передаёт результат assignment_source.to_dict() (где queued имеет тип datetime) как assignment_source_dict в sync_assignee_outbound.apply_async(kwargs=...). При JSON-сериализации Celery datetime превращается в строку. Метод from_dict вызывает cls(**input_dict), сохраняя строку вместо datetime. Объявленный тип поля нарушается, что может привести к ошибкам при сравнении или форматировании даты downstream. Рекомендуется явно парсить строку обратно в datetime в from_dict.
| result = AssignmentSource.from_dict(data) | ||
| assert result is None | ||
|
|
||
| def test_from_dict_inalid_data(self): |
There was a problem hiding this comment.
🔵 Опечатка в имени теста: test_from_dict_inalid_data
Имя тестового метода содержит опечатку — inalid вместо invalid. Это снижает читаемость и обнаруживаемость теста при поиске.
| return False | ||
|
|
||
| def get_group_title(self, group, event, **kwargs): | ||
| outbound_assignee_key: ClassVar[str | None] = None |
There was a problem hiding this comment.
🔵 Базовый метод should_sync игнорирует параметр sync_source
Сигнатура IssueBasicIntegration.should_sync расширена параметром sync_source: AssignmentSource | None = None, но тело метода безусловно возвращает False, не используя новый аргумент. Это допустимо как no-op базовая реализация, но отсутствует docstring или комментарий, поясняющий, что логика предотвращения циклов реализована только в подклассах. Будущие читатели могут ошибочно предположить, что базовый класс выполняет проверку циклов. Рекомендуется добавить комментарий с описанием намерения.
🔍 Автоматическое ревью кодаКраткий итогСинтез ревью: 7 уникальных групп замечаний по 2 исходн. выполнениям; 4 для публикации (критических: 0, высоких: 1, средних: 1, низких: 2, мелких: 0). Замечания🟠 Важно
💡 Дополнительно
Автоматическое ревью от Review Engine v2.0 |
Benchmark fixture for sentry PR #77754.\n\nGolden comments:
benchmark/golden_comments/sentry.json— PR77754.