fix: replace getLevelName with IntEnum for log levels #506
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR refactors how log levels are handled in the taskiq CLI to avoid using behavior that Python's logging documentation explicitly considers incorrect.
Background
According to the Python logging documentation, using
getLevelName()
to convert string level names to integers (like "INFO" to 20) is explicitly "considered a mistake".Changes
This PR refactors the
LogLevel
enum to inherit fromIntEnum
instead ofstr
, storing the actual logging module constants (logging.INFO
,logging.WARNING
, etc.) as enum values. The enum members are now integers by nature, which can be passed directly to logging functions without any conversion.Modified files:
taskiq/cli/common_args.py
: ChangedLogLevel
toIntEnum
with logging constant valuestaskiq/cli/scheduler/args.py
: Added string to enum conversion in argument parsingtaskiq/cli/scheduler/run.py
: Updated to use log_level directly as integertaskiq/cli/worker/args.py
: Added string to enum conversion in argument parsingtaskiq/cli/worker/run.py
: Updated to use log_level directly as integerCompatibility
The CLI interface remains unchanged. Users can still pass log levels as strings:
The string is converted to the appropriate
LogLevel
enum member during argument parsing, and since the enum values are integers, they work directly with the logging module.Benefits
This approach uses the proper API as intended by Python's logging module. The solution is type safe, and maintains full backward compatibility with existing CLI usage.