feat(typing): Make monitor_config a TypedDict#2931
Conversation
| if seconds >= divider: | ||
| interval = int(seconds / divider) | ||
| return (interval, unit) | ||
| return (interval, cast("MonitorConfigScheduleUnit", unit)) |
There was a problem hiding this comment.
mypy is not smart enough to realize that unit comes from TIME_UNITS which is an immutable tuple of tuples where the first element is a subset of MonitorConfigScheduleUnit. Trying to add a type comment to line 437 to tell mypy the precise type of TIME_UNITS doesn't work either. So we cast.
There was a problem hiding this comment.
@szokeasaurusrex Do you think this cast is okay like this (aliased to lambda _, x: x at runtime) or should the cast itself be hidden behind TYPE_CHECKING here?
There was a problem hiding this comment.
cast probably needs to be behind TYPE_CHECKING to maintain compatibility with Python 2.x.
There was a problem hiding this comment.
Nvm, looks like you handled the compatibility concern by importing as lambda _, x: x when the import fails. Although, worth noting, that I think this lambda only gets activated on Python 2.x. In runtime on Python 3.5+, we still call cast from typing, but that is fine because it is a no-op that returns the second argument at runtime.
| "day", | ||
| "hour", | ||
| "minute", | ||
| "second", # not supported in Sentry and will result in a warning |
There was a problem hiding this comment.
Second-level precision can still be provided by the user so this needs to be part of the type
Better type hinting for monitor configs.
Closes #2930
General Notes
Thank you for contributing to
sentry-python!Please add tests to validate your changes, and lint your code using
tox -e linters.Running the test suite on your PR might require maintainer approval. Some tests (AWS Lambda) additionally require a maintainer to add a special label to run and will fail if the label is not present.
For maintainers
Sensitive test suites require maintainer review to ensure that tests do not compromise our secrets. This review must be repeated after any code revisions.
Before running sensitive test suites, please carefully check the PR. Then, apply the
Trigger: tests using secretslabel. The label will be removed after any code changes to enforce our policy requiring maintainers to review all code revisions before running sensitive tests.