EAScheduler 0.2.2__tar.gz → 0.2.4__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.
Files changed (65) hide show
  1. {eascheduler-0.2.2/src/EAScheduler.egg-info → eascheduler-0.2.4}/PKG-INFO +13 -5
  2. {eascheduler-0.2.2 → eascheduler-0.2.4}/requirements_setup.txt +3 -3
  3. {eascheduler-0.2.2 → eascheduler-0.2.4/src/EAScheduler.egg-info}/PKG-INFO +13 -5
  4. eascheduler-0.2.4/src/EAScheduler.egg-info/requires.txt +4 -0
  5. eascheduler-0.2.4/src/eascheduler/__version__.py +1 -0
  6. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/builder/filters.py +8 -1
  7. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/builder/helper.py +5 -3
  8. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/jobs/base.py +4 -1
  9. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/prod_sun.py +1 -1
  10. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/prod_time.py +3 -1
  11. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/schedulers/async_scheduler.py +1 -1
  12. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/task_managers/parallel.py +1 -1
  13. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/task_managers/sequential.py +1 -1
  14. eascheduler-0.2.2/src/EAScheduler.egg-info/requires.txt +0 -4
  15. eascheduler-0.2.2/src/eascheduler/__version__.py +0 -1
  16. {eascheduler-0.2.2 → eascheduler-0.2.4}/LICENSE +0 -0
  17. {eascheduler-0.2.2 → eascheduler-0.2.4}/MANIFEST.in +0 -0
  18. {eascheduler-0.2.2 → eascheduler-0.2.4}/setup.cfg +0 -0
  19. {eascheduler-0.2.2 → eascheduler-0.2.4}/setup.py +0 -0
  20. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/EAScheduler.egg-info/SOURCES.txt +0 -0
  21. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/EAScheduler.egg-info/dependency_links.txt +0 -0
  22. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/EAScheduler.egg-info/top_level.txt +0 -0
  23. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/__init__.py +0 -0
  24. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/builder/__init__.py +0 -0
  25. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/builder/jobs.py +0 -0
  26. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/builder/triggers.py +0 -0
  27. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/builder/utils.py +0 -0
  28. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/const.py +0 -0
  29. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/default.py +0 -0
  30. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/errors/__init__.py +0 -0
  31. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/errors/errors.py +0 -0
  32. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/errors/handler.py +0 -0
  33. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/executor/__init__.py +0 -0
  34. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/executor/base.py +0 -0
  35. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/helpers/__init__.py +0 -0
  36. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/helpers/dst_param.py +0 -0
  37. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/helpers/helpers.py +0 -0
  38. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/helpers/time_replace.py +0 -0
  39. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_control/__init__.py +0 -0
  40. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_control/base.py +0 -0
  41. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_control/job_countdown.py +0 -0
  42. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_control/job_datetime.py +0 -0
  43. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_control/job_onetime.py +0 -0
  44. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_stores/__init__.py +0 -0
  45. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_stores/base.py +0 -0
  46. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/job_stores/memory.py +0 -0
  47. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/jobs/__init__.py +0 -0
  48. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/jobs/event_handler.py +0 -0
  49. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/jobs/job_countdown.py +0 -0
  50. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/jobs/job_datetime.py +0 -0
  51. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/jobs/job_onetime.py +0 -0
  52. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/__init__.py +0 -0
  53. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/base.py +0 -0
  54. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/prod_filter.py +0 -0
  55. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/prod_filter_holiday.py +0 -0
  56. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/prod_group.py +0 -0
  57. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/prod_interval.py +0 -0
  58. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/producers/prod_operation.py +0 -0
  59. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/py.typed +0 -0
  60. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/schedulers/__init__.py +0 -0
  61. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/schedulers/base.py +0 -0
  62. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/task_managers/__init__.py +0 -0
  63. {eascheduler-0.2.2 → eascheduler-0.2.4}/src/eascheduler/task_managers/base.py +0 -0
  64. {eascheduler-0.2.2 → eascheduler-0.2.4}/tests/test_const.py +0 -0
  65. {eascheduler-0.2.2 → eascheduler-0.2.4}/tests/test_default.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: EAScheduler
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Easy async scheduling with a nice interface
5
5
  Home-page: https://github.com/spacemanspiff2007/eascheduler
6
6
  Author: spaceman_spiff
@@ -19,16 +19,17 @@ Classifier: Programming Language :: Python :: 3 :: Only
19
19
  Requires-Python: >=3.10
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: whenever==0.6.16
22
+ Requires-Dist: whenever==0.7.3
23
23
  Requires-Dist: astral==3.2
24
- Requires-Dist: holidays==0.64
25
- Requires-Dist: typing_extensions==4.12.2
24
+ Requires-Dist: holidays==0.70
25
+ Requires-Dist: typing_extensions
26
26
  Dynamic: author
