EAScheduler 0.2.3__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.
- {eascheduler-0.2.3/src/EAScheduler.egg-info → eascheduler-0.2.4}/PKG-INFO +6 -2
- {eascheduler-0.2.3 → eascheduler-0.2.4}/requirements_setup.txt +1 -1
- {eascheduler-0.2.3 → eascheduler-0.2.4/src/EAScheduler.egg-info}/PKG-INFO +6 -2
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/EAScheduler.egg-info/requires.txt +1 -1
- eascheduler-0.2.4/src/eascheduler/__version__.py +1 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/builder/filters.py +8 -1
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/builder/helper.py +5 -3
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/jobs/base.py +4 -1
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/prod_sun.py +1 -1
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/prod_time.py +3 -1
- eascheduler-0.2.3/src/eascheduler/__version__.py +0 -1
- {eascheduler-0.2.3 → eascheduler-0.2.4}/LICENSE +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/MANIFEST.in +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/setup.cfg +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/setup.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/EAScheduler.egg-info/SOURCES.txt +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/EAScheduler.egg-info/dependency_links.txt +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/EAScheduler.egg-info/top_level.txt +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/builder/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/builder/jobs.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/builder/triggers.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/builder/utils.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/const.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/default.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/errors/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/errors/errors.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/errors/handler.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/executor/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/executor/base.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/helpers/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/helpers/dst_param.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/helpers/helpers.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/helpers/time_replace.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_control/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_control/base.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_control/job_countdown.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_control/job_datetime.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_control/job_onetime.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_stores/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_stores/base.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/job_stores/memory.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/jobs/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/jobs/event_handler.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/jobs/job_countdown.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/jobs/job_datetime.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/jobs/job_onetime.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/base.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/prod_filter.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/prod_filter_holiday.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/prod_group.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/prod_interval.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/producers/prod_operation.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/py.typed +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/schedulers/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/schedulers/async_scheduler.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/schedulers/base.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/task_managers/__init__.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/task_managers/base.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/task_managers/parallel.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/src/eascheduler/task_managers/sequential.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/tests/test_const.py +0 -0
- {eascheduler-0.2.3 → eascheduler-0.2.4}/tests/test_default.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: EAScheduler
|
|
3
|
-
Version: 0.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
|
|
@@ -21,7 +21,7 @@ Description-Content-Type: text/markdown
|
|
|
21
21
|
License-File: LICENSE
|
|
22
22
|
Requires-Dist: whenever==0.7.3
|
|
23
23
|
Requires-Dist: astral==3.2
|
|
24
|
-
Requires-Dist: holidays==0.
|
|
24
|
+
Requires-Dist: holidays==0.70
|
|
25
25
|
Requires-Dist: typing_extensions
|
|
26
26
|
Dynamic: author
|
|
27
27
|
Dynamic: classifier
|
|
@@ -137,6 +137,10 @@ scheduler.at(
|
|
|
137
137
|
````
|
|
138
138
|
|
|
139
139
|
## Changelog
|
|
140
|
+
#### 0.2.4 (2025-04-16)
|
|
141
|
+
- Instand for execution can be specified directly as `Instant`
|
|
142
|
+
- Updated dependencies
|
|
143
|
+
|
|
140
144
|
#### 0.2.3 (2025-03-26)
|
|
141
145
|
- Updated dependencies
|
|
142
146
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: EAScheduler
|
|
3
|
-
Version: 0.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
|
|
@@ -21,7 +21,7 @@ Description-Content-Type: text/markdown
|
|
|
21
21
|
License-File: LICENSE
|
|
22
22
|
Requires-Dist: whenever==0.7.3
|
|
23
23
|
Requires-Dist: astral==3.2
|
|
24
|
-
Requires-Dist: holidays==0.
|
|
24
|
+
Requires-Dist: holidays==0.70
|
|
25
25
|
Requires-Dist: typing_extensions
|
|
26
26
|
Dynamic: author
|
|
27
27
|
Dynamic: classifier
|
|
@@ -137,6 +137,10 @@ scheduler.at(
|
|
|
137
137
|
````
|
|
138
138
|
|
|
139
139
|
## Changelog
|
|
140
|
+
#### 0.2.4 (2025-04-16)
|
|
141
|
+
- Instand for execution can be specified directly as `Instant`
|
|
142
|
+
- Updated dependencies
|
|
143
|
+
|
|
140
144
|
#### 0.2.3 (2025-03-26)
|
|
141
145
|
- Updated dependencies
|
|
142
146
|
|
|
@@ -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(
|
|
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:
|
|
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:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '0.2.3'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|