Repository :
http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
---------------------------------------------------------------
commit 1b3b686455be06f25c7359e8a0b982bb40c3d33d
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Sun Nov 25 22:49:28 2012 +0100
Work on the cron job
Change the retrieve_meeting_to_remind function to cover a time-range instead a given
specific time. This is useful now that we consider more than just the full hour.
Fix the unit-tests accordingly.
---------------------------------------------------------------
fedocal/fedocallib/__init__.py | 16 +++++++++-------
fedocal/fedocallib/model.py | 9 +++++----
fedocal/tests/test_fedocallib.py | 4 ++--
fedocal/tests/test_meeting.py | 11 +++++++----
4 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index 3aa5f55..16f197f 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -495,31 +495,33 @@ def _generate_date_rounded_to_the_hour(meetingdate, offset):
"""
delta = timedelta(hours=offset)
new_date = meetingdate + delta
- new_date = new_date - timedelta(minutes=new_date.minute,
- seconds=new_date.second,
+ new_date = new_date - timedelta(seconds=new_date.second,
microseconds=new_date.microsecond)
return new_date
-def retrieve_meeting_to_remind(session):
+def retrieve_meeting_to_remind(session, offset=30):
""" Retrieve all the meetings for which we have to send a reminder.
:arg session: the database session to use.
+ :kwarg offset: the frequency at which the cron job is ran in order
+ to avoid sending twice the same reminder.
"""
today = datetime.utcnow()
# Retrieve meeting planned in less than 12h
new_date = _generate_date_rounded_to_the_hour(today, 12)
+ end_date = new_date + timedelta(minutes=offset)
meetings = Meeting.get_meeting_with_reminder(session,
- new_date.date(), new_date.time(), 'H-12')
+ new_date.date(), new_date.time(), end_date.time(), 'H-12')
new_date = _generate_date_rounded_to_the_hour(today, 24)
meetings.extend(Meeting.get_meeting_with_reminder(session,
- new_date.date(), new_date.time(), 'H-24'))
+ new_date.date(), new_date.time(), end_date.time(), 'H-24'))
new_date = _generate_date_rounded_to_the_hour(today, 48)
meetings.extend(Meeting.get_meeting_with_reminder(session,
- new_date.date(), new_date.time(), 'H-48'))
+ new_date.date(), new_date.time(), end_date.time(), 'H-48'))
new_date = _generate_date_rounded_to_the_hour(today, 168)
meetings.extend(Meeting.get_meeting_with_reminder(session,
- new_date.date(), new_date.time(), 'H-168'))
+ new_date.date(), new_date.time(), end_date.time(), 'H-168'))
return meetings
diff --git a/fedocal/fedocallib/model.py b/fedocal/fedocallib/model.py
index 4ee0b4a..12f3e9c 100644
--- a/fedocal/fedocallib/model.py
+++ b/fedocal/fedocallib/model.py
@@ -305,13 +305,13 @@ class Meeting(BASE):
def get_by_time(cls, session, calendar, meetingdate, start_time,
stop_time):
""" Retrieve the list of meetings for a given date and between
- two times.
+ two times for a specific calendar.
"""
return session.query(cls).filter(and_
(Meeting.calendar == calendar),
(Meeting.meeting_date == meetingdate),
(Meeting.meeting_time_start >= start_time),
- (Meeting.meeting_time_stop <= stop_time)).all()
+ (Meeting.meeting_time_stop < stop_time)).all()
@classmethod
def at_time(cls, session, calendar, meetingdate, t_time):
@@ -363,7 +363,7 @@ class Meeting(BASE):
@classmethod
def get_meeting_with_reminder(cls, session, start_date,
- start_time, offset):
+ start_time, stop_time, offset):
""" Retrieve the list of meetings with a reminder set in
<offset> hours for the given day and at the specified hour.
"""
@@ -374,7 +374,8 @@ class Meeting(BASE):
return []
return session.query(cls).filter(and_
(Meeting.meeting_date == start_date),
- (Meeting.meeting_time_start == start_time),
+ (Meeting.meeting_time_start >= start_time),
+ (Meeting.meeting_time_start < stop_time),
(Meeting.reminder_id.in_(reminders))).all()
diff --git a/fedocal/tests/test_fedocallib.py b/fedocal/tests/test_fedocallib.py
index e70af93..0dc3bff 100644
--- a/fedocal/tests/test_fedocallib.py
+++ b/fedocal/tests/test_fedocallib.py
@@ -470,8 +470,8 @@ class Fedocallibtests(Modeltests):
meeting_manager='pingou',
meeting_date=time_start.date(),
meeting_date_end=time_start.date(),
- meeting_time_start=time(time_start.hour, 00),
- meeting_time_stop=time(time_end.hour, 00),
+ meeting_time_start=time_start.time(),
+ meeting_time_stop=time_end.time(),
meeting_information='This is a test meeting with reminder',
calendar_name='test_calendar',
reminder_id=remobj.reminder_id)
diff --git a/fedocal/tests/test_meeting.py b/fedocal/tests/test_meeting.py
index f3ee5ec..52763b9 100644
--- a/fedocal/tests/test_meeting.py
+++ b/fedocal/tests/test_meeting.py
@@ -544,7 +544,8 @@ class Meetingtests(Modeltests):
""" Test the Meeting get_meeting_with_reminder function.
"""
self.test_init_meeting()
meetings = model.Meeting.get_meeting_with_reminder(self.session,
- TODAY + timedelta(days=11), time(11, 00), 'H-12')
+ TODAY + timedelta(days=11), time(11, 00), time(11, 30),
+ 'H-12')
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 1)
self.assertEqual(meetings[0].meeting_name,
@@ -557,19 +558,21 @@ class Meetingtests(Modeltests):
"""
self.test_init_meeting()
meetings = model.Meeting.get_meeting_with_reminder(self.session,
- TODAY + timedelta(days=11), time(11, 00), 'H-96')
+ TODAY + timedelta(days=11), time(11, 00), time(11, 30),
+ 'H-96')
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 0)
self.assertEqual(meetings, [])
meetings = model.Meeting.get_meeting_with_reminder(self.session,
- TODAY + timedelta(days=11), time(9, 00), 'H-12')
+ TODAY + timedelta(days=11), time(9, 00), time(9, 30), 'H-12')
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 0)
self.assertEqual(meetings, [])
meetings = model.Meeting.get_meeting_with_reminder(self.session,
- TODAY + timedelta(days=100), time(11, 00), 'H-12')
+ TODAY + timedelta(days=100), time(11, 00), time(11, 30),
+ 'H-12')
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 0)
self.assertEqual(meetings, [])