27
27
  Dynamic: classifier
28
28
  Dynamic: description
29
29
  Dynamic: description-content-type
30
30
  Dynamic: home-page
31
31
  Dynamic: keywords
32
+ Dynamic: license-file
32
33
  Dynamic: project-url
33
34
  Dynamic: requires-dist
34
35
  Dynamic: requires-python
@@ -136,6 +137,13 @@ scheduler.at(
136
137
  ````
137
138
 
138
139
  ## Changelog
140
+ #### 0.2.4 (2025-04-16)
141
+ - Instand for execution can be specified directly as `Instant`
142
+ - Updated dependencies
143
+
144
+ #### 0.2.3 (2025-03-26)
145
+ - Updated dependencies
146
+
139
147
  #### 0.2.2 (2025-01-07)
140
148
  - Ensured that all trigger builders are imputable and can be composed without side effects
141
149
  - Updated dependencies
@@ -1,6 +1,6 @@
1
1
  # Requirements to install and use this library
2
- whenever == 0.6.16
2
+ whenever == 0.7.3
3
3
  astral == 3.2
4
- holidays == 0.64
4
+ holidays == 0.70
5
5
 
6
- typing_extensions == 4.12.2
6
+ typing_extensions
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: EAScheduler
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Easy async scheduling with a nice interface
5
5
  Home-page: https://github.com/spacemanspiff2007/eascheduler
6
6
  Author: spaceman_spiff
@@ -19,16 +19,17 @@ Classifier: Programming Language :: Python :: 3 :: Only
19
19
  Requires-Python: >=3.10
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: whenever==0.6.16
22
+ Requires-Dist: whenever==0.7.3
23
23
  Requires-Dist: astral==3.2
24
- Requires-Dist: holidays==0.64
25
- Requires-Dist: typing_extensions==4.12.2
24
+ Requires-Dist: holidays==0.70
25
+ Requires-Dist: typing_extensions
26
26
  Dynamic: author
27
27
  Dynamic: classifier
28
28
  Dynamic: description
29
29
  Dynamic: description-content-type
30
30
  Dynamic: home-page
31
31
  Dynamic: keywords
32
+ Dynamic: license-file
32
33
  Dynamic: project-url
33
34
  Dynamic: requires-dist
34
35
  Dynamic: requires-python
@@ -136,6 +137,13 @@ scheduler.at(
136
137
  ````
137
138
 
138
139
  ## Changelog
140
+ #### 0.2.4 (2025-04-16)
141
+ - Instand for execution can be specified directly as `Instant`
142
+ - Updated dependencies
143
+
144
+ #### 0.2.3 (2025-03-26)
145
+ - Updated dependencies
146
+
139
147
  #### 0.2.2 (2025-01-07)
140
148
  - Ensured that all trigger builders are imputable and can be composed without side effects
141
149
  - Updated dependencies
@@ -0,0 +1,4 @@
1
+ whenever==0.7.3
2
+ astral==3.2
3
+ holidays==0.70
4
+ typing_extensions
@@ -0,0 +1 @@
1
+ __version__ = '0.2.4'
@@ -58,8 +58,15 @@ class FilterBuilder:
58
58
  @staticmethod
59
59
  def time(lower: HINT_TIME | None = None, upper: HINT_TIME | None = None) -> FilterObject:
60
60
  """Restrict the trigger instant to a time range"""
61
+
62
+ if lower is None and upper is None:
63
+ msg = 'At least one of lower or upper must be provided'
64
+ raise ValueError(msg)
65
+
66
+ time_lower = get_time(lower) if lower is not None else None
67
+ time_upper = get_time(upper) if upper is not None else None
61
68
  return FilterObject(
62
- TimeProducerFilter(get_time(lower), get_time(upper))
69
+ TimeProducerFilter(time_lower, time_upper)
63
70
  )
64
71
 
65
72
  @staticmethod
@@ -16,7 +16,7 @@ from eascheduler.helpers import HINT_CLOCK_BACKWARD, HINT_CLOCK_FORWARD, TimeRep
16
16
  HINT_TIME: TypeAlias = dt_time | Time | str
17
17
  HINT_TIMEDELTA: TypeAlias = dt_timedelta | TimeDelta | int | float | str
18
18
  HINT_POS_TIMEDELTA: TypeAlias = HINT_TIMEDELTA
19
- HINT_INSTANT: TypeAlias = dt_datetime | None | str | HINT_TIME | HINT_TIMEDELTA | SystemDateTime
19
+ HINT_INSTANT: TypeAlias = dt_datetime | None | str | HINT_TIME | HINT_TIMEDELTA | SystemDateTime | Instant
20
20
  HINT_NAME_OR_NR: TypeAlias = int | str | Iterable[int | str]
21
21
  HINT_DATE: TypeAlias = dt_date | dt_datetime | str | None | Date | SystemDateTime | Instant
22
22
 
@@ -98,11 +98,13 @@ def get_instant(value: HINT_INSTANT) -> Instant:
98
98
  value.second, nanosecond=value.microsecond * 1_000).instant()
99
99
  case SystemDateTime():
100
100
  return value.instant()
101
+ case Instant():
102
+ return value
101
103
 
102
104
  # ------------------------------------------------------------------------------------------------------------------
103
105
  # timedelta
104
106
  try:
105
- timedelta = get_timedelta(value)
107
+ timedelta = get_timedelta(value) # type: ignore[arg-type]
106
108
  except (ValueError, TypeError):
107
109
  pass
108
110
  else:
@@ -111,7 +113,7 @@ def get_instant(value: HINT_INSTANT) -> Instant:
111
113
  # ------------------------------------------------------------------------------------------------------------------
112
114
  # time
113
115
  try:
114
- time = get_time(value)
116
+ time = get_time(value) # type: ignore[arg-type]
115
117
  except (ValueError, TypeError):
116
118
  pass
117
119
  else:
@@ -116,7 +116,10 @@ class JobBase(Generic[IdType]):
116
116
  self.update_next()
117
117
  return self.status
118
118
 
119
- def __lt__(self, other_job: object) -> bool:
119
+ def __lt__(self, other_job: JobBase) -> bool:
120
+ if not isinstance(other_job, JobBase):
121
+ return NotImplemented
122
+
120
123
  if (other := other_job.next_run) is None:
121
124
  return True
122
125
  if (this := self.next_run) is None:
@@ -55,7 +55,7 @@ def set_location(latitude: float | str, longitude: float | str, elevation: float
55
55
  OBSERVER = Observer(latitude, longitude, elevation)
56
56
 
57
57
 
58
- SUN_CACHE: Final = OrderedDict()
58
+ SUN_CACHE: Final[OrderedDict[tuple[Hashable, ...], Instant]] = OrderedDict()
59
59
 
60
60
 
61
61
  class SunProducer(DateTimeProducerBase):
@@ -9,7 +9,7 @@ from eascheduler.producers.base import DateTimeProducerBase, not_infinite_loop
9
9
 
10
10
 
11
11
  if TYPE_CHECKING:
12
- from whenever import Instant
12
+ from whenever import Instant, SystemDateTime
13
13
 
14
14
 
15
15
  class TimeProducer(DateTimeProducerBase):
@@ -27,6 +27,8 @@ class TimeProducer(DateTimeProducerBase):
27
27
  @override
28
28
  def get_next(self, dt: Instant) -> Instant: # type: ignore[return]
29
29
 
30
+ local_dts: tuple[SystemDateTime, ...]
31
+
30
32
  date = dt.to_system_tz().date()
31
33
  for _ in not_infinite_loop(): # noqa: RET503
32
34
  try:
@@ -19,7 +19,7 @@ if TYPE_CHECKING:
19
19
 
20
20
 
21
21
  class AsyncScheduler(SchedulerBase):
22
- __slots__ = ('_loop', 'timer', 'jobs', '_enabled')
22
+ __slots__ = ('_enabled', '_loop', 'jobs', 'timer')
23
23
 
24
24
  def __init__(self, event_loop: asyncio.AbstractEventLoop | None = None, *, enabled: bool = True) -> None:
25
25
  self._loop: Final = event_loop if event_loop is not None else asyncio.get_running_loop()
@@ -48,7 +48,7 @@ class ParallelTaskManager(TaskManagerBase):
48
48
 
49
49
 
50
50
  class LimitingParallelTaskManager(TaskManagerBase):
51
- __slots__ = ('tasks', 'parallel', 'action')
51
+ __slots__ = ('action', 'parallel', 'tasks')
52
52
 
53
53
  def __init__(self, parallel: int, action: HINT_PARALLEL_TASK_POLICY = POLICY_SKIP) -> None:
54
54
  """
@@ -79,7 +79,7 @@ class SequentialTaskManager(SequentialTaskManagerBase):
79
79
 
80
80
 
81
81
  class LimitingSequentialTaskManager(SequentialTaskManager):
82
- __slots__ = ('max_queue', 'action')
82
+ __slots__ = ('action', 'max_queue')
83
83
 
84
84
  def __init__(self, max_queue: int, action: HINT_SEQUENTIAL_TASK_POLICY = POLICY_SKIP) -> None:
85
85
  """
@@ -1,4 +0,0 @@
1
- whenever==0.6.16
2
- astral==3.2
3
- holidays==0.64
4
- typing_extensions==4.12.2
@@ -1 +0,0 @@
1
- __version__ = '0.2.2'
File without changes
File without changes
File without changes
File without changes