year_utils
¶
Year-related utility functions.
Pure functions without side effects for year processing. These utilities are used across the year retrieval subsystem.
resolve_non_negative_int
¶
Convert arbitrary value to non-negative int with fallback.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
Any
|
Value to convert (may be int, str, float, None, etc.) |
required |
default
|
int
|
Default value if conversion fails or result is negative |
required |
Returns:
| Type | Description |
|---|---|
int
|
Non-negative integer, or default if invalid |
Examples:
>>> resolve_non_negative_int(5, 0)
5
>>> resolve_non_negative_int("10", 0)
10
>>> resolve_non_negative_int(-3, 0)
0
>>> resolve_non_negative_int(None, 7)
7
Source code in src/core/tracks/year_utils.py
resolve_positive_int
¶
Convert arbitrary value to strictly positive int with fallback.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
Any
|
Value to convert |
required |
default
|
int
|
Default value if conversion fails or result is not positive |
required |
Returns:
| Type | Description |
|---|---|
int
|
Positive integer (> 0), or default if invalid |
Examples:
Source code in src/core/tracks/year_utils.py
resolve_non_negative_float
¶
Convert arbitrary value to non-negative float with fallback.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
Any
|
Value to convert |
required |
default
|
float
|
Default value if conversion fails or result is negative |
required |
Returns:
| Type | Description |
|---|---|
float
|
Non-negative float, or default if invalid |
Examples:
>>> resolve_non_negative_float(3.14, 0.0)
3.14
>>> resolve_non_negative_float("2.5", 0.0)
2.5
>>> resolve_non_negative_float(-1.0, 0.0)
0.0
Source code in src/core/tracks/year_utils.py
normalize_collaboration_artist
¶
Normalize collaboration artists to main artist.
For collaborations like "Main Artist & Other" or "Main Artist feat. Other", extract the main artist to group all tracks together.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
artist
|
str
|
Artist name potentially containing collaborations |
required |
Returns:
| Type | Description |
|---|---|
str
|
Main artist name for grouping |
Examples:
>>> normalize_collaboration_artist("Drake feat. Rihanna")
'Drake'
>>> normalize_collaboration_artist("Daft Punk & Pharrell")
'Daft Punk'
>>> normalize_collaboration_artist("Solo Artist")
'Solo Artist'