[fedocal] master: Fix hopefully for the last time the checking if the agenda is free (ddabdd7)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit ddabdd75633c7aa9063b6fd01c95805d32578cea
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Mon Dec 3 20:36:01 2012 +0100
Fix hopefully for the last time the checking if the agenda is free
With this fix we finally completely check that there are no meetings
runnings in a given time period.
>---------------------------------------------------------------
fedocal/fedocallib/__init__.py | 21 +++++++++++++++++----
1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index f610f3a..4b78d61 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -454,10 +454,23 @@ def agenda_is_free(session, calendar, meeting_date,
time_start)
meetings.extend(Meeting.at_time(session, calendar, meeting_date,
time_stop))
- if not meetings:
- return True
- else:
- return False
+ meetings.extend(Meeting.get_by_time(session, calendar, meeting_date,
+ time_start, time_stop))
+ agenda_free = True
+ for meeting in set(meetings):
+ if time_start <= meeting.meeting_time_start \
+ and meeting.meeting_time_start < time_stop:
+ agenda_free = False
+ elif time_start < meeting.meeting_time_stop \
+ and meeting.meeting_time_stop <= time_stop:
+ agenda_free = False
+ elif time_start < meeting.meeting_time_start \
+ and time_stop > meeting.meeting_time_stop:
+ agenda_free = False
+ elif time_start > meeting.meeting_time_start \
+ and time_stop < meeting.meeting_time_stop:
+ agenda_free = False
+ return agenda_free
def is_user_managing_in_calendar(session, calendar_name, fas_user):
11 years, 4 months
[fedocal] master: Fix edition of single meeting in a recursion. (b1fa4e7)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit b1fa4e7a20a855460df12f97e9d7ff2c7d1e591e
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Mon Dec 3 19:48:35 2012 +0100
Fix edition of single meeting in a recursion.
When we only edit one meeting in the recursion, we normally continue
the recursion "delta" days later, but we need to make sure the new
meeting can exists with regards to the availability of the agenda.
>---------------------------------------------------------------
fedocal/fedocallib/__init__.py | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index d0bc7e8..f610f3a 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -729,16 +729,25 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
# -> update new object
# -> copy meeting to new object w/ recursion and date = date + offset
+ remove_recursion = False
if recursion_frequency and meeting.recursion_frequency:
old_meeting = Meeting.copy(meeting)
old_meeting.recursion_ends = meeting_date - timedelta(days=1)
if old_meeting.recursion_ends > old_meeting.meeting_date:
old_meeting.save(session)
if not edit_all_meeting:
+ remove_recursion = True
new_meeting = Meeting.copy(meeting)
new_meeting.meeting_date = meeting.meeting_date + timedelta(
days=meeting.recursion_frequency)
- new_meeting.save(session)
+ free_time = agenda_is_free(session, calendarobj,
+ new_meeting.meeting_date,
+ new_meeting.meeting_time_start,
+ new_meeting.meeting_time_stop)
+
+ if not bool(calendarobj.calendar_multiple_meetings) and \
+ bool(free_time):
+ new_meeting.save(session)
meeting_time_start = convert_time(
@@ -796,7 +805,7 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
meeting.reminder.delete(session)
meeting.reminder_id = None
- if not edit_all_meeting and meeting.recursion_frequency:
+ if remove_recursion:
meeting.recursion_frequency = None
meeting.recursion_ends = None
11 years, 4 months
[fedocal] master: Fix tests and coverage (94018da)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit 94018dac0ee1c8388339f26e1eb3c4ddd93900d8
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Mon Dec 3 19:08:24 2012 +0100
Fix tests and coverage
- Fix the test for the test_get_html_calendar
- Fix coverage of the edit_meeting function
This change implied adding a recursive meeting in the past which had
implication in a number of other tests, they have thus been adjusted
accordingly.
>---------------------------------------------------------------
fedocal/tests/test_fedocallib.py | 85 ++++++++++++++------------------------
fedocal/tests/test_flask.py | 4 +-
fedocal/tests/test_flask_api.py | 2 +-
fedocal/tests/test_meeting.py | 31 ++++++++++++--
fedocal/tests/test_week.py | 2 +-
5 files changed, 61 insertions(+), 63 deletions(-)
diff --git a/fedocal/tests/test_fedocallib.py b/fedocal/tests/test_fedocallib.py
index 6037c9b..8269626 100644
--- a/fedocal/tests/test_fedocallib.py
+++ b/fedocal/tests/test_fedocallib.py
@@ -33,6 +33,7 @@ import pkg_resources
import unittest
import sys
import os
+import re
from datetime import date
from datetime import time
@@ -49,26 +50,6 @@ from fedocallib import model
from fedocallib.exceptions import UserNotAllowed, InvalidMeeting
from tests import Modeltests, TODAY, FakeUser
-RESULT_CALENDAR_HTML = '<table class="month">\n'\
-'<tr><th colspan="7" class="month"> November 2012 </th></tr>\n'\
-'<tr><td class="noday"> </td><td class="noday"> </td><td '\
-'class="noday"> </td><td class="thu">1</td><td class="fri">2</td>'\
-'<td class="sat">3</td><td class="sun">4</td></tr>\n'\
-'<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7'\
-'</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10'\
-'</td><td class="sun">11</td></tr>\n'\
-'<tr><td class="mon">12</td><td class="tue">13</td><td class="wed">14'\
-'</td><td class="thu">15</td><td class="fri">16</td><td class="sat">17'\
-'</td><td class="sun">18</td></tr>\n'\
-'<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21'\
-'</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24'\
-'</td><td class="sun">25</td></tr>\n'\
-'<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28'\
-'</td><td class="thu">29</td><td class="fri">30</td><td class="noday">'\
-' </td><td class="noday"> </td></tr>\n'\
-'</table>'
-
-
# pylint: disable=R0904
class Fedocallibtests(Modeltests):
""" Fedocallib tests. """
@@ -149,7 +130,11 @@ class Fedocallibtests(Modeltests):
self.assertNotEqual(week, None)
self.assertEqual(week.calendar.calendar_name, 'test_calendar')
self.assertNotEqual(week.meetings, None)
- self.assertEqual(len(week.meetings), 2)
+ self.assertEqual(len(week.meetings), 3)
+ self.assertEqual(week.meetings[0].meeting_name,
+ 'Fedora-fr-test-meeting')
+ self.assertEqual(week.meetings[0].meeting_information,
+ 'This is a test meeting')
self.assertEqual(week.meetings[0].meeting_name,
'Fedora-fr-test-meeting')
self.assertEqual(week.meetings[0].meeting_information,
@@ -291,7 +276,7 @@ class Fedocallibtests(Modeltests):
""" Test the get_past_meeting_of_user function. """
self.__setup_meeting()
meetings = fedocallib.get_past_meeting_of_user(self.session,
- 'pingou', from_date=TODAY)
+ 'pingou', from_date=TODAY - timedelta(days=100))
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 0)
self.assertEqual(meetings, [])
@@ -299,8 +284,8 @@ class Fedocallibtests(Modeltests):
obj = model.Meeting(
meeting_name='A past test meeting',
meeting_manager='pingou',
- meeting_date=TODAY - timedelta(days=1),
- meeting_date_end=TODAY - timedelta(days=1),
+ meeting_date=TODAY - timedelta(days=110),
+ meeting_date_end=TODAY - timedelta(days=110),
meeting_time_start=time(12, 00),
meeting_time_stop=time(13, 00),
meeting_information='This is a past test meeting',
@@ -308,7 +293,7 @@ class Fedocallibtests(Modeltests):
obj.save(self.session)
self.session.commit()
meetings = fedocallib.get_past_meeting_of_user(self.session,
- 'pingou', from_date=TODAY)
+ 'pingou', from_date=TODAY - timedelta(days=100))
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 1)
self.assertEqual(meetings[0].meeting_name, 'A past test meeting')
@@ -353,20 +338,25 @@ class Fedocallibtests(Modeltests):
meetings = fedocallib.get_future_regular_meeting_of_user(
self.session, 'pingou', from_date=TODAY)
self.assertNotEqual(meetings, None)
- self.assertEqual(len(meetings), 3)
+ self.assertEqual(len(meetings), 4)
self.assertEqual(meetings[0].meeting_name,
- 'Another test meeting2')
+ 'Another past test meeting')
self.assertEqual(meetings[0].meeting_information,
- 'This is a test meeting with recursion2')
+ 'This is a past meeting with recursion')
self.assertEqual(meetings[1].meeting_name,
- 'Another test meeting')
+ 'Another test meeting2')
self.assertEqual(meetings[1].meeting_information,
- 'This is a test meeting with recursion')
+ 'This is a test meeting with recursion2')
self.assertEqual(meetings[2].meeting_name,
- 'Test meeting with reminder and recursion')
+ 'Another test meeting')
self.assertEqual(meetings[2].meeting_information,
+ 'This is a test meeting with recursion')
+ self.assertEqual(meetings[3].meeting_name,
+ 'Test meeting with reminder and recursion')
+ self.assertEqual(meetings[3].meeting_information,
'This is a test meeting with recursion and reminder')
+
# pylint: disable=C0103
def test_get_future_regular_meeting_of_user_empty(self):
""" Test the get_future_regular_meeting_of_user function on a
@@ -583,29 +573,16 @@ class Fedocallibtests(Modeltests):
today = date.today()
output = fedocallib.get_html_monthly_cal(today.day, today.month,
today.year)
- # Handle the today css class
- expected_output = RESULT_CALENDAR_HTML.replace(
- 'class="%s">%s' % (today.strftime('%a').lower(), today.day),
- 'class="%s today">%s' % (today.strftime('%a').lower(),
- today.day))
- # Handle the change of month
- expected_output = expected_output.replace(
- 'class="month"><a class="button" href="#"><</a> '\
- '%s <a class="button" href="#">></a></th>',
- 'class="month"><a class="button" href="#"><</a> %s %s '\
- '<a class="button" href="#">></a></th>' % (
- today.strftime('%B %Y'), today.strftime('%B'),
- today.year))
- # Handle the current_week css class
- expected_output = expected_output.split('\n')
- cnt = 0
- while cnt < len(expected_output):
- if '>%s</td>' % today.day in expected_output[cnt]:
- expected_output[cnt] = expected_output[cnt].replace(
- '<tr>', '<tr class="current_week">')
- cnt = cnt + 1
- self.assertEqual(output.strip(),
- "\n".join(expected_output).strip())
+ # Check today css class
+ self.assertTrue('class="%s today">%s' % (
+ today.strftime('%a').lower(),
+ today.day) in output)
+ # Check the month
+ self.assertTrue('class="month"> %s </th>' % (
+ today.strftime('%B %Y')) in output)
+ # Check the current_week css class
+ self.assertNotEqual(re.match('<tr class="current_week">.*'\
+ '<td>%s</td>' % (today.day), output), [])
def test_get_week_day_index(self):
""" Test the get_week_day_index function. """
diff --git a/fedocal/tests/test_flask.py b/fedocal/tests/test_flask.py
index 4f446dd..eca8fb5 100644
--- a/fedocal/tests/test_flask.py
+++ b/fedocal/tests/test_flask.py
@@ -148,8 +148,8 @@ class Flasktests(Modeltests):
self.assertTrue('DESCRIPTION:This is a test meeting with '\
'recursion' in output.data)
self.assertTrue('ORGANIZER:pingou' in output.data)
- self.assertEqual(output.data.count('BEGIN:VEVENT'), 7)
- self.assertEqual(output.data.count('END:VEVENT'), 7)
+ self.assertEqual(output.data.count('BEGIN:VEVENT'), 8)
+ self.assertEqual(output.data.count('END:VEVENT'), 8)
def test_view_meeting(self):
""" Test the view_meeting function. """
diff --git a/fedocal/tests/test_flask_api.py b/fedocal/tests/test_flask_api.py
index c14da7c..90a6afe 100644
--- a/fedocal/tests/test_flask_api.py
+++ b/fedocal/tests/test_flask_api.py
@@ -97,7 +97,7 @@ class FlaskApitests(Modeltests):
self.assertTrue(' "meeting_manager": "pingou, shaiton,",' in \
output.data)
self.assertTrue('"meeting_name": "test-meeting2"' in output.data)
- self.assertEqual(output.data.count('meeting_name'), 7)
+ self.assertEqual(output.data.count('meeting_name'), 8)
output = self.app.get('/api/date/test_calendar4/')
self.assertEqual(output.status_code, 200)
diff --git a/fedocal/tests/test_meeting.py b/fedocal/tests/test_meeting.py
index 92cd8b8..09257a4 100644
--- a/fedocal/tests/test_meeting.py
+++ b/fedocal/tests/test_meeting.py
@@ -225,6 +225,22 @@ class Meetingtests(Modeltests):
self.session.commit()
self.assertNotEqual(obj, None)
+ # Past meeting with a recursion
+ obj = model.Meeting( # id:12
+ meeting_name='Another past test meeting',
+ meeting_manager='pingou,',
+ meeting_date=TODAY - timedelta(days=14),
+ meeting_date_end=TODAY - timedelta(days=14),
+ meeting_time_start=time(4, 00),
+ meeting_time_stop=time(5, 00),
+ meeting_information='This is a past meeting with recursion',
+ calendar_name='test_calendar',
+ recursion_frequency=7,
+ recursion_ends=TODAY + timedelta(days=90))
+ obj.save(self.session)
+ self.session.commit()
+ self.assertNotEqual(obj, None)
+
def test_repr_meeting(self):
""" Test the Meeting string representation function. """
self.test_init_meeting()
@@ -406,7 +422,7 @@ class Meetingtests(Modeltests):
""" Test the Meeting get_managers function when the meeting
does not exist. """
self.test_init_meeting()
- obj = model.Meeting.get_managers(self.session, 12)
+ obj = model.Meeting.get_managers(self.session, 25)
self.assertNotEqual(obj, None)
self.assertEqual(len(obj), 0)
self.assertEqual(obj, [])
@@ -441,7 +457,9 @@ class Meetingtests(Modeltests):
meetings = model.Meeting.get_past_meeting_of_user(self.session,
'pingou,', TODAY + timedelta(days=1))
self.assertNotEqual(meetings, None)
- self.assertEqual(len(meetings), 2)
+ self.assertEqual(len(meetings), 3)
+ self.assertEqual(meetings[2].meeting_name,
+ 'Another past test meeting')
self.assertEqual(meetings[1].meeting_name,
'Another test meeting2')
self.assertEqual(meetings[0].meeting_name,
@@ -513,14 +531,17 @@ class Meetingtests(Modeltests):
meetings = model.Meeting.get_future_regular_meeting_of_user(
self.session, 'pingou', TODAY)
self.assertNotEqual(meetings, None)
- self.assertEqual(len(meetings), 3)
+ self.assertEqual(len(meetings), 4)
self.assertEqual(meetings[0].meeting_name,
- 'Another test meeting2')
+ 'Another past test meeting')
self.assertEqual(meetings[1].meeting_name,
- 'Another test meeting')
+ 'Another test meeting2')
self.assertEqual(meetings[2].meeting_name,
+ 'Another test meeting')
+ self.assertEqual(meetings[3].meeting_name,
'Test meeting with reminder and recursion')
+
# pylint: disable=C0103
def test_get_future_regular_meeting_of_user_fail(self):
""" Test the Meeting get_future_regular_meeting_of_user function
diff --git a/fedocal/tests/test_week.py b/fedocal/tests/test_week.py
index 74afb83..6fb77f9 100644
--- a/fedocal/tests/test_week.py
+++ b/fedocal/tests/test_week.py
@@ -72,7 +72,7 @@ class Weektests(Modeltests):
self.assertNotEqual(weekobj, None)
self.assertEqual(weekobj.start_date, TODAY)
self.assertEqual(weekobj.stop_date, end_date)
- self.assertEqual(len(weekobj.meetings), 2)
+ self.assertEqual(len(weekobj.meetings), 3)
def test_repr_week(self):
""" Test if the week string representation is correct. """
11 years, 4 months
[fedocal] master: Fix the test_get_html_monthly_cal so it does not use hard-coded values (0f63267)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit 0f63267fe3a973302825f1612b87984f4f000c90
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Mon Dec 3 17:46:02 2012 +0100
Fix the test_get_html_monthly_cal so it does not use hard-coded values
>---------------------------------------------------------------
fedocal/tests/test_fedocallib.py | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/fedocal/tests/test_fedocallib.py b/fedocal/tests/test_fedocallib.py
index c4bfb21..6037c9b 100644
--- a/fedocal/tests/test_fedocallib.py
+++ b/fedocal/tests/test_fedocallib.py
@@ -591,10 +591,11 @@ class Fedocallibtests(Modeltests):
# Handle the change of month
expected_output = expected_output.replace(
'class="month"><a class="button" href="#"><</a> '\
- 'November 2012 <a class="button" href="#">></a></th>',
+ '%s <a class="button" href="#">></a></th>',
'class="month"><a class="button" href="#"><</a> %s %s '\
'<a class="button" href="#">></a></th>' % (
- today.strftime('%B'), today.year))
+ today.strftime('%B %Y'), today.strftime('%B'),
+ today.year))
# Handle the current_week css class
expected_output = expected_output.split('\n')
cnt = 0
11 years, 4 months
[fedocal] master: Fix recursive edit (e00aef2)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit e00aef2462c94b65b3699c0e954a0da8ec398c96
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Mon Dec 3 17:41:14 2012 +0100
Fix recursive edit
>---------------------------------------------------------------
fedocal/__init__.py | 28 ++++++++++++----
fedocal/fedocallib/__init__.py | 66 +++++++++++++++++++++++++++++++------
fedocal/tests/test_fedocallib.py | 22 ++++++++++++
3 files changed, 98 insertions(+), 18 deletions(-)
diff --git a/fedocal/__init__.py b/fedocal/__init__.py
index 838cdf6..e717bd9 100644
--- a/fedocal/__init__.py
+++ b/fedocal/__init__.py
@@ -352,10 +352,6 @@ def edit_meeting(meeting_id):
'you are not allowed to edit it.')
return flask.redirect(flask.url_for('index'))
meeting = Meeting.by_id(SESSION, meeting_id)
- if not fedocallib.is_date_in_future(meeting.meeting_date,
- meeting.meeting_time_start.hour):
- flask.flash('This meeting has already occured, you may not '\
- 'change it anymore')
calendarobj = Calendar.by_id(SESSION, meeting.calendar_name)
tzone = get_timezone()
form = forms.AddMeetingForm()
@@ -375,10 +371,11 @@ def edit_meeting(meeting_id):
meeting_information=form.information.data,
meeting_region=form.meeting_region.data,
tzone=get_timezone(),
- frequency=form.frequency.data,
- end_repeats=form.end_repeats.data,
+ recursion_frequency=form.frequency.data,
+ recursion_ends=form.end_repeats.data,
remind_when=form.remind_when.data,
- remind_who=form.remind_who.data)
+ remind_who=form.remind_who.data,
+ edit_all_meeting=True)
except FedocalException, err:
flask.flash(err)
return flask.render_template('edit_meeting.html',
@@ -396,6 +393,23 @@ def edit_meeting(meeting_id):
return flask.redirect(flask.url_for('view_meeting',
meeting_id=meeting_id))
else:
+ if meeting.recursion_frequency and meeting.recursion_ends and \
+ fedocallib.is_date_in_future(meeting.recursion_ends,
+ meeting.meeting_time_start):
+ cnt = 0
+ meetingobj = Meeting.copy(meeting)
+ while meetingobj.meeting_date < datetime.date.today():
+ meetingobj = Meeting.copy(meeting)
+ meetingobj.meeting_date = meetingobj.meeting_date + \
+ datetime.timedelta(
+ days=meetingobj.recursion_frequency * cnt)
+ cnt = cnt + 1
+ meeting = meetingobj
+ if not fedocallib.is_date_in_future(meeting.meeting_date,
+ meeting.meeting_time_start):
+ flask.flash('This meeting has already occured, you may not '\
+ 'change it anymore')
+ return flask.redirect(flask.url_for('my_meetings'))
form = forms.AddMeetingForm(meeting=meeting, tzone=get_timezone())
return flask.render_template('edit_meeting.html', meeting=meeting,
calendar=calendarobj, form=form, tzone=tzone)
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index f1d8730..d0bc7e8 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -376,7 +376,22 @@ def get_past_meeting_of_user(session, username, tzone='UTC',
from_date)
meetings = []
for meeting in meetings_tmp:
- meetings.append(convert_meeting_timezone(meeting, 'UTC', tzone))
+ if meeting.recursion_frequency and meeting.recursion_ends:
+ rec_meetings = []
+ cnt = 0
+ meetingobj = Meeting.copy(meeting)
+ while meetingobj.meeting_date < from_date:
+ meetingobj = Meeting.copy(meeting)
+ meetingobj.meeting_date = meetingobj.meeting_date + \
+ timedelta(days=meeting.recursion_frequency * cnt)
+ cnt = cnt + 1
+ if meetingobj.meeting_date < from_date:
+ rec_meetings.append(convert_meeting_timezone(
+ meetingobj, 'UTC', tzone))
+ rec_meetings.reverse()
+ meetings.extend(rec_meetings)
+ else:
+ meetings.append(convert_meeting_timezone(meeting, 'UTC', tzone))
return meetings
@@ -674,8 +689,9 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
meeting_time_start, meeting_time_stop, comanager,
meeting_information,
meeting_region, tzone,
- frequency, end_repeats,
- remind_when, remind_who):
+ recursion_frequency, recursion_ends,
+ remind_when, remind_who,
+ edit_all_meeting=True):
""" When a user wants to edit a meeting to the database, we need to
perform a number of test first checking that the input is valid
and then edit the desired meeting.
@@ -700,6 +716,31 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
raise InvalidMeeting(
'The start date of your meeting is later than the end date.')
+ ## The information are correct
+ ## What we do now:
+ # a) the meeting is not recursive -> edit the information as provided
+ # b) the meeting is recursive and we update all the meetings
+ # -> recursion_end = today
+ # -> copy meeting to new object
+ # -> update new object
+ # c) the meeting is recursive and the update only one meeting
+ # -> recursion_end = today
+ # -> copy meeting to new object w/o recursion
+ # -> update new object
+ # -> copy meeting to new object w/ recursion and date = date + offset
+
+ if recursion_frequency and meeting.recursion_frequency:
+ old_meeting = Meeting.copy(meeting)
+ old_meeting.recursion_ends = meeting_date - timedelta(days=1)
+ if old_meeting.recursion_ends > old_meeting.meeting_date:
+ old_meeting.save(session)
+ if not edit_all_meeting:
+ new_meeting = Meeting.copy(meeting)
+ new_meeting.meeting_date = meeting.meeting_date + timedelta(
+ days=meeting.recursion_frequency)
+ new_meeting.save(session)
+
+
meeting_time_start = convert_time(
datetime(meeting_date.year, meeting_date.month, meeting_date.day,
meeting_time_start.hour,
@@ -729,15 +770,14 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
region = None
meeting.meeting_region = region
- frequency = frequency
- if not frequency:
- frequency = None
- meeting.recursion_frequency = frequency
+ recursion_frequency = recursion_frequency
+ if not recursion_frequency:
+ recursion_frequency = None
+ meeting.recursion_frequency = recursion_frequency
- ends_date = end_repeats
- if not ends_date:
- ends_date = date(2025, 12, 31)
- meeting.recursion_ends = ends_date
+ if not recursion_ends:
+ recursion_ends = date(2025, 12, 31)
+ meeting.recursion_ends = recursion_ends
if remind_when and remind_who:
if meeting.reminder_id:
@@ -756,5 +796,9 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
meeting.reminder.delete(session)
meeting.reminder_id = None
+ if not edit_all_meeting and meeting.recursion_frequency:
+ meeting.recursion_frequency = None
+ meeting.recursion_ends = None
+
meeting.save(session)
session.commit()
diff --git a/fedocal/tests/test_fedocallib.py b/fedocal/tests/test_fedocallib.py
index cf1d108..c4bfb21 100644
--- a/fedocal/tests/test_fedocallib.py
+++ b/fedocal/tests/test_fedocallib.py
@@ -995,6 +995,28 @@ class Fedocallibtests(Modeltests):
self.assertEqual(meeting.meeting_date_end, date.today() + \
timedelta(days=3))
+ meeting = model.Meeting.by_id(self.session, 9)
+ fedocallib.edit_meeting(
+ self.session, meeting, calendarobj, fasuser,
+ 'Test meeting with reminder-2',
+ date.today() + timedelta(days=1), date.today() + timedelta(
+ days=3),
+ time(23, 0), time(23, 59), None,
+ 'Information2', None, 'Europe/Paris',
+ 7, TODAY + timedelta(days=30),
+ 'H-24', 'test(a)example.org',
+ edit_all_meeting=False)
+ meeting = model.Meeting.by_id(self.session, 9)
+ self.assertNotEqual(meeting, None)
+ self.assertEqual(meeting.meeting_name,
+ 'Test meeting with reminder-2')
+ self.assertEqual(meeting.meeting_manager, 'username,')
+ self.assertEqual(meeting.meeting_information, 'Information2')
+ self.assertEqual(meeting.reminder.reminder_offset, 'H-24')
+ self.assertEqual(meeting.reminder.reminder_to, 'test(a)example.org')
+ self.assertEqual(meeting.meeting_date_end, date.today() + \
+ timedelta(days=3))
+
if __name__ == '__main__':
SUITE = unittest.TestLoader().loadTestsFromTestCase(Fedocallibtests)
11 years, 4 months
[fedocal] master: Add the meeting_date_end to the edit meeting (37e1c34)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit 37e1c34d4fe56d45e4b92f9ce960179b7f2a2766
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Wed Nov 28 13:21:54 2012 +0100
Add the meeting_date_end to the edit meeting
Even if we don't do anything with the meeting_date_end atm from a user
pov, we have the code ready.
>---------------------------------------------------------------
fedocal/__init__.py | 2 +-
fedocal/fedocallib/__init__.py | 14 +++++++++++---
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/fedocal/__init__.py b/fedocal/__init__.py
index 4b8c94f..838cdf6 100644
--- a/fedocal/__init__.py
+++ b/fedocal/__init__.py
@@ -368,7 +368,7 @@ def edit_meeting(meeting_id):
fas_user=flask.g.fas_user,
meeting_name=form.meeting_name.data,
meeting_date=form.meeting_date.data,
- # meeting_date_end,
+ meeting_date_end=None,
meeting_time_start=form.meeting_time_start.data,
meeting_time_stop=form.meeting_time_stop.data,
comanager=form.comanager.data,
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index c3c5924..2fb43ff 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -670,7 +670,7 @@ def add_meeting(session, calendarobj, fas_user,
def edit_meeting(session, meeting, calendarobj, fas_user,
- meeting_name, meeting_date, # meeting_date_end,
+ meeting_name, meeting_date, meeting_date_end,
meeting_time_start, meeting_time_stop, comanager,
meeting_information,
meeting_region, tzone,
@@ -693,8 +693,16 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
raise InvalidMeeting(
'The start time of your meeting is later than the stop time.')
+ if not meeting_date_end:
+ meeting_date_end = meeting_date
+
+ if meeting_date > meeting_date_end:
+ raise InvalidMeeting(
+ 'The start date of your meeting is later than the end date.')
+
meeting_time_start = convert_time(
- datetime(meeting_date.year, meeting_date.month, meeting_date.day,
+ datetime(meeting_date_end.year, meeting_date_end.month,
+ meeting_date_end.day,
meeting_time_start.hour,
meeting_time_start.minute),
tzone, 'UTC')
@@ -711,7 +719,7 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
comanager)
meeting.meeting_date = meeting_time_start.date()
- meeting_end_date = None # meeting_date_end
+ meeting_end_date = meeting_time_stop.date()
if not meeting_end_date:
meeting_end_date = meeting_time_start.date()
meeting.meeting_end_date = meeting_end_date
11 years, 4 months
[fedocal] master: Fix unit-tests and coverage (e13c497)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit e13c497bca664233c6749df8b10621ef778f2167
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Wed Nov 28 15:43:52 2012 +0100
Fix unit-tests and coverage
This fix the unit-tests for the change to the edit_meeting
Additionnaly, fix the coverage of the API and the fedocallib to remain to
100%
>---------------------------------------------------------------
fedocal/fedocallib/__init__.py | 11 ++++-------
fedocal/tests/test_fedocallib.py | 31 ++++++++++++++++++++++---------
fedocal/tests/test_flask_api.py | 4 ++--
fedocal/tests/test_meeting.py | 8 ++++----
4 files changed, 32 insertions(+), 22 deletions(-)
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index 2fb43ff..f1d8730 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -701,13 +701,13 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
'The start date of your meeting is later than the end date.')
meeting_time_start = convert_time(
- datetime(meeting_date_end.year, meeting_date_end.month,
- meeting_date_end.day,
+ datetime(meeting_date.year, meeting_date.month, meeting_date.day,
meeting_time_start.hour,
meeting_time_start.minute),
tzone, 'UTC')
meeting_time_stop = convert_time(
- datetime(meeting_date.year, meeting_date.month, meeting_date.day,
+ datetime(meeting_date_end.year, meeting_date_end.month,
+ meeting_date_end.day,
meeting_time_stop.hour,
meeting_time_stop.minute),
tzone, 'UTC')
@@ -719,10 +719,7 @@ def edit_meeting(session, meeting, calendarobj, fas_user,
comanager)
meeting.meeting_date = meeting_time_start.date()
- meeting_end_date = meeting_time_stop.date()
- if not meeting_end_date:
- meeting_end_date = meeting_time_start.date()
- meeting.meeting_end_date = meeting_end_date
+ meeting.meeting_date_end = meeting_time_stop.date()
meeting.meeting_time_start = meeting_time_start.time()
meeting.meeting_time_stop = meeting_time_stop.time()
meeting.meeting_information = meeting_information
diff --git a/fedocal/tests/test_fedocallib.py b/fedocal/tests/test_fedocallib.py
index 0dc3bff..cf1d108 100644
--- a/fedocal/tests/test_fedocallib.py
+++ b/fedocal/tests/test_fedocallib.py
@@ -852,7 +852,7 @@ class Fedocallibtests(Modeltests):
self.assertRaises(UserNotAllowed, fedocallib.edit_meeting,
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), None,
time(23, 0), time(23, 59), None,
'Information', 'EMEA', 'Europe/Paris',
None, None,
@@ -864,7 +864,7 @@ class Fedocallibtests(Modeltests):
self.assertRaises(InvalidMeeting, fedocallib.edit_meeting,
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited',
- date.today() - timedelta(days=2),
+ date.today() - timedelta(days=2), None,
time(23, 0), time(23, 59), None,
'Information', 'EMEA', 'UTC',
None, None,
@@ -874,17 +874,27 @@ class Fedocallibtests(Modeltests):
self.assertRaises(InvalidMeeting, fedocallib.edit_meeting,
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), None,
time(23, 0), time(21, 59), None,
'Information', 'EMEA', 'Europe/Paris',
None, None,
None, None)
self.session.rollback()
+ self.assertRaises(InvalidMeeting, fedocallib.edit_meeting,
+ self.session, meeting, calendarobj, fasuser,
+ 'Fedora-fr-meeting_edited',
+ date.today() + timedelta(days=1), date.today(),
+ time(23, 0), time(23, 59), None,
+ 'Information', 'EMEA', 'Europe/Paris',
+ None, None,
+ None, None)
+ self.session.rollback()
+
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), None,
time(23, 0), time(23, 59), None,
'Information', 'EMEA', 'Europe/Paris',
None, None,
@@ -899,7 +909,7 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited2',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), None,
time(23, 0), time(23, 59), 'pingou',
'Information2', 'EMEA', 'Europe/Paris',
None, None,
@@ -914,7 +924,7 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), None,
time(23, 0), time(23, 59), None,
'Information', 'EMEA', 'Europe/Paris',
None, None,
@@ -931,7 +941,7 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), None,
time(23, 0), time(23, 59), None,
'Information', 'EMEA', 'Europe/Paris',
7, TODAY + timedelta(days=30),
@@ -949,7 +959,7 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Fedora-fr-meeting_edited2',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), None,
time(23, 0), time(23, 59), None,
'Information2', None, 'Europe/Paris',
None, None,
@@ -968,7 +978,8 @@ class Fedocallibtests(Modeltests):
fedocallib.edit_meeting(
self.session, meeting, calendarobj, fasuser,
'Test meeting with reminder-2',
- date.today() + timedelta(days=1),
+ date.today() + timedelta(days=1), date.today() + timedelta(
+ days=3),
time(23, 0), time(23, 59), None,
'Information2', None, 'Europe/Paris',
None, None,
@@ -981,6 +992,8 @@ class Fedocallibtests(Modeltests):
self.assertEqual(meeting.meeting_information, 'Information2')
self.assertEqual(meeting.reminder.reminder_offset, 'H-24')
self.assertEqual(meeting.reminder.reminder_to, 'test(a)example.org')
+ self.assertEqual(meeting.meeting_date_end, date.today() + \
+ timedelta(days=3))
if __name__ == '__main__':
diff --git a/fedocal/tests/test_flask_api.py b/fedocal/tests/test_flask_api.py
index 1e5b1a9..c14da7c 100644
--- a/fedocal/tests/test_flask_api.py
+++ b/fedocal/tests/test_flask_api.py
@@ -181,7 +181,7 @@ class FlaskApitests(Modeltests):
def test_api_place(self):
""" Test the api_place function. """
- end_date = TODAY + timedelta(days=2)
+ end_date = TODAY + timedelta(days=25)
output = self.app.get('/api/place/EMEA/foobar/%s/%s' % (TODAY,
end_date))
self.assertEqual(output.status_code, 301)
@@ -210,7 +210,7 @@ class FlaskApitests(Modeltests):
TODAY, end_date))
self.assertEqual(output.status_code, 200)
self.assertTrue('"retrieval": "ok"' in output.data)
- self.assertEqual(output.data.count('meeting_name'), 1)
+ self.assertEqual(output.data.count('meeting_name'), 2)
end_date = TODAY + timedelta(days=1)
diff --git a/fedocal/tests/test_meeting.py b/fedocal/tests/test_meeting.py
index 82c3bfb..92cd8b8 100644
--- a/fedocal/tests/test_meeting.py
+++ b/fedocal/tests/test_meeting.py
@@ -61,8 +61,8 @@ class Meetingtests(Modeltests):
meeting_manager='pingou, shaiton,',
meeting_date=TODAY,
meeting_date_end=TODAY,
- meeting_time_start=time(19, 45),
- meeting_time_stop=time(20, 45),
+ meeting_time_start=time(19, 50),
+ meeting_time_stop=time(20, 50),
meeting_information='This is a test meeting',
calendar_name='test_calendar')
obj.save(self.session)
@@ -314,8 +314,8 @@ class Meetingtests(Modeltests):
'"meeting_manager": "pingou, shaiton,",\n '\
'"meeting_date": "%s",\n '\
'"meeting_date_end": "%s",\n '\
- '"meeting_time_start": "19:45:00",\n '\
- '"meeting_time_stop": "20:45:00",\n '\
+ '"meeting_time_start": "19:50:00",\n '\
+ '"meeting_time_stop": "20:50:00",\n '\
'"meeting_information": "This is a test meeting",\n '\
'"meeting_region": "None",\n '\
'"calendar_name": "test_calendar"\n'\
11 years, 4 months
[fedocal] master: Update TODO file to reflect current status (ea08a45)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit ea08a456b6e0e0635735cde39923cce75a3cf7c7
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Thu Nov 29 16:37:12 2012 +0100
Update TODO file to reflect current status
>---------------------------------------------------------------
TODO | 5 -----
1 files changed, 0 insertions(+), 5 deletions(-)
diff --git a/TODO b/TODO
index a323a10..feaaeca 100644
--- a/TODO
+++ b/TODO
@@ -1,10 +1,5 @@
- Unit-tests, unit-tests and more unit-tests
-- Add documentation on how to install/deploy it
- - Port to Flask configuration management
- Add setup.py
-- Add license
- Complete the code documentation
-- Add user timezone in a new column on the calendar view
-
11 years, 4 months