[fedocal] master: Fix the meeting to allow any starting time (5cb9708)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit 5cb97088726a61b49683d39d77ae5f31757af4b3
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Fri Nov 16 17:47:52 2012 +0100
Fix the meeting to allow any starting time
From now on the input time by the user is a real time entity and
we save this in the database.
However, we still only shows half-hour slots on the agenda.
>---------------------------------------------------------------
fedocal/__init__.py | 15 ++++----
fedocal/fedocallib/__init__.py | 75 +++++++++++++++++++--------------------
fedocal/fedocallib/model.py | 7 ++--
fedocal/forms.py | 39 +++++++++++----------
4 files changed, 67 insertions(+), 69 deletions(-)
diff --git a/fedocal/__init__.py b/fedocal/__init__.py
index 6095285..3eb9b4f 100644
--- a/fedocal/__init__.py
+++ b/fedocal/__init__.py
@@ -319,10 +319,11 @@ def add_meeting(calendar_name):
end_repeats=form.end_repeats.data,
remind_when=form.remind_when.data,
remind_who=form.remind_who.data)
- except FedocalException:
- flask.redirect(flask.url_for('add_meeting',
+ except FedocalException, err:
+ flask.flash(err)
+ return flask.render_template('add_meeting.html',
calendar=calendarobj, form=form,
- tzone=tzone))
+ tzone=tzone)
except SQLAlchemyError, err:
print 'add_meeting:', err
flask.flash('Could not add this meeting to this calendar')
@@ -370,12 +371,10 @@ def edit_meeting(meeting_id):
meeting.meeting_date = form.meeting_date.data
meeting_end_date = form.meeting_date_end.data
if not meeting_end_date:
- meeting_end_date = form.meeting_date.date
+ meeting_end_date = form.meeting_date.data
meeting.meeting_end_date = meeting_end_date
- meeting.meeting_time_start = datetime.time(int(
- form.meeting_time_start.data))
- meeting.meeting_time_stop = datetime.time(int(
- form.meeting_time_stop.data))
+ meeting.meeting_time_start = form.meeting_time_start.data
+ meeting.meeting_time_stop = form.meeting_time_stop.data
meeting.meeting_information = form.information.data
region = form.meeting_region.data
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index 3a41877..30b6fe2 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -236,31 +236,36 @@ def get_meetings(session, calendar, year=None, month=None, day=None,
# pylint: disable=W0612
meetings[key] = [None for cnt2 in range(0, 7)]
for meeting in week.meetings:
- start = meeting.meeting_time_start.hour
- stop = meeting.meeting_time_stop.hour
- if meeting.meeting_time_stop.minute == 59:
- stop = stop + 1
- order = range(0, stop - start)
- invorder = order[:]
- invorder.reverse()
- cnt = 0
- for item in order:
- start_time = start + item
+ start_minute = meeting.meeting_time_start.minute
+ stop_minute = meeting.meeting_time_stop.minute
+ if start_minute != 0 and start_minute != 30:
+ if start_minute - 30 > 0:
+ start_minute = 30
+ else:
+ start_minute = 0
+ if stop_minute != 0 and stop_minute != 30:
+ if stop_minute - 30 > 0:
+ stop_minute = 30
+ else:
+ stop_minute = 0
+ startdt = datetime(2000, 01, 01, meeting.meeting_time_start.hour,
+ start_minute, 0)
+ stopdt = datetime(2000, 01, 01, meeting.meeting_time_stop.hour,
+ stop_minute, 0)
+
+ startdt = convert_time(startdt, 'UTC', tzone)
+ stopdt = convert_time(stopdt, 'UTC', tzone)
+
+ t_time = startdt
+ while t_time < stopdt:
day = meeting.meeting_date.weekday()
- for key in [convert_time(
- datetime(2000, 01, 01, int(start_time), 0, 0),
- 'UTC',
- tzone).strftime(fmt),
- convert_time(
- datetime(2000, 01, 01, int(start_time), 30, 0),
- 'UTC',
- tzone).strftime(fmt)]:
- if key in meetings:
- if meetings[key][day]:
- meetings[key][day].append(meeting)
- else:
- meetings[key][day] = [meeting]
- cnt = cnt + 1
+ key = t_time.strftime(fmt)
+ if key in meetings:
+ if meetings[key][day]:
+ meetings[key][day].append(meeting)
+ else:
+ meetings[key][day] = [meeting]
+ t_time = t_time + timedelta(minutes=30)
return meetings
@@ -364,7 +369,7 @@ def get_future_regular_meeting_of_user(session, username,
def agenda_is_free(session, calendar, meeting_date,
- time_start, time_stop):
+ time_start):
"""Check if there is already someting planned in this agenda at that
time.
@@ -372,10 +377,9 @@ def agenda_is_free(session, calendar, meeting_date,
:arg calendar: the name of the calendar of interest.
:arg meeting_date: the date of the meeting (as Datetime object)
:arg time_start: the time at which the meeting starts (as int)
- :arg time_stop: the time at which the meeting stops (as int)
"""
meetings = Meeting.get_by_time(session, calendar, meeting_date,
- time(time_start), time(time_stop))
+ time_start)
if not meetings:
return True
else:
@@ -549,26 +553,21 @@ def add_meeting(session, calendarobj, fas_user,
raise InvalidMeeting('The date you entered is in '\
'the past')
- if int(meeting_time_start) > \
- int(meeting_time_stop):
+ if meeting_time_start > meeting_time_stop:
raise InvalidMeeting(
'The start time of your meeting is later than the stop time.')
meeting_time_start = convert_time(
- datetime(2000, 1, 1, int(meeting_time_start), 0),
+ datetime(2000, 1, 1, meeting_time_start.hour,
+ meeting_time_start.minute),
tzone, 'UTC')
- tsp_hour = int(meeting_time_stop)
- tsp_minute = 0
- if tsp_hour == 24:
- tsp_hour = 23
- tsp_minute = 59
meeting_time_stop = convert_time(
- datetime(2000, 1, 1, tsp_hour, tsp_minute),
+ datetime(2000, 1, 1, meeting_time_stop.hour,
+ meeting_time_stop.minute),
tzone, 'UTC')
free_time = agenda_is_free(session, calendarobj,
- meeting_date, meeting_time_start.hour,
- meeting_time_stop.hour)
+ meeting_date, meeting_time_start.time())
if not bool(calendarobj.calendar_multiple_meetings) and \
not bool(free_time):
diff --git a/fedocal/fedocallib/model.py b/fedocal/fedocallib/model.py
index e882ee7..510d002 100644
--- a/fedocal/fedocallib/model.py
+++ b/fedocal/fedocallib/model.py
@@ -298,16 +298,15 @@ class Meeting(BASE):
(Meeting.meeting_region == region)).all()
@classmethod
- def get_by_time(cls, session, calendar, meetingdate, start_time,
- stop_time):
+ def get_by_time(cls, session, calendar, meetingdate, start_time):
""" Retrieve the list of meetings for a given date and between
two times.
"""
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_start <= start_time),
+ (Meeting.meeting_time_stop > start_time)).all()
@classmethod
def get_past_meeting_of_user(cls, session, username, start_date):
diff --git a/fedocal/forms.py b/fedocal/forms.py
index d9a0321..b777350 100644
--- a/fedocal/forms.py
+++ b/fedocal/forms.py
@@ -25,10 +25,23 @@
import flask
from flask.ext import wtf
+from datetime import time
from fedocallib import HOURS
+def validate_time(form, field):
+ """ Validate if the data set in the given field is a valid time. """
+ import re
+ if not re.match('\d?\d:\d\d?', field.data):
+ raise ValidationError('Time must be of type "HH:MM"')
+ time_data = field.data.split(':')
+ try:
+ field.data = time(int(time_data[0]), int(time_data[1]))
+ except ValueError:
+ raise ValidationError('Time must be of type "HH:MM"')
+
+
class AddCalendarForm(wtf.Form):
""" Form used to create a new calendar. """
calendar_name = wtf.TextField('Calendar',
@@ -52,15 +65,12 @@ class AddMeetingForm(wtf.Form):
meeting_date_end = wtf.DateField('End date',
[wtf.validators.optional()])
- meeting_time_start = wtf.SelectField('Start time',
- [wtf.validators.Required()],
- choices=[(hour, hour) for hour in HOURS]
- )
+ meeting_time_start = wtf.TextField('Start time',
+ [wtf.validators.Required(), validate_time])
+
+ meeting_time_stop = wtf.TextField('Stop time',
+ [wtf.validators.Required(), validate_time])
- meeting_time_stop = wtf.SelectField('Stop time',
- [wtf.validators.Required()],
- choices=[(hour, hour) for hour in HOURS]
- )
comanager = wtf.TextField('Co-manager')
information = wtf.TextAreaField('Information')
@@ -97,20 +107,11 @@ class AddMeetingForm(wtf.Form):
super(AddMeetingForm, self).__init__(*args, **kwargs)
if 'meeting' in kwargs:
meeting = kwargs['meeting']
- if meeting.meeting_time_start.hour < 10:
- start_hour = "0%s" % str(meeting.meeting_time_start.hour)
- else:
- start_hour = str(meeting.meeting_time_start.hour)
- if meeting.meeting_time_stop.hour < 10:
- stop_hour = "0%s" % str(meeting.meeting_time_stop.hour)
- else:
- stop_hour = str(meeting.meeting_time_stop.hour)
-
self.meeting_name.data = meeting.meeting_name
self.meeting_date.data = meeting.meeting_date
self.meeting_date_end.data = meeting.meeting_date_end
- self.meeting_time_start.data = start_hour
- self.meeting_time_stop.data = stop_hour
+ self.meeting_time_start.data = meeting.meeting_time_start
+ self.meeting_time_stop.data = meeting.meeting_time_stop
self.information.data = meeting.meeting_information
# You are not allowed to remove yourself from the managers.
meeting_manager = meeting.meeting_manager.replace(
10 years, 6 months
[fedocal] master: Fix the mailto link to the contact of the calendar (4036030)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit 4036030b5df9ab569bfba6a57edac66e21465619
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Thu Nov 15 20:31:46 2012 +0100
Fix the mailto link to the contact of the calendar
As we do not require a contact at the database level, we do consider
the case where the email is empty, in such case the link is not
presented.
>---------------------------------------------------------------
fedocal/templates/master.html | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/fedocal/templates/master.html b/fedocal/templates/master.html
index 895d7cb..6a1b0b2 100644
--- a/fedocal/templates/master.html
+++ b/fedocal/templates/master.html
@@ -61,9 +61,13 @@
calendar_name=calendar.calendar_name)}}"
title="Add this calendar to your agenda">iCal export</a>
</li>
+ {% if calendar.calendar_contact %}
<li>
- <a href="#">Contact admin</a>
+ <a href="mailto:{{calendar.calendar_contact}}">
+ Contact admin
+ </a>
</li>
+ {% endif %}
</ul>
</li>
{% endfor %}
10 years, 6 months
Re: [fedocal] #4: Documentation
by fedocal
#4: Documentation
--------------------------+-------------------------
Reporter: pingou | Owner: pingou
Type: enhancement | Status: closed
Priority: major | Milestone: 0.1.0
Component: fedocal | Version: development
Resolution: fixed | Keywords:
--------------------------+-------------------------
Changes (by pingou):
* status: assigned => closed
* resolution: => fixed
--
Ticket URL: <https://fedorahosted.org/fedocal/ticket/4#comment:5>
fedocal <https://fedorahosted.org/fedocal>
A web-based calendar application for Fedora
10 years, 6 months
[fedocal] #11: Handle meeting ending at 24h00
by fedocal
#11: Handle meeting ending at 24h00
---------------------+-------------------------
Reporter: pingou | Owner:
Type: defect | Status: new
Priority: major | Milestone: 0.1.0
Component: fedocal | Version: development
Keywords: |
---------------------+-------------------------
Right now if a meeting ends at 24h00, fedocal will crash as 24h00 does not
exist for python, so if end_date == 24h00, then end_date == 23h59
--
Ticket URL: <https://fedorahosted.org/fedocal/ticket/11>
fedocal <https://fedorahosted.org/fedocal>
A web-based calendar application for Fedora
10 years, 6 months
[fedocal] master: Rework the get_manager function (a472f9e)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit a472f9e52c6ad17eb2c26644e02a046a467260a8
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Wed Nov 14 19:13:52 2012 +0100
Rework the get_manager function
We could do this better
>---------------------------------------------------------------
fedocal/fedocallib/model.py | 13 +++++--------
1 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/fedocal/fedocallib/model.py b/fedocal/fedocallib/model.py
index bb89928..e882ee7 100644
--- a/fedocal/fedocallib/model.py
+++ b/fedocal/fedocallib/model.py
@@ -254,14 +254,11 @@ class Meeting(BASE):
""" Return the list of managers for a given meeting.
"""
meeting = Meeting.by_id(session, identifier)
- if not meeting or not meeting.meeting_manager:
- managers = []
- else:
- if ',' in meeting.meeting_manager:
- managers = [item.strip()
- for item in meeting.meeting_manager.split(',')]
- else:
- managers = [meeting.meeting_manager]
+ managers = []
+ if meeting and meeting.meeting_manager:
+ for item in meeting.meeting_manager.split(','):
+ if item.strip():
+ managers.append(item.strip())
return managers
@classmethod
10 years, 6 months
[fedocal] master: Fix the case the meeting ends at 24:00 (380d758)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit 380d7589be5afcf698f85cab76fa1100d9d2157f
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Wed Nov 14 17:36:24 2012 +0100
Fix the case the meeting ends at 24:00
Since this is actually not a valid time, we transform it to 23:59 and
convert it back when needed
Cover the new code handling the end time at 24h with tests
and fix the others unit-tests accordingly.
Fixes #11
>---------------------------------------------------------------
fedocal/fedocallib/__init__.py | 9 +++++-
fedocal/tests/test_fedocallib.py | 53 +++++++++++++++++++++++++++++--------
fedocal/tests/test_flask.py | 10 +++---
fedocal/tests/test_flask_api.py | 6 ++--
fedocal/tests/test_meeting.py | 49 ++++++++++++++++++++++-------------
fedocal/tests/test_week.py | 4 +-
6 files changed, 90 insertions(+), 41 deletions(-)
diff --git a/fedocal/fedocallib/__init__.py b/fedocal/fedocallib/__init__.py
index e8cd26b..3a41877 100644
--- a/fedocal/fedocallib/__init__.py
+++ b/fedocal/fedocallib/__init__.py
@@ -238,6 +238,8 @@ def get_meetings(session, calendar, year=None, month=None, day=None,
for meeting in week.meetings:
start = meeting.meeting_time_start.hour
stop = meeting.meeting_time_stop.hour
+ if meeting.meeting_time_stop.minute == 59:
+ stop = stop + 1
order = range(0, stop - start)
invorder = order[:]
invorder.reverse()
@@ -555,8 +557,13 @@ def add_meeting(session, calendarobj, fas_user,
meeting_time_start = convert_time(
datetime(2000, 1, 1, int(meeting_time_start), 0),
tzone, 'UTC')
+ tsp_hour = int(meeting_time_stop)
+ tsp_minute = 0
+ if tsp_hour == 24:
+ tsp_hour = 23
+ tsp_minute = 59
meeting_time_stop = convert_time(
- datetime(2000, 1, 1, int(meeting_time_stop), 0),
+ datetime(2000, 1, 1, tsp_hour, tsp_minute),
tzone, 'UTC')
free_time = agenda_is_free(session, calendarobj,
diff --git a/fedocal/tests/test_fedocallib.py b/fedocal/tests/test_fedocallib.py
index 0fb97b7..ad36bb8 100644
--- a/fedocal/tests/test_fedocallib.py
+++ b/fedocal/tests/test_fedocallib.py
@@ -241,6 +241,20 @@ class Fedocallibtests(Modeltests):
self.assertEqual(cnt, 6)
self.assertEqual(meetings['19h00'][0], None)
+ new_day = TODAY + timedelta(days=20)
+ meetings = fedocallib.get_meetings(self.session, calendar,
+ new_day.year, new_day.month, new_day.day)
+ self.assertNotEqual(meetings, None)
+ cnt = 0
+ for meeting in meetings['23h00']:
+ if meeting is not None:
+ for meet in meeting:
+ self.assertEqual(meet.meeting_name,
+ 'test-meeting23h59')
+ else:
+ cnt = cnt + 1
+ self.assertEqual(cnt, 6)
+
# pylint: disable=C0103
def test_get_meetings_with_multiple_same_time(self):
""" Test the get_meetings function when there are several
@@ -320,7 +334,7 @@ class Fedocallibtests(Modeltests):
""" Test the get_future_single_meeting_of_user function. """
self.__setup_meeting()
meetings = fedocallib.get_future_single_meeting_of_user(self.session,
- 'pingou', TODAY)
+ 'pingou,', TODAY)
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 3)
self.assertEqual(meetings[0].meeting_name,
@@ -381,7 +395,7 @@ class Fedocallibtests(Modeltests):
def test_delete_recursive_meeting(self):
""" Test the delete_recursive_meeting function. """
self.__setup_meeting()
- meeting = model.Meeting.by_id(self.session, 7)
+ meeting = model.Meeting.by_id(self.session, 8)
self.assertNotEqual(meeting, None)
self.assertEqual(meeting.meeting_name, 'Another test meeting2')
self.assertEqual(meeting.recursion_ends,
@@ -389,7 +403,7 @@ class Fedocallibtests(Modeltests):
fedocallib.delete_recursive_meeting(self.session, meeting)
- meeting = model.Meeting.by_id(self.session, 7)
+ meeting = model.Meeting.by_id(self.session, 8)
self.assertNotEqual(meeting, None)
self.assertEqual(meeting.meeting_name, 'Another test meeting2')
self.assertEqual(meeting.recursion_ends, date.today())
@@ -399,7 +413,7 @@ class Fedocallibtests(Modeltests):
""" Test the delete_recursive_meeting for past end_datefunction.
"""
self.__setup_meeting()
- meeting = model.Meeting.by_id(self.session, 3)
+ meeting = model.Meeting.by_id(self.session, 4)
self.assertNotEqual(meeting, None)
self.assertEqual(meeting.meeting_name, 'test-meeting3')
self.assertEqual(meeting.recursion_ends,
@@ -407,7 +421,7 @@ class Fedocallibtests(Modeltests):
fedocallib.delete_recursive_meeting(self.session, meeting)
- meeting = model.Meeting.by_id(self.session, 3)
+ meeting = model.Meeting.by_id(self.session, 4)
self.assertNotEqual(meeting, None)
self.assertEqual(meeting.meeting_name, 'test-meeting3')
self.assertEqual(meeting.recursion_ends,
@@ -502,7 +516,7 @@ class Fedocallibtests(Modeltests):
calendar = vobject.iCalendar()
self.__setup_meeting()
meetings = fedocallib.get_future_single_meeting_of_user(
- self.session, 'pingou', TODAY)
+ self.session, 'pingou,', TODAY)
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 3)
@@ -513,7 +527,7 @@ class Fedocallibtests(Modeltests):
'Fedora-fr-test-meeting', 'Test meeting with reminder',
'test-meeting2'])
self.assertTrue(event.organizer.value in [
- 'pingou', 'pingou, shaiton'])
+ 'pingou,', 'pingou, shaiton,'])
cnt = cnt + 1
self.assertEqual(cnt, len(meetings))
@@ -529,7 +543,7 @@ class Fedocallibtests(Modeltests):
for meeting in meetings:
self.assertTrue(meeting.meeting_name in ['test-meeting2',
'Another test meeting', 'Test meeting with reminder'])
- self.assertEqual(meeting.meeting_manager, 'pingou')
+ self.assertEqual(meeting.meeting_manager, 'pingou,')
# pylint: disable=C0103
def test_get_meetings_by_date_and_region(self):
@@ -546,7 +560,7 @@ class Fedocallibtests(Modeltests):
self.assertNotEqual(obj, None)
self.assertEqual(len(obj), 1)
self.assertEqual(obj[0].meeting_name, 'test-meeting-st-2')
- self.assertEqual(obj[0].meeting_manager, 'test')
+ self.assertEqual(obj[0].meeting_manager, 'test,')
self.assertEqual(obj[0].calendar.calendar_name, 'test_calendar4')
self.assertEqual(obj[0].meeting_information,
'This is a second test meeting at the same time')
@@ -562,7 +576,7 @@ class Fedocallibtests(Modeltests):
self.assertNotEqual(obj, None)
self.assertEqual(len(obj), 1)
self.assertEqual(obj[0].meeting_name, 'test-meeting-st-1')
- self.assertEqual(obj[0].meeting_manager, 'test')
+ self.assertEqual(obj[0].meeting_manager, 'test,')
self.assertEqual(obj[0].calendar.calendar_name, 'test_calendar4')
self.assertEqual(obj[0].meeting_information,
'This is a test meeting at the same time')
@@ -815,14 +829,29 @@ class Fedocallibtests(Modeltests):
'Information', 'EMEA', 'Europe/Paris',
7, date.today() + timedelta(days=28),
'H-12', 'test(a)example.org')
- meeting = model.Meeting.by_id(self.session, 8)
+ meeting = model.Meeting.by_id(self.session, 9)
self.assertNotEqual(meeting, None)
self.assertEqual(meeting.meeting_name, 'Name')
self.assertEqual(meeting.meeting_manager, 'username,pingou')
self.assertEqual(meeting.meeting_information, 'Information')
self.assertEqual(meeting.meeting_region, 'EMEA')
self.assertEqual(meeting.recursion_frequency, 7)
- self.assertEqual(meeting.reminder, None)
+ self.assertEqual(meeting.reminder.reminder_offset, 'H-12')
+ self.assertEqual(meeting.reminder.reminder_to, 'test(a)example.org')
+
+ fedocallib.add_meeting(
+ self.session, calendarobj, fasuser,
+ 'Name23h59', date.today() + timedelta(days=1),
+ 23, 24, None,
+ 'Information', 'EMEA', 'Europe/Paris',
+ None, None,
+ None, None)
+ meeting = model.Meeting.by_id(self.session, 10)
+ self.assertNotEqual(meeting, None)
+ self.assertEqual(meeting.meeting_name, 'Name23h59')
+ self.assertEqual(meeting.meeting_manager, 'username,')
+ self.assertEqual(meeting.meeting_information, 'Information')
+ self.assertEqual(meeting.meeting_time_stop.minute, 59)
if __name__ == '__main__':
SUITE = unittest.TestLoader().loadTestsFromTestCase(Fedocallibtests)
diff --git a/fedocal/tests/test_flask.py b/fedocal/tests/test_flask.py
index 3d49716..0438a9d 100644
--- a/fedocal/tests/test_flask.py
+++ b/fedocal/tests/test_flask.py
@@ -147,14 +147,14 @@ 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'), 6)
- self.assertEqual(output.data.count('END:VEVENT'), 6)
+ self.assertEqual(output.data.count('BEGIN:VEVENT'), 7)
+ self.assertEqual(output.data.count('END:VEVENT'), 7)
def test_view_meeting(self):
""" Test the view_meeting function. """
self.__setup_db()
- output = self.app.get('/meeting/4/')
+ output = self.app.get('/meeting/5/')
self.assertEqual(output.status_code, 200)
self.assertTrue('<title> test-meeting-st-1 - Fedocal</title>' \
in output.data)
@@ -167,7 +167,7 @@ class Flasktests(Modeltests):
""" Test the view_meeting_page function. """
self.__setup_db()
- output = self.app.get('/meeting/4/1/')
+ output = self.app.get('/meeting/5/1/')
self.assertEqual(output.status_code, 200)
self.assertTrue('<title> test-meeting-st-1 - Fedocal</title>' \
in output.data)
@@ -176,7 +176,7 @@ class Flasktests(Modeltests):
self.assertTrue('This is a test meeting at the same time' in
output.data)
- output = self.app.get('/meeting/4/0/')
+ output = self.app.get('/meeting/5/0/')
self.assertEqual(output.status_code, 200)
self.assertTrue('<title> test-meeting-st-1 - Fedocal</title>' \
not in output.data)
diff --git a/fedocal/tests/test_flask_api.py b/fedocal/tests/test_flask_api.py
index 6f43542..3849214 100644
--- a/fedocal/tests/test_flask_api.py
+++ b/fedocal/tests/test_flask_api.py
@@ -94,10 +94,10 @@ class FlaskApitests(Modeltests):
output = self.app.get('/api/date/test_calendar/')
self.assertEqual(output.status_code, 200)
self.assertTrue('"retrieval": "ok"' in output.data)
- self.assertTrue(' "meeting_manager": "pingou, shaiton",' in \
+ 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'), 6)
+ self.assertEqual(output.data.count('meeting_name'), 7)
output = self.app.get('/api/date/test_calendar4/')
self.assertEqual(output.status_code, 200)
@@ -121,7 +121,7 @@ class FlaskApitests(Modeltests):
end_date))
self.assertEqual(output.status_code, 200)
self.assertTrue('"retrieval": "ok"' in output.data)
- self.assertTrue(' "meeting_manager": "pingou, shaiton",' in \
+ self.assertTrue(' "meeting_manager": "pingou, shaiton,",' in \
output.data)
self.assertTrue('"meeting_name": "Another test meeting2",' in \
output.data)
diff --git a/fedocal/tests/test_meeting.py b/fedocal/tests/test_meeting.py
index aab8422..0fa6fe2 100644
--- a/fedocal/tests/test_meeting.py
+++ b/fedocal/tests/test_meeting.py
@@ -58,7 +58,7 @@ class Meetingtests(Modeltests):
caltest.test_init_calendar()
obj = model.Meeting(
meeting_name='Fedora-fr-test-meeting',
- meeting_manager='pingou, shaiton',
+ meeting_manager='pingou, shaiton,',
meeting_date=TODAY,
meeting_date_end=TODAY,
meeting_time_start=time(19, 00),
@@ -71,7 +71,7 @@ class Meetingtests(Modeltests):
obj = model.Meeting(
meeting_name='test-meeting2',
- meeting_manager='pingou',
+ meeting_manager='pingou,',
meeting_date=TODAY + timedelta(days=10),
meeting_date_end=TODAY + timedelta(days=10),
meeting_time_start=time(14, 00),
@@ -82,10 +82,23 @@ class Meetingtests(Modeltests):
self.session.commit()
self.assertNotEqual(obj, None)
+ obj = model.Meeting(
+ meeting_name='test-meeting23h59',
+ meeting_manager='pingou23h,',
+ meeting_date=TODAY + timedelta(days=20),
+ meeting_date_end=TODAY + timedelta(days=20),
+ meeting_time_start=time(23, 00),
+ meeting_time_stop=time(23, 59),
+ meeting_information='This is another test meeting',
+ calendar_name='test_calendar')
+ obj.save(self.session)
+ self.session.commit()
+ self.assertNotEqual(obj, None)
+
# Meeting with end_recursion in the past
obj = model.Meeting(
meeting_name='test-meeting3',
- meeting_manager='test2',
+ meeting_manager='test2,',
meeting_date=TODAY - timedelta(days=16),
meeting_date_end=TODAY - timedelta(days=16),
meeting_time_start=time(14, 00),
@@ -101,7 +114,7 @@ class Meetingtests(Modeltests):
# Two meetings at the same time
obj = model.Meeting(
meeting_name='test-meeting-st-1',
- meeting_manager='test',
+ meeting_manager='test,',
meeting_date=TODAY + timedelta(days=1),
meeting_date_end=TODAY + timedelta(days=1),
meeting_time_start=time(14, 00),
@@ -115,7 +128,7 @@ class Meetingtests(Modeltests):
obj = model.Meeting(
meeting_name='test-meeting-st-2',
- meeting_manager='test',
+ meeting_manager='test,',
meeting_date=TODAY + timedelta(days=1),
meeting_date_end=TODAY + timedelta(days=1),
meeting_time_start=time(14, 00),
@@ -131,7 +144,7 @@ class Meetingtests(Modeltests):
# Meeting with a recursion
obj = model.Meeting(
meeting_name='Another test meeting',
- meeting_manager='pingou',
+ meeting_manager='pingou,',
meeting_date=TODAY + timedelta(days=10),
meeting_date_end=TODAY + timedelta(days=10),
meeting_time_start=time(2, 00),
@@ -143,7 +156,7 @@ class Meetingtests(Modeltests):
obj.save(self.session)
obj = model.Meeting(
meeting_name='Another test meeting2',
- meeting_manager='pingou',
+ meeting_manager='pingou,',
meeting_date=TODAY,
meeting_date_end=TODAY,
meeting_time_start=time(12, 00),
@@ -163,7 +176,7 @@ class Meetingtests(Modeltests):
self.session.flush()
obj = model.Meeting(
meeting_name='Test meeting with reminder',
- meeting_manager='pingou',
+ meeting_manager='pingou,',
meeting_date=TODAY + timedelta(days=11),
meeting_date_end=TODAY + timedelta(days=11),
meeting_time_start=time(11, 00),
@@ -183,7 +196,7 @@ class Meetingtests(Modeltests):
self.session.flush()
obj = model.Meeting(
meeting_name='Test meeting with reminder and recursion',
- meeting_manager='pingou',
+ meeting_manager='pingou,',
meeting_date=TODAY + timedelta(days=12),
meeting_date_end=TODAY + timedelta(days=12),
meeting_time_start=time(10, 00),
@@ -272,7 +285,7 @@ class Meetingtests(Modeltests):
obj = model.Meeting.by_id(self.session, 1)
self.assertNotEqual(obj, None)
self.assertEqual(obj.meeting_name, 'Fedora-fr-test-meeting')
- self.assertEqual(obj.meeting_manager, 'pingou, shaiton')
+ self.assertEqual(obj.meeting_manager, 'pingou, shaiton,')
self.assertEqual(obj.calendar.calendar_name, 'test_calendar')
self.assertEqual(obj.calendar.calendar_description,
'This is a test calendar')
@@ -284,7 +297,7 @@ class Meetingtests(Modeltests):
obj = model.Meeting.by_id(self.session, 1)
exp = u'{\n '\
'"meeting_name": "Fedora-fr-test-meeting",\n '\
- '"meeting_manager": "pingou, shaiton",\n '\
+ '"meeting_manager": "pingou, shaiton,",\n '\
'"meeting_date": "%s",\n '\
'"meeting_date_end": "%s",\n '\
'"meeting_time_start": "19:00:00",\n '\
@@ -307,14 +320,14 @@ class Meetingtests(Modeltests):
self.assertNotEqual(obj, None)
self.assertEqual(len(obj), 2)
self.assertEqual(obj[0].meeting_name, 'Fedora-fr-test-meeting')
- self.assertEqual(obj[0].meeting_manager, 'pingou, shaiton')
+ self.assertEqual(obj[0].meeting_manager, 'pingou, shaiton,')
self.assertEqual(obj[0].calendar.calendar_name, 'test_calendar')
self.assertEqual(obj[0].meeting_information,
'This is a test meeting')
self.assertEqual(obj[0].reminder, None)
self.assertEqual(obj[1].meeting_name, 'Another test meeting2')
- self.assertEqual(obj[1].meeting_manager, 'pingou')
+ self.assertEqual(obj[1].meeting_manager, 'pingou,')
self.assertEqual(obj[1].calendar.calendar_name, 'test_calendar')
self.assertEqual(obj[1].meeting_information,
'This is a test meeting with recursion2')
@@ -340,7 +353,7 @@ class Meetingtests(Modeltests):
self.assertNotEqual(obj, None)
self.assertEqual(len(obj), 1)
self.assertEqual(obj[0].meeting_name, 'test-meeting-st-2')
- self.assertEqual(obj[0].meeting_manager, 'test')
+ self.assertEqual(obj[0].meeting_manager, 'test,')
self.assertEqual(obj[0].calendar.calendar_name, 'test_calendar4')
self.assertEqual(obj[0].meeting_information,
'This is a second test meeting at the same time')
@@ -351,7 +364,7 @@ class Meetingtests(Modeltests):
self.assertNotEqual(obj, None)
self.assertEqual(len(obj), 1)
self.assertEqual(obj[0].meeting_name, 'test-meeting-st-1')
- self.assertEqual(obj[0].meeting_manager, 'test')
+ self.assertEqual(obj[0].meeting_manager, 'test,')
self.assertEqual(obj[0].calendar.calendar_name, 'test_calendar4')
self.assertEqual(obj[0].meeting_information,
'This is a test meeting at the same time')
@@ -412,7 +425,7 @@ class Meetingtests(Modeltests):
""" Test the Meeting get_past_meeting_of_user function. """
self.test_init_meeting()
meetings = model.Meeting.get_past_meeting_of_user(self.session,
- 'pingou', TODAY + timedelta(days=1))
+ 'pingou,', TODAY + timedelta(days=1))
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 2)
self.assertEqual(meetings[1].meeting_name,
@@ -421,7 +434,7 @@ class Meetingtests(Modeltests):
'Fedora-fr-test-meeting')
meetings = model.Meeting.get_past_meeting_of_user(self.session,
- 'shaiton', TODAY + timedelta(days=1))
+ 'shaiton,', TODAY + timedelta(days=1))
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 1)
self.assertEqual(meetings[0].meeting_name,
@@ -450,7 +463,7 @@ class Meetingtests(Modeltests):
"""
self.test_init_meeting()
meetings = model.Meeting.get_future_single_meeting_of_user(
- self.session, 'pingou', TODAY)
+ self.session, 'pingou,', TODAY)
self.assertNotEqual(meetings, None)
self.assertEqual(len(meetings), 3)
self.assertEqual(meetings[0].meeting_name,
diff --git a/fedocal/tests/test_week.py b/fedocal/tests/test_week.py
index f736f24..74afb83 100644
--- a/fedocal/tests/test_week.py
+++ b/fedocal/tests/test_week.py
@@ -95,7 +95,7 @@ class Weektests(Modeltests):
self.assertEqual(weekobj.meetings[0].meeting_name,
'Fedora-fr-test-meeting')
self.assertEqual(weekobj.meetings[0].meeting_manager,
- 'pingou, shaiton')
+ 'pingou, shaiton,')
self.assertEqual(weekobj.meetings[0].calendar.calendar_name,
'test_calendar')
self.assertEqual(weekobj.meetings[0].calendar.calendar_description,
@@ -107,7 +107,7 @@ class Weektests(Modeltests):
self.assertEqual(weekobj.meetings[1].meeting_name,
'Another test meeting2')
self.assertEqual(weekobj.meetings[1].meeting_manager,
- 'pingou')
+ 'pingou,')
self.assertEqual(weekobj.meetings[1].meeting_information,
'This is a test meeting with recursion2')
10 years, 6 months
[fedocal] master: Improve a little bit the documentation on database change using alembic (b8fa059)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit b8fa05929cdc5036ae8976f546b64fd4b37c12d6
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Wed Nov 14 16:51:57 2012 +0100
Improve a little bit the documentation on database change using alembic
With this change we don't need to go to the alembic website for basic
database change or to find the right command to make a database
revision.
>---------------------------------------------------------------
doc/development.rst | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/doc/development.rst b/doc/development.rst
index 6c33ee6..f87f37f 100644
--- a/doc/development.rst
+++ b/doc/development.rst
@@ -135,5 +135,16 @@ handled via `alembic <http://pypi.python.org/pypi/alembic>`_.
See the `alembic tutorial
-<http://alembic.readthedocs.org/en/latest/tutorial.html>`_ for more information
-on how to make a revision to the database schema.
+<http://alembic.readthedocs.org/en/latest/tutorial.html>`_ for complete
+information on how to make a revision to the database schema.
+
+
+The basic idea is to create a revision using (in the top folder):
+
+::
+ alembic revision -m "<description of the change>"
+
+Then edit the file generated in alembic/versions/ to add the correct command
+for upgrade and downgrade (for example: ``op.add_column``, ``op.drop_column``,
+``op.create_table``, ``op.drop_table``).
+
10 years, 6 months
[fedocal] master: Small formatting changes in the alembic revision files (7374650)
by Pierre-YvesChibon
Repository : http://git.fedorahosted.org/cgit/fedocal.git
On branch : master
>---------------------------------------------------------------
commit 7374650ce6f9ba731d641248d4dc069caeb26704
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Wed Nov 14 16:49:01 2012 +0100
Small formatting changes in the alembic revision files
>---------------------------------------------------------------
.../versions/2c5c36431061_add_the_meeting_date.py | 2 +-
.../versions/45d83da297e8_add_calendar_contact.py | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/alembic/versions/2c5c36431061_add_the_meeting_date.py b/alembic/versions/2c5c36431061_add_the_meeting_date.py
index 747cc6f..6be8c4f 100644
--- a/alembic/versions/2c5c36431061_add_the_meeting_date.py
+++ b/alembic/versions/2c5c36431061_add_the_meeting_date.py
@@ -18,7 +18,7 @@ from datetime import datetime
def upgrade():
''' Add the meeting_date_end column to the meetings table '''
op.add_column('meetings', sa.Column('meeting_date_end', sa.Date,
- default=datetime.utcnow().date()))
+ default=datetime.utcnow().date()))
def downgrade():
diff --git a/alembic/versions/45d83da297e8_add_calendar_contact.py b/alembic/versions/45d83da297e8_add_calendar_contact.py
index e8d156a..50946f1 100644
--- a/alembic/versions/45d83da297e8_add_calendar_contact.py
+++ b/alembic/versions/45d83da297e8_add_calendar_contact.py
@@ -16,7 +16,8 @@ import sqlalchemy as sa
def upgrade():
""" Add the calendar_contact field to the calendar table. """
- op.add_column('calendars', sa.Column('calendar_contact', sa.String(80)))
+ op.add_column('calendars', sa.Column('calendar_contact',
+ sa.String(80)))
def downgrade():
10 years, 6 months