Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
pylibs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
domotika
pylibs
Commits
7fb41afc
Commit
7fb41afc
authored
Jul 19, 2020
by
root
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Python3
parent
ad97104d
Changes
8
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1327 additions
and
90 deletions
+1327
-90
cron.py
TxScheduling/txscheduling/cron.py
+3
-3
cron.py.bak
TxScheduling/txscheduling/cron.py.bak
+544
-0
task.py
TxScheduling/txscheduling/task.py
+3
-3
task.py.bak
TxScheduling/txscheduling/task.py.bak
+130
-0
cron.py
TxScheduling/txscheduling/tests/cron.py
+47
-47
cron.py.bak
TxScheduling/txscheduling/tests/cron.py.bak
+243
-0
task.py
TxScheduling/txscheduling/tests/task.py
+37
-37
task.py.bak
TxScheduling/txscheduling/tests/task.py.bak
+320
-0
No files found.
TxScheduling/txscheduling/cron.py
View file @
7fb41afc
...
...
@@ -295,7 +295,7 @@ def parseCronLine(line):
if
not
line
:
raise
InvalidCronLine
(
'Empty cron line provided'
)
if
not
isinstance
(
line
,
basestring
):
if
not
isinstance
(
line
,
str
):
raise
InvalidCronLine
(
'Cron line must be a string'
)
line
=
re
.
split
(
'
\
s+'
,
line
.
strip
())
...
...
@@ -449,7 +449,7 @@ def parseCronEntry(entry,min,max):
if
not
entry
:
raise
InvalidCronEntry
(
'Empty cron entry'
)
if
not
isinstance
(
entry
,
basestring
):
if
not
isinstance
(
entry
,
str
):
raise
InvalidCronEntry
(
'Cron entry must be a string'
)
try
:
...
...
@@ -523,7 +523,7 @@ def parseCronEntry(entry,min,max):
if
begin
==
end
and
begin
%
step
!=
0
:
raise
InvalidCronEntry
(
'Invalid range or step specified:
%
s'
%
(
e
))
total
.
update
(
range
(
begin
,
end
,
step
))
total
.
update
(
list
(
range
(
begin
,
end
,
step
)
))
elif
not
begin
is
None
:
raise
InvalidCronEntry
(
'Invalid range or step specified:
%
s'
%
(
e
))
...
...
TxScheduling/txscheduling/cron.py.bak
0 → 100644
View file @
7fb41afc
This diff is collapsed.
Click to expand it.
TxScheduling/txscheduling/task.py
View file @
7fb41afc
...
...
@@ -65,7 +65,7 @@ class ScheduledCall(object):
self
.
_reschedule
()
return
self
.
deferred
except
Exception
,
e
:
except
Exception
as
e
:
log
.
error
(
'Exception while starting
%
r:
%
s'
%
(
self
,
str
(
e
),))
self
.
running
=
False
self
.
deferred
=
None
...
...
@@ -119,9 +119,9 @@ class ScheduledCall(object):
def
__repr__
(
self
):
if
hasattr
(
self
.
f
,
'func_name'
):
func
=
self
.
f
.
func_name
func
=
self
.
f
.
__name__
if
hasattr
(
self
.
f
,
'im_class'
):
func
=
self
.
f
.
im_class
.
__name__
+
'.'
+
func
func
=
self
.
f
.
__self__
.
__class__
.
__name__
+
'.'
+
func
else
:
func
=
reflect
.
safe_repr
(
self
.
f
)
...
...
TxScheduling/txscheduling/task.py.bak
0 → 100644
View file @
7fb41afc
from logging import getLogger
from twisted.python import reflect
from twisted.internet import defer
from txscheduling.interfaces import ISchedule
log = getLogger('twisted.schedule.task')
class ScheduledCall(object):
"""Call a function repeatedly.
If C{f} returns a deferred, rescheduling will not take place until the
deferred has fired. The result value is ignored.
@ivar f: The function to call.
@ivar a: A tuple of arguments to pass the function.
@ivar kw: A dictionary of keyword arguments to pass to the function.
@ivar clock: A provider of
L{twisted.internet.interfaces.IReactorTime}. The default is
L{twisted.internet.reactor}. Feel free to set this to
something else, but it probably ought to be set *before*
calling L{start}.
@type _lastTime: C{float}
@ivar _lastTime: The time at which this instance most recently scheduled
itself to run.
"""
def __init__(self, f, *a, **kw):
self.call = None
self.running = False
self.scheduled = None
self._lastTime = 0.0
self.starttime = None
self.f = f
self.a = a
self.kw = kw
from twisted.internet import reactor
self.clock = reactor
def start(self, schedule):
"""Start running function based on the provided schedule.
@param schedule: An object that provides or can be adapted to an
ISchedule interface.
@return: A Deferred whose callback will be invoked with
C{self} when C{self.stop} is called, or whose errback will be
invoked when the function raises an exception or returned a
deferred that has its errback invoked.
"""
assert not self.running, ("Tried to start an already running "
"ScheduledCall.")
self.schedule = ISchedule(schedule)
try:
self.running = True
self.deferred = defer.Deferred()
self.starttime = self.clock.seconds()
self._lastTime = None
self._reschedule()
return self.deferred
except Exception, e:
log.error('Exception while starting %r: %s' % (self, str(e),))
self.running = False
self.deferred = None
if self.call is not None:
try:
self.call.cancel()
except:
pass
raise e
finally:
log.debug('%r.start(%r) started' % (self, schedule))
def stop(self):
""" Stop running function. """
assert self.running, ("Tried to stop a ScheduledCall that was "
"not running.")
self.running = False
if self.call is not None:
self.call.cancel()
self.call = None
d, self.deferred = self.deferred, None
d.callback(self)
def __call__(self):
def cb(result):
if self.running:
self._reschedule()
else:
d, self.deferred = self.deferred, None
d.callback(self)
def eb(failure):
self.running = False
d, self.deferred = self.deferred, None
d.errback(failure)
self.call = None
d = defer.maybeDeferred(self.f, *self.a, **self.kw)
d.addCallback(cb)
d.addErrback(eb)
def _reschedule(self):
""" Schedule the next iteration of this scheduled call. """
if self.call is None:
delay = self.schedule.getDelayForNext()
self._lastTime = self.clock.seconds() + delay
self.call = self.clock.callLater(delay, self)
def __repr__(self):
if hasattr(self.f, 'func_name'):
func = self.f.func_name
if hasattr(self.f, 'im_class'):
func = self.f.im_class.__name__ + '.' + func
else:
func = reflect.safe_repr(self.f)
return 'ScheduledCall<%s>(%s, *%s, **%s)' % (
self.schedule, func, reflect.safe_repr(self.a),
reflect.safe_repr(self.kw))
\ No newline at end of file
TxScheduling/txscheduling/tests/cron.py
View file @
7fb41afc
This diff is collapsed.
Click to expand it.
TxScheduling/txscheduling/tests/cron.py.bak
0 → 100644
View file @
7fb41afc
This diff is collapsed.
Click to expand it.
TxScheduling/txscheduling/tests/task.py
View file @
7fb41afc
...
...
@@ -92,8 +92,8 @@ class CallableTests(TestCase):
self
.
sc
=
TestableScheduledCall
(
self
.
clock
,
f
)
def
errback
(
fail
):
self
.
assert
_
(
fail
.
check
(
TestException
),
u
'Expecting a TestException failure'
)
self
.
assert
True
(
fail
.
check
(
TestException
),
'Expecting a TestException failure'
)
def
callback
(
result
):
self
.
fail
(
'Callback should not be called'
)
...
...
@@ -110,8 +110,8 @@ class CallableTests(TestCase):
self
.
sc
=
TestableScheduledCall
(
self
.
clock
,
f
)
def
errback
(
fail
):
self
.
assert
_
(
fail
.
check
(
TypeError
),
u
'Expecting a TypeError failure'
)
self
.
assert
True
(
fail
.
check
(
TypeError
),
'Expecting a TypeError failure'
)
def
callback
(
result
):
self
.
fail
(
'Callback should not be called'
)
...
...
@@ -179,36 +179,36 @@ class SimpleTimingTests(TestCase):
""" No calls before scheduled delay """
self
.
sc
.
start
(
SimpleSchedule
(
1
))
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called before time has passed'
)
'Callable should not be called before time has passed'
)
self
.
clock
.
pump
([
0.9
])
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called before sufficient time '
'Callable should not be called before sufficient time '
'has passed'
)
self
.
sc
.
stop
()
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
self
.
clock
.
pump
([
0.1
]
*
50
)
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
def
test_calls
(
self
):
""" Verify calls at proper times """
self
.
sc
.
start
(
SimpleSchedule
(
1
))
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called before time has passed'
)
'Callable should not be called before time has passed'
)
self
.
clock
.
pump
([
0.1
]
*
11
)
self
.
assertEqual
(
self
.
callable
.
count
,
1
,
u
'Callable should be called once now'
)
'Callable should be called once now'
)
self
.
clock
.
pump
([
0.1
]
*
10
)
self
.
assertEqual
(
self
.
callable
.
count
,
2
,
u
'Callable should be called twice now'
)
'Callable should be called twice now'
)
self
.
sc
.
stop
()
self
.
assertEqual
(
self
.
callable
.
count
,
2
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
self
.
clock
.
pump
([
0.1
]
*
50
)
self
.
assertEqual
(
self
.
callable
.
count
,
2
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
class
LongRunningTimingTests
(
TestCase
):
...
...
@@ -227,86 +227,86 @@ class LongRunningTimingTests(TestCase):
""" No calls before scheduled delay on long running task """
self
.
sc
.
start
(
SimpleSchedule
(
1
))
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called before time has passed'
)
'Callable should not be called before time has passed'
)
self
.
assertEqual
(
self
.
started
.
count
,
0
,
u
'Callable should not be called before time has passed'
)
'Callable should not be called before time has passed'
)
self
.
clock
.
pump
([
0.9
])
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called before sufficient time '
'Callable should not be called before sufficient time '
'has passed'
)
self
.
assertEqual
(
self
.
started
.
count
,
0
,
u
'Callable should not be called before sufficient time '
'Callable should not be called before sufficient time '
'has passed'
)
self
.
sc
.
stop
()
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
self
.
assertEqual
(
self
.
started
.
count
,
0
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
self
.
clock
.
pump
([
0.1
]
*
50
)
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
self
.
assertEqual
(
self
.
started
.
count
,
0
,
u
'Callable should not be called after stopping'
)
'Callable should not be called after stopping'
)
def
test_calls
(
self
):
""" Verify calls at proper times on long running task """
self
.
sc
.
start
(
SimpleSchedule
(
2
))
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should not be called before time has passed'
)
'Callable should not be called before time has passed'
)
self
.
assertEqual
(
self
.
started
.
count
,
0
,
u
'Callable should not be called before time has passed'
)
'Callable should not be called before time has passed'
)
# Time will be approx. 2.1
self
.
clock
.
pump
([
0.1
]
*
21
)
self
.
assertEqual
(
self
.
callable
.
count
,
0
,
u
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
assertEqual
(
self
.
started
.
count
,
1
,
u
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
# Time will be approx. 3.2
self
.
clock
.
pump
([
0.1
]
*
11
)
self
.
assertEqual
(
self
.
callable
.
count
,
1
,
u
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
assertEqual
(
self
.
started
.
count
,
1
,
u
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
# Time will be approx. 3.9
self
.
clock
.
pump
([
0.1
]
*
7
)
self
.
assertEqual
(
self
.
callable
.
count
,
1
,
u
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
assertEqual
(
self
.
started
.
count
,
1
,
u
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be called once now:
%
f'
%
(
self
.
clock
.
rightNow
,))
# Time will be approx 5.2
self
.
clock
.
pump
([
0.1
]
*
13
)
self
.
assertEqual
(
self
.
callable
.
count
,
1
,
u
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
assertEqual
(
self
.
started
.
count
,
2
,
u
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be running now:
%
f'
%
(
self
.
clock
.
rightNow
,))
# Time will be approx. 6.4
self
.
clock
.
pump
([
0.1
]
*
12
)
self
.
assertEqual
(
self
.
callable
.
count
,
2
,
u
'Callable should be called twice now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be called twice now:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
assertEqual
(
self
.
started
.
count
,
2
,
u
'Callable should be called twice now:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should be called twice now:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
sc
.
stop
()
self
.
assertEqual
(
self
.
callable
.
count
,
2
,
u
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
assertEqual
(
self
.
started
.
count
,
2
,
u
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
clock
.
pump
([
0.1
]
*
50
)
self
.
assertEqual
(
self
.
callable
.
count
,
2
,
u
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
self
.
assertEqual
(
self
.
started
.
count
,
2
,
u
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
'Callable should not be called after stopping:
%
f'
%
(
self
.
clock
.
rightNow
,))
def
test_suite
():
suite
=
unittest
.
TestSuite
()
...
...
TxScheduling/txscheduling/tests/task.py.bak
0 → 100644
View file @
7fb41afc
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment