none-shall-parse 0.5.0__tar.gz → 0.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: none-shall-parse
3
- Version: 0.5.0
3
+ Version: 0.6.1
4
4
  Summary: Trinity Shared Python utilities.
5
5
  Author: Andries Niemandt, Jan Badenhorst
6
6
  Author-email: Andries Niemandt <andries.niemandt@trintel.co.za>, Jan Badenhorst <jan@trintel.co.za>
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "none-shall-parse"
7
- version = "0.5.0"
7
+ version = "0.6.1"
8
8
  description = "Trinity Shared Python utilities."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -3,7 +3,7 @@ import logging
3
3
  import time
4
4
  from datetime import date, datetime
5
5
  from typing import Callable, Any, Tuple, Sequence, List
6
- from .types import DateTimeLike
6
+ from .types import DateTimeLike, DateTimeOrDateLike
7
7
 
8
8
  import pendulum
9
9
  from pendulum import DateTime, Date
@@ -417,7 +417,7 @@ def month_span(mso: int) -> Callable[[DateTimeLike], Tuple[DateTime, DateTime]]:
417
417
  return find_dates
418
418
 
419
419
 
420
- def arb_span(dates: Sequence[str | DateTimeLike], naive: bool = False) -> Callable[
420
+ def arb_span(dates: Sequence[str | DateTimeOrDateLike], naive: bool = False) -> Callable[
421
421
  [Any], Tuple[DateTime, DateTime]]:
422
422
  """
423
423
  Parses two given dates and returns a callable function that provides the date range
@@ -452,15 +452,20 @@ def arb_span(dates: Sequence[str | DateTimeLike], naive: bool = False) -> Callab
452
452
 
453
453
  parsed_dates.append(parsed.start_of('day'))
454
454
  else:
455
- # It's already a datetime
456
- if date.tzinfo is None:
457
- # Input is naive, keep it naive using pendulum.naive()
458
- parsed = pendulum.naive(date.year, date.month, date.day,
459
- date.hour, date.minute, date.second,
460
- date.microsecond)
455
+ # It's already a datetime-like object
456
+ if isinstance(date, datetime):
457
+ # datetime objects have tzinfo, hour, minute, etc.
458
+ if date.tzinfo is None:
459
+ # Input is naive, keep it naive using pendulum.naive()
460
+ parsed = pendulum.naive(date.year, date.month, date.day,
461
+ date.hour, date.minute, date.second,
462
+ date.microsecond)
463
+ else:
464
+ # Input is timezone-aware, preserve it
465
+ parsed = pendulum.instance(date)
461
466
  else:
462
- # Input is timezone-aware, preserve it
463
- parsed = pendulum.instance(date)
467
+ # date objects (no time component, no tzinfo) - treat as naive
468
+ parsed = pendulum.naive(date.year, date.month, date.day)
464
469
 
465
470
  parsed_dates.append(parsed.start_of('day'))
466
471
 
@@ -29,20 +29,20 @@ def flatten(some_list: Iterable) -> Generator[Any, None, None]:
29
29
  def safe_list_get(lst: List[T], idx: int, default: T = None) -> T:
30
30
  """
31
31
  Retrieve an element from a list by its index or return a default value if the index
32
- is out of range. This function ensures no IndexError is raised during the retrieval
33
- process by providing a fallback value.
32
+ is out of range or the input is not subscriptable. This function ensures safe retrieval
33
+ by providing a fallback value when access fails.
34
34
 
35
- :param lst: The list from which the element is to be retrieved.
35
+ :param lst: The list from which the element is to be retrieved (may be None).
36
36
  :type lst: List[T]
37
37
  :param idx: The index of the element to retrieve from the list.
38
38
  :type idx: int
39
- :param default: The fallback value to be returned if the index is out of range.
39
+ :param default: The fallback value to be returned if retrieval fails.
40
40
  :type default: T
41
41
  :return: The element at the specified index, or the default value
42
- if the index is out of range.
42
+ if the index is out of range or lst is None/not subscriptable.
43
43
  :rtype: T
44
44
  """
45
45
  try:
46
46
  return lst[idx]
47
- except IndexError:
47
+ except (IndexError, TypeError):
48
48
  return default