Merge lp:~daker/loco-team-portal/fix.960695.events-app2 into lp:loco-team-portal

Proposed by Adnane Belmadiaf
Status: Merged
Approved by: Chris Johnston
Approved revision: 540
Merged at revision: 540
Proposed branch: lp:~daker/loco-team-portal/fix.960695.events-app2
Merge into: lp:loco-team-portal
Diff against target: 1008 lines (+142/-127)
5 files modified
loco_directory/events/forms.py (+26/-22)
loco_directory/events/models.py (+23/-16)
loco_directory/events/tests.py (+2/-8)
loco_directory/events/urls.py (+4/-4)
loco_directory/events/views.py (+87/-77)
To merge this branch: bzr merge lp:~daker/loco-team-portal/fix.960695.events-app2
Reviewer Review Type Date Requested Status
Chris Johnston Approve
Review via email: mp+112916@code.launchpad.net

Commit message

Fixed the events app to passe pylint checkers

To post a comment you must log in.
Revision history for this message
Chris Johnston (cjohnston) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'loco_directory/events/forms.py'
2--- loco_directory/events/forms.py 2012-06-10 19:08:39 +0000
3+++ loco_directory/events/forms.py 2012-06-30 22:47:18 +0000
4@@ -9,10 +9,10 @@
5 from common.forms import RenderableMixin
6 from userprofiles.models import UserProfile
7
8-import pytz
9 import itertools
10 import datetime
11
12+
13 def grouped_user_list(teams):
14 other_members, team_members = [], []
15 for profile in UserProfile.objects.filter(user__groups__name__in=[t.lp_name for t in teams]):
16@@ -24,16 +24,18 @@
17 (_('Team members'), team_members),
18 (_('Other users'), other_members)]
19
20+
21 def validate_tag(tag):
22 if tag.startswith('#'):
23 tag = tag[1:]
24- for delim in [ " ", ",", "#" ]:
25+ for delim in [" ", ",", "#"]:
26 if delim in tag:
27 raise forms.ValidationError(_(u'Please just set one tag.'))
28 return tag
29
30+
31 class BaseEventForm(forms.ModelForm, RenderableMixin):
32- """
33+ """
34 a form to create/update a BaseEvent
35 """
36 class Meta:
37@@ -44,7 +46,7 @@
38 css = {'all': (
39 '/media/jquery-ui/css/css/smoothness/jquery-ui.css',
40 '/media/jquery-ui-timepicker/css/ui-lightness/ui.timepickr.css',
41- '/media/css/colortip-1.0-jquery.css',
42+ '/media/css/colortip-1.0-jquery.css',
43 )}
44 js = (
45 '/media/jquery/jquery.js',
46@@ -54,12 +56,12 @@
47 '/media/js/colortip-1.0-jquery.js',
48 '/media/js/events-ui.js',
49 )
50-
51+
52 def __init__(self, *args, **kargs):
53 super(BaseEventForm, self).__init__(*args, **kargs)
54 self.fields['date_begin'].widget = forms.SplitDateTimeWidget()
55 self.fields['date_end'].widget = forms.SplitDateTimeWidget()
56-
57+
58 def clean(self):
59 begin = self.cleaned_data.get('date_begin')
60 end = self.cleaned_data.get('date_end')
61@@ -67,14 +69,15 @@
62 raise forms.ValidationError("Events can not end before they start.")
63 return self.cleaned_data
64
65+
66 class TeamEventForm(BaseEventForm):
67- """
68+ """
69 a form to create/update a TeamEvent
70 """
71 class Meta(BaseEventForm.Meta):
72 model = TeamEvent
73 exclude = ('teams', 'date_created')
74-
75+
76 def __init__(self, teams=[], *args, **kargs):
77 super(TeamEventForm, self).__init__(*args, **kargs)
78 self.teams = teams
79@@ -86,7 +89,7 @@
80 self.fields['global_event'].choices.insert(0, ('', '---------'))
81 self.initial['date_begin'] = self.instance.local_date_begin
82 self.initial['date_end'] = self.instance.local_date_end
83-
84+
85 def clean(self):
86 venue = self.cleaned_data.get('venue')
87 if venue is not None:
88@@ -102,7 +105,7 @@
89 self.cleaned_data['date_begin'] = self.teams[0].fromlocaltime(begin)
90 self.cleaned_data['date_end'] = self.teams[0].fromlocaltime(end)
91 return self.cleaned_data
92-
93+
94 def grouped_venue_list(self):
95 """
96 Returns a list of venues grouped by country
97@@ -129,7 +132,7 @@
98 venues_team = Venue.objects.filter(country__team__in=self.teams).order_by('country', 'spr', 'city')
99 venues_other = Venue.objects.all().exclude(country__team__in=self.teams).order_by('country', 'spr', 'city')
100 venues = itertools.chain(venues_team, venues_other)
101-
102+
103 # Ordered by country so we can tell when we're done with one
104 # and starting another
105 for venue in venues:
106@@ -146,26 +149,26 @@
107 # Add venue to the current country group
108 country_choices.append((venue.id, str(venue)))
109
110-
111 # Add the last country group to the list if it's non-empty
112 if len(country_choices) > 0:
113 venue_choices.append((current_country, country_choices))
114-
115+
116 return venue_choices
117-
118-
119+
120+
121 class GlobalEventForm(BaseEventForm):
122- """
123+ """
124 a form to create/update a GlobalEvent
125 """
126 class Meta(BaseEventForm.Meta):
127 model = GlobalEvent
128
129- def clean(self):
130+ def clean(self):
131 self.cleaned_data['microbloghashtag'] = validate_tag(self.cleaned_data['microbloghashtag'])
132 self.cleaned_data['pictag'] = validate_tag(self.cleaned_data['pictag'])
133 return self.cleaned_data
134
135+
136 class AttendeeRegistrationForm(forms.ModelForm, RenderableMixin):
137 """
138 a form to create/update an Attendee object
139@@ -179,6 +182,7 @@
140 model = Attendee
141 exclude = ('attendee_profile', 'team_event')
142
143+
144 class TeamEventCommentForm(forms.ModelForm, RenderableMixin):
145 """
146 a form to comment a team event
147@@ -189,13 +193,14 @@
148
149 class Media:
150 css = {'all': (
151- '/media/css/colortip-1.0-jquery.css',
152+ '/media/css/colortip-1.0-jquery.css',
153 )}
154 js = (
155 '/media/jquery/jquery.js',
156 '/media/js/colortip-1.0-jquery.js',
157 )
158
159+
160 class FilterHistoryList(forms.Form):
161 """
162 a form to filter event history list
163@@ -206,14 +211,14 @@
164 scope = forms.ChoiceField(choices)
165
166 now = datetime.datetime.now().strftime("%Y-%m")
167- filtering = forms.CharField(required=False, initial=now)
168+ filtering = forms.CharField(required=False, initial=now)
169
170 class Media:
171 css = {'all': (
172 '/media/jquery-ui/css/css/smoothness/jquery-ui.css',
173 '/media/jquery-ui-timepicker/css/ui-lightness/ui.timepickr.css',
174- '/media/css/colortip-1.0-jquery.css',
175- '/media/css/newstyle.css',
176+ '/media/css/colortip-1.0-jquery.css',
177+ '/media/css/newstyle.css',
178 )}
179 js = (
180 '/media/jquery/jquery.js',
181@@ -223,4 +228,3 @@
182 '/media/js/colortip-1.0-jquery.js',
183 '/media/js/events-ui.js',
184 )
185-
186
187=== modified file 'loco_directory/events/models.py'
188--- loco_directory/events/models.py 2012-06-20 10:32:02 +0000
189+++ loco_directory/events/models.py 2012-06-30 22:47:18 +0000
190@@ -15,6 +15,7 @@
191 import pytz
192 import datetime
193
194+
195 class BaseEvent(models.Model):
196 """
197 a simple basic event
198@@ -28,7 +29,7 @@
199
200 def __unicode__(self):
201 return self.name
202-
203+
204 def as_ical(self, cal):
205 """
206 return a event as ical
207@@ -44,12 +45,13 @@
208 def is_past(self):
209 return self.date_end > datetime.datetime.today()
210
211+
212 class GlobalEventManager(models.Manager):
213 """ manager for a global event """
214 def next_events(self):
215 """ a list with all upcoming global events """
216 return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')
217-
218+
219 def history_events(self):
220 """ all global events in history """
221 return self.filter(date_end__lt=datetime.datetime.now()).order_by('date_end')
222@@ -62,6 +64,7 @@
223 """ return the last 5 active Team events for this global event"""
224 return TeamEvent.objects.filter(global_event__id__exact=self.id).order_by('?')[5:]
225
226+
227 class GlobalEvent(BaseEvent):
228 """
229 a global event. other events can attend to a global event
230@@ -70,7 +73,7 @@
231 pictag = models.CharField(max_length=50, help_text=_('tag used in web albums like; picasa, flickr, and more'), verbose_name=_('Picture Tag'), null=True, blank=True)
232 channel = models.CharField(help_text=_('Channel for the Event hosted on the freenode IRC network. Ex. #ubuntu-locoteams'), max_length=25, verbose_name=_('Event Channel'), blank=True, null=True)
233 activities = models.TextField(help_text=_('Activities to do during the Event'), blank=True, null=True)
234-
235+
236 objects = GlobalEventManager()
237
238 def __unicode__(self):
239@@ -79,23 +82,24 @@
240 @models.permalink
241 def get_absolute_url(self):
242 return ('global-event-detail', [str(self.id)])
243-
244+
245 def get_participating(self):
246 attendees = 0
247 for attendee in Attendee.objects.filter(team_event__global_event=self, promise='sure'):
248 attendees += attendee.guests + 1
249 locos = len(Team.objects.filter(teamevent__global_event=self).distinct())
250 countries = len(Country.objects.filter(team__teamevent__global_event=self).distinct())
251- return _('%(attendees)d people from %(locos)d LoCos and %(countries)d countries are participating in this event!' % {'attendees': attendees,
252- 'locos': locos,
253+ return _('%(attendees)d people from %(locos)d LoCos and %(countries)d countries are participating in this event!' % {'attendees': attendees,
254+ 'locos': locos,
255 'countries': countries})
256
257+
258 class TeamEventManager(models.Manager):
259 """ manager for a team event """
260 def next_3_events(self):
261 """ a list with the next 3 events """
262 return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:3]
263-
264+
265 def next_5_events(self):
266 """ a list with the next 5 events """
267 return self.filter(date_end__gt=datetime.datetime.now()).order_by('date_end')[:5]
268@@ -113,10 +117,11 @@
269
270 def random_5_attendees(self):
271 return Attendee.objects.filter(event__id__exact=self.id).order_by('?')[5:]
272-
273+
274 def has_location(self):
275 return self.filter(venue__longitude__isnull=False, venue__latitude__isnull=False)
276
277+
278 class TeamEvent(BaseEvent, LocalTimeMixin):
279 """
280 a event of one or more teams
281@@ -125,7 +130,7 @@
282 contact = models.ForeignKey(UserProfile, verbose_name=_('Event Contact'), null=True, help_text=_('Contact person for this event.'))
283 global_event = models.ForeignKey(GlobalEvent, help_text=_('this team event is part of the selected global event'), verbose_name=_('Related Global Event'), blank=True, null=True)
284 venue = models.ForeignKey(Venue, help_text=_('Venue for the Event'), verbose_name=_('Event Venue'), blank=True, null=True)
285- channel = models.CharField(help_text=_('Channel for the Event hosted on the freenode IRC network. Ex. #ubuntu-us-fl'), max_length=25, verbose_name=_('Event Channel'), blank=True, null=True)
286+ channel = models.CharField(help_text=_('Channel for the Event hosted on the freenode IRC network. Ex. #ubuntu-us-fl'), max_length=25, verbose_name=_('Event Channel'), blank=True, null=True)
287 registration = models.URLField(verbose_name=_('Registration URL'), help_text=_('URL to register attendance (leave blank to use the built-in registration system)'), max_length=200, verify_exists=False, blank=True, null=True)
288 template = 'events/team_event_li.inc.html'
289
290@@ -151,19 +156,20 @@
291 return timezone
292 tz = property(get_tz)
293
294-
295 def get_local_begin(self):
296 return self.tolocaltime(self.date_begin)
297+
298 def set_local_begin(self, local_begin):
299 self.date_begin = self.fromlocaltime(local_begin)
300 local_date_begin = property(get_local_begin)
301
302 def get_local_end(self):
303 return self.tolocaltime(self.date_end)
304+
305 def set_local_end(self, local_end):
306 self.date_end = self.fromlocaltime(local_end)
307 local_date_end = property(get_local_end, set_local_end)
308-
309+
310 def attending(self):
311 return self.attendee_set.filter(promise__exact='sure')
312
313@@ -178,7 +184,7 @@
314 return self.teams.all()[0]
315 except:
316 print 'Event %s has no team' % self.id
317- return {'lp_name':'no-team'}
318+ return {'lp_name': 'no-team'}
319
320 def is_attending(self, user):
321 if user.is_authenticated():
322@@ -206,7 +212,7 @@
323 date_created = models.DateTimeField(help_text=_('Comment date and time'), default=datetime.datetime.now(), db_index=True)
324 commenter_profile = models.ForeignKey(UserProfile, null=True)
325 comment = models.TextField(help_text=_('Enter your comment for this event.'), db_index=True)
326-
327+
328 def __unicode__(self):
329 return "Team Event: %s . Comment: %s" % (self.team_event.name, self.comment)
330
331@@ -215,6 +221,7 @@
332 return self.team_event.venue.tolocaltime(self.date_created)
333 else:
334 return self.date_created
335+
336 def set_local_created(self, local_created):
337 if self.team_event.venue:
338 self.date_created = self.team_event.venue.fromlocaltime(local_created)
339@@ -222,11 +229,12 @@
340 self.date_created = local_created
341 local_date_created = property(get_local_created, set_local_created)
342
343+
344 class Attendee(models.Model):
345 """
346 a event attendee
347 """
348-
349+
350 team_event = models.ForeignKey(TeamEvent, help_text=_('the Team Event'))
351 attendee_profile = models.ForeignKey(UserProfile, help_text=_('the name of the attendee'), null=True)
352 promise = models.CharField(verbose_name=_('Attending Status'), max_length=50, choices=ATTENDEE_PROMISE_CHOICES)
353@@ -234,7 +242,6 @@
354
355 class Meta:
356 unique_together = ('team_event', 'attendee_profile')
357-
358+
359 def __unicode__(self):
360 return self.attendee_profile.user.username
361-
362
363=== modified file 'loco_directory/events/tests.py'
364--- loco_directory/events/tests.py 2011-07-17 18:11:38 +0000
365+++ loco_directory/events/tests.py 2012-06-30 22:47:18 +0000
366@@ -18,20 +18,17 @@
367 def setUp(self):
368 # setup country record for testing
369 self.country = Country.objects.create(name='Test Country')
370-
371 # setup team record for testing
372 self.team = Team.objects.create(
373 lp_name='test-team',
374 name='Test Team',
375 )
376 self.team.countries.add(self.country)
377-
378 # setup venue record for testing
379 self.venue = Venue.objects.create(
380 name='Test Venue',
381 country=self.country,
382 )
383-
384 # setup event record for testing
385 self.event = TeamEvent.objects.create(
386 name='Test Event',
387@@ -40,7 +37,6 @@
388 venue=self.venue,
389 )
390 self.event.teams.add(self.team)
391-
392 # setup user record for testing
393 self.team_group = Group.objects.create(
394 name=self.team.lp_name,
395@@ -51,11 +47,10 @@
396 self.user.set_password('test')
397 self.user.groups.add(self.team_group)
398 self.user.save()
399-
400
401 def test_large_guest_validation(self):
402 'Validate the guests size and show friendly error message when too big'
403-
404+
405 # register attendence form data
406 path = '/events/%s/%s/register/' % (self.team.lp_name, self.event.id)
407 data = {
408@@ -64,12 +59,11 @@
409 }
410 # login so we're not redirected when posting the form data
411 self.client.login(username='testuser', password='test')
412-
413 # post the form data
414 response = self.client.post(path, data)
415
416 # should get a 200 if the integer size is caught by form validation
417 self.assertEquals(response.status_code, 200)
418-
419+
420 # check that the user friendly error message exists in the response
421 self.assertContains(response, 'Ensure this value is less than or equal to 100.')
422
423=== modified file 'loco_directory/events/urls.py'
424--- loco_directory/events/urls.py 2012-04-14 22:10:09 +0000
425+++ loco_directory/events/urls.py 2012-06-30 22:47:18 +0000
426@@ -1,14 +1,14 @@
427 from django.conf.urls.defaults import *
428
429 urlpatterns = patterns('',
430- #all events
431+ #all events
432 url(r'^$', 'events.views.event_list', name='event-list'),
433 url(r'^history/$', 'events.views.event_history_list', name='event-history-list'),
434
435 #special events
436 url(r'^globaljam/$', 'events.views.global_jam', name='global-jam-dashboard'),
437 url(r'^globaljam/dashboard/$', 'events.views.global_jam_dashboard', name='global-jam'),
438-
439+
440 #global events
441 url(r'^global/ical/$', 'events.views.global_event_list_ical', name='global-event-list-ical'),
442 url(r'^global/(?P<global_event_id>\d+)/detail/$', 'events.views.global_event_detail', name='global-event-detail'),
443@@ -16,7 +16,7 @@
444 url(r'^global/(?P<global_event_id>\d+)/update/$', 'events.views.global_event_update', name='global-event-update'),
445 url(r'^global/(?P<global_event_id>\d+)/locations/$', 'events.views.global_event_locations', name='global-event-locations'),
446 url(r'^global/add/$', 'events.views.global_event_new', name='global-event-new'),
447-
448+
449 #team events
450 url(r'^locations/$', 'events.views.team_event_locations', name='team-event-locations'),
451 url(r'^ical/$', 'events.views.teams_event_list_ical', name='teams-event-list-ical'),
452@@ -30,7 +30,7 @@
453 url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/rss/$', 'events.views.team_events_rss', name='team-events-rss'),
454 url(r'^(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/ical/$', 'events.views.team_event_list_ical', name='team-event-list-ical'),
455 url(r'^add/$', 'events.views.team_event_select', name='team-event-select'),
456-
457+
458 # Old url notations
459 url(r'^team/locations/$', 'events.views.team_event_locations'),
460 url(r'^team/ical/$', 'events.views.teams_event_list_ical'),
461
462=== modified file 'loco_directory/events/views.py'
463--- loco_directory/events/views.py 2012-06-30 19:19:08 +0000
464+++ loco_directory/events/views.py 2012-06-30 22:47:18 +0000
465@@ -5,7 +5,6 @@
466 from django.contrib.auth.decorators import login_required
467 from django.utils import simplejson
468 from django.utils.translation import ugettext as _
469-from django.core.urlresolvers import reverse
470 from django.db.models import Count
471
472 from events.models import TeamEvent
473@@ -19,14 +18,13 @@
474 from forms import AttendeeRegistrationForm
475 from forms import FilterHistoryList
476
477-from django.db.models import Q
478-
479 from common.utils import redirect, simple_iterator
480 from common import launchpad
481
482 import datetime
483 import vobject
484
485+
486 def event_list(request):
487 """
488 a list with all events (teamevents and globalevents)
489@@ -37,11 +35,12 @@
490 context = {
491 'team_event_list': team_event_list,
492 'global_event_list': global_event_list,
493- 'user_is_on_lc': is_on_lc,
494+ 'user_is_on_lc': is_on_lc,
495 }
496 return render_to_response('events/event_list.html', context,
497 RequestContext(request))
498
499+
500 def event_list_ical(events, name):
501 """Return any list events as an ical"""
502 filename = "%s.ics" % name.replace(' ', '-').lower()
503@@ -57,9 +56,10 @@
504 for event in events:
505 event.as_ical(calendar)
506 response.write(calendar.serialize())
507-
508+
509 return response
510
511+
512 def event_ical(request, team_slug, team_event_id):
513 """
514 Return a ical list with a single events in ical format.
515@@ -67,6 +67,7 @@
516 team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
517 return event_list_ical([team_event_object], team_event_object.name)
518
519+
520 def team_event_list_ical(request, team_slug):
521 """
522 Return a ical list with a single team events in ical format.
523@@ -75,18 +76,21 @@
524 team_events = TeamEvent.objects.filter(teams__lp_name=team_slug)
525 return event_list_ical(team_events, team.name)
526
527+
528 def teams_event_list_ical(request):
529 """
530 Return a ical list with team events in ical format.
531 """
532 return event_list_ical(TeamEvent.objects.all(), 'All Ubuntu LoCo Team Events')
533
534+
535 def global_event_list_ical(request):
536 """
537 Return a ical list with global events in ical format.
538 """
539 return event_list_ical(GlobalEvent.objects.all(), 'Ubuntu Global Events')
540
541+
542 def event_history_list(request):
543 """
544 a list with all historical events (teamevents and globalevents)
545@@ -102,14 +106,13 @@
546 scope = form.cleaned_data['scope']
547
548 if u'my' in scope:
549- filtering_date = datetime.datetime.strptime(filtering,"%Y-%m")
550+ filtering_date = datetime.datetime.strptime(filtering, "%Y-%m")
551
552 team_event_list = TeamEvent.objects.history_events().filter(date_begin__year=filtering_date.year, date_begin__month=filtering_date.month)
553 elif u'y' in scope:
554- filtering_date = datetime.datetime.strptime(filtering,"%Y-%m")
555+ filtering_date = datetime.datetime.strptime(filtering, "%Y-%m")
556
557 team_event_list = TeamEvent.objects.history_events().filter(date_begin__year=filtering_date.year)
558-
559 else:
560 team_event_list = TeamEvent.objects.history_events().select_related('global_event', 'venue')
561
562@@ -127,10 +130,10 @@
563 return render_to_response('events/event_history_list.html', context,
564 RequestContext(request))
565
566+
567 #################################################################
568 # Team Events
569 #################################################################
570-
571 def team_event_detail(request, team_slug, team_event_id):
572 """
573 detailed view for a team event
574@@ -141,7 +144,7 @@
575 is_member = is_member or launchpad.is_team_member(request.user, team_object)
576
577 if request.user.is_authenticated():
578- if request.method == 'POST':
579+ if request.method == 'POST':
580 form = TeamEventCommentForm(data=request.POST)
581 if form.is_valid():
582 team_event_comment = form.save(commit=False)
583@@ -151,7 +154,7 @@
584 team_event_comment.commenter_profile = profile
585 team_event_comment.save()
586 request.user.message_set.create(message=_('Comment saved.'))
587- return redirect( team_event_object )
588+ return redirect(team_event_object)
589 else:
590 form = TeamEventCommentForm()
591 else:
592@@ -163,16 +166,17 @@
593 'user_is_team_member': is_member,
594 'form': form,
595 }
596- return render_to_response('events/team_event_detail.html',
597+ return render_to_response('events/team_event_detail.html',
598 context, RequestContext(request))
599
600+
601 @login_required
602 def team_event_delete(request, team_slug, team_event_id):
603 """
604 delete a event
605 """
606 team_event_object = get_object_or_404(TeamEvent, pk=team_event_id)
607-
608+
609 is_on_lc = launchpad.is_user_on_loco_council(request.user)
610 #check if user is admin or owner of a team
611 is_contact = False
612@@ -182,24 +186,25 @@
613 break
614
615 if is_on_lc or is_contact:
616- if request.method == 'POST':
617+ if request.method == 'POST':
618 team_event_object.delete()
619 request.user.message_set.create(message=_('Team Event removed.'))
620- return redirect( 'event-list' )
621+ return redirect('event-list')
622 else:
623 context = {'team_event_object': team_event_object}
624 return render_to_response('events/team_event_delete_confirm.html', context, RequestContext(request))
625
626 else:
627 request.user.message_set.create(message='%s %s' % (_('You can not remove this team event.'), _('You are not an admin/owner of the Launchpad team or on the LoCo Council.')))
628- return redirect( team_event_object )
629+ return redirect(team_event_object)
630+
631
632 @login_required
633 def team_event_select(request):
634 teams = Team.objects.filter(lp_name__in=[g.name for g in request.user.groups.all()])
635 if len(teams) == 0:
636 request.user.message_set.create(message='%s %s' % (_('You can not add a new team event.'), _('You are not a member of any LoCo Teams.')))
637- return redirect( 'event-list' )
638+ return redirect('event-list')
639 elif len(teams) == 1:
640 from django.core import urlresolvers
641 url = urlresolvers.reverse('team-event-new', args=[teams[0].lp_name])
642@@ -211,38 +216,40 @@
643 context = {'teams': teams, 'global_event_id': request.GET.get('global_event_id', None)}
644 return render_to_response('events/team_event_new_select.html', context, RequestContext(request))
645
646+
647 def team_events_rss(request, team_slug):
648 team_object = get_object_or_404(Team, lp_name=team_slug)
649 events = TeamEvent.objects.filter(teams__lp_name=team_slug, date_end__gt=datetime.datetime.now()).order_by('date_begin')[:15]
650-
651+
652 if request.META.has_key('wsgi.url_scheme'):
653 scheme = request.META.get('wsgi.url_scheme')
654 else:
655 scheme = 'http'
656-
657+
658 if request.META.has_key('HTTP_HOST'):
659 host = request.META.get('HTTP_HOST')
660 else:
661 host = request.META.get('SERVER_NAME')
662-
663+
664 if request.META.get('SERVER_PORT', 80) == 80 or request.META.get('SERVER_PORT', 80) == 0:
665 base = '%s://%s' % (scheme, host)
666 else:
667 base = '%s://%s:%s' % (scheme, host, request.META.get('SERVER_PORT', 80))
668-
669- context = {'team_object': team_object, 'events': events, 'base':base}
670+
671+ context = {'team_object': team_object, 'events': events, 'base': base}
672 return render_to_response('events/team_events_rss.xml', context, RequestContext(request), mimetype='application/xhtml+xml')
673
674+
675 @login_required
676 def team_event_new(request, team_slug):
677 """
678 new team event
679 """
680 team_object = get_object_or_404(Team, lp_name=team_slug)
681-
682+
683 is_on_lc = launchpad.is_user_on_loco_council(request.user)
684 is_member = launchpad.is_team_member(request.user, team_object)
685-
686+
687 if is_on_lc or is_member:
688 global_event = None
689 if request.method == 'POST':
690@@ -250,37 +257,36 @@
691 if form.is_valid():
692 team_event = form.save()
693 team_event.teams.add(team_object)
694- team_event_id = team_event.id
695 return HttpResponseRedirect(team_event.get_absolute_url())
696 else:
697- form = TeamEventForm(initial={'global_event':request.GET.get('global_event_id', None)}, teams=[team_object])
698+ form = TeamEventForm(initial={'global_event': request.GET.get('global_event_id', None)}, teams=[team_object])
699 if request.GET.has_key('global_event_id'):
700 global_event = get_object_or_404(GlobalEvent, pk=request.GET.get('global_event_id'))
701-
702 context = {
703 'team_object': team_object,
704 'form': form,
705 'global_event': global_event,
706 }
707- return render_to_response('events/team_event_new.html',
708+ return render_to_response('events/team_event_new.html',
709 context, RequestContext(request))
710 else:
711 # XXX: Once we move to a new ACL system, this needs fixing.
712 request.user.message_set.create(message='%s %s' % (_('You can not add a new event for this team.'), _('You are not a member of the team or on the LoCo Council.')))
713- return redirect( team_object )
714+ return redirect(team_object)
715+
716
717 @login_required
718 def team_event_copy(request, team_slug, team_event_id):
719 """
720 new team event
721 """
722-
723+
724 team_event = get_object_or_404(TeamEvent, pk=team_event_id)
725 team_object = team_event.teams.all()[0]
726
727 is_on_lc = launchpad.is_user_on_loco_council(request.user)
728 is_member = launchpad.is_team_member(request.user, team_object)
729-
730+
731 if is_on_lc or is_member:
732 if request.method == 'POST':
733 form = TeamEventForm(instance=team_event, data=request.POST, teams=team_event.teams.all())
734@@ -288,21 +294,20 @@
735 if form.is_valid():
736 team_event = form.save()
737 team_event.teams.add(team_object)
738- team_event_id = team_event.id
739 return HttpResponseRedirect(team_event.get_absolute_url())
740 else:
741 form = TeamEventForm(instance=team_event, teams=team_event.teams.all())
742-
743 context = {
744 'team_object': team_object,
745 'form': form,
746 }
747- return render_to_response('events/team_event_new.html',
748+ return render_to_response('events/team_event_new.html',
749 context, RequestContext(request))
750 else:
751 # XXX: Once we move to a new ACL system, this needs fixing.
752 request.user.message_set.create(message='%s %s' % (_('You can not add a new event for this team.'), _('You are not a member of the team or on the LoCo Council.')))
753- return redirect( team_object )
754+ return redirect(team_object)
755+
756
757 @login_required
758 def team_event_update(request, team_slug, team_event_id):
759@@ -316,27 +321,28 @@
760 if launchpad.is_team_member(request.user, team):
761 is_member = True
762 break
763-
764+
765 is_on_lc = launchpad.is_user_on_loco_council(request.user)
766-
767+
768 if is_on_lc or is_member:
769- if request.method == 'POST':
770+ if request.method == 'POST':
771 form = TeamEventForm(data=request.POST, instance=team_event_object, teams=team_event_object.teams.all())
772 if form.is_valid():
773 form.save()
774 request.user.message_set.create(message=_('Team Event updated.'))
775- return redirect( team_event_object )
776+ return redirect(team_event_object)
777 else:
778 form = TeamEventForm(instance=team_event_object, teams=team_event_object.teams.all())
779-
780+
781 context = {
782 'form': form,
783 }
784- return render_to_response('events/team_event_update.html',
785+ return render_to_response('events/team_event_update.html',
786 context, RequestContext(request))
787 else:
788 request.user.message_set.create(message='%s %s' % (_('You can not update this team event.'), _('You are not a member of the team or on the LoCo Council.')))
789- return redirect( team_event_object )
790+ return redirect(team_event_object)
791+
792
793 @login_required
794 def team_event_register(request, team_slug, team_event_id):
795@@ -350,33 +356,32 @@
796 from userprofiles.models import create_profile
797 profile = create_profile(request.user.username)
798 attendee_object = Attendee(team_event=team_event_object, attendee_profile=profile)
799-
800- if request.method == 'POST':
801+
802+ if request.method == 'POST':
803 form = AttendeeRegistrationForm(instance=attendee_object, data=request.POST)
804 if form.is_valid():
805 form.save()
806 request.user.message_set.create(message=_('Your registration has been saved.'))
807- return redirect( team_event_object )
808+ return redirect(team_event_object)
809 else:
810- form = AttendeeRegistrationForm(instance=attendee_object, initial={'guests':0})
811+ form = AttendeeRegistrationForm(instance=attendee_object, initial={'guests': 0})
812
813 is_past_event = False
814 if team_event_object.date_end < datetime.datetime.now():
815- is_past_event = True
816-
817+ is_past_event = True
818+
819 context = {
820 'form': form,
821 'is_past_event': is_past_event,
822 }
823
824- return render_to_response('events/team_event_register.html',
825+ return render_to_response('events/team_event_register.html',
826 context, RequestContext(request))
827
828
829 #################################################################
830 # Global Events
831 #################################################################
832-
833 def global_event_detail(request, global_event_id):
834 """
835 detailed view for a global event
836@@ -387,7 +392,6 @@
837 is_on_lc = launchpad.is_user_on_loco_council(request.user)
838
839 events_without_venue = global_event_object.teamevent_set.filter(venue__isnull=True)
840- events_without_continent = global_event_object.teamevent_set.filter(venue__country__continents__isnull=True)
841 country_ids = [a.venue.country.id for a in global_event_object.teamevent_set.filter(venue__isnull=False,
842 venue__country__continents__isnull=False)]
843 country_without_continents_ids = [a.venue.country.id \
844@@ -406,35 +410,37 @@
845 'global_event_object': global_event_object,
846 'add_team_event': add_team_event,
847 'events_without_venue': events_without_venue,
848- 'user_is_on_lc': is_on_lc,
849+ 'user_is_on_lc': is_on_lc,
850 'continents': continents,
851 'countries': countries,
852 'countries_without_continents': countries_without_continents,
853- 'colcycle' : simple_iterator('col_left', 'col_right'),
854+ 'colcycle': simple_iterator('col_left', 'col_right'),
855 }
856- return render_to_response('events/global_event_detail.html',
857+ return render_to_response('events/global_event_detail.html',
858 context, RequestContext(request))
859
860+
861 @login_required
862 def global_event_delete(request, global_event_id):
863 """
864 delete a event
865 """
866 global_event_object = get_object_or_404(GlobalEvent, pk=global_event_id)
867-
868+
869 is_on_lc = launchpad.is_user_on_loco_council(request.user)
870-
871+
872 if is_on_lc:
873- if request.method == 'POST':
874+ if request.method == 'POST':
875 global_event_object.delete()
876 request.user.message_set.create(message=_('Global Event removed.'))
877- return redirect( 'event-list' )
878+ return redirect('event-list')
879 else:
880 context = {'global_event_object': global_event_object}
881 return render_to_response('events/global_event_delete_confirm.html', context, RequestContext(request))
882 else:
883 request.user.message_set.create(message='%s %s' % (_('You can not remove this global event.'), _('You are not on the LoCo Council.')))
884- return redirect( global_event_object )
885+ return redirect(global_event_object)
886+
887
888 @login_required
889 def global_event_new(request,):
890@@ -443,23 +449,24 @@
891 """
892 is_on_lc = launchpad.is_user_on_loco_council(request.user)
893 if is_on_lc:
894- if request.method == 'POST':
895+ if request.method == 'POST':
896 form = GlobalEventForm(data=request.POST)
897 if form.is_valid():
898 form.save()
899 request.user.message_set.create(message=_('New Global Event created.'))
900- return redirect( 'event-list' )
901+ return redirect('event-list')
902 else:
903 form = GlobalEventForm()
904-
905+
906 context = {
907 'form': form,
908 }
909- return render_to_response('events/global_event_new.html',
910+ return render_to_response('events/global_event_new.html',
911 context, RequestContext(request))
912 else:
913 request.user.message_set.create(message='%s %s' % (_('You can not add a new global event.'), _('You are not on the LoCo Council.')))
914- return redirect( 'event-list' )
915+ return redirect('event-list')
916+
917
918 @login_required
919 def global_event_update(request, global_event_id):
920@@ -467,26 +474,27 @@
921 update global event
922 """
923 global_event_object = get_object_or_404(GlobalEvent, pk=global_event_id)
924-
925+
926 is_on_lc = launchpad.is_user_on_loco_council(request.user)
927 if is_on_lc:
928- if request.method == 'POST':
929+ if request.method == 'POST':
930 form = GlobalEventForm(data=request.POST, instance=global_event_object)
931 if form.is_valid():
932 form.save()
933 request.user.message_set.create(message=_('Global Event updated.'))
934- return redirect( global_event_object )
935+ return redirect(global_event_object)
936 else:
937 form = GlobalEventForm(instance=global_event_object)
938-
939+
940 context = {
941 'form': form,
942 }
943- return render_to_response('events/global_event_update.html',
944+ return render_to_response('events/global_event_update.html',
945 context, RequestContext(request))
946 else:
947 request.user.message_set.create(message='%s %s' % (_('You can not update this global event.'), _('You are not on the LoCo Council.')))
948- return redirect( global_event_object )
949+ return redirect(global_event_object)
950+
951
952 def team_event_locations(request):
953 """
954@@ -501,8 +509,8 @@
955 if event.venue is None:
956 continue
957 location['content'] = '<p>Location: <a href="%s">%s</a></p><p>Start date: %s</p><p>End date: %s</p>' % (event.get_absolute_url(),
958- event.venue.name,
959- str(event.date_begin),
960+ event.venue.name,
961+ str(event.date_begin),
962 str(event.date_end))
963 location['lng'] = event.venue.longitude
964 location['lat'] = event.venue.latitude
965@@ -511,7 +519,8 @@
966 json = simplejson.dumps(locations)
967
968 return HttpResponse(json)
969-
970+
971+
972 def global_event_locations(request, global_event_id):
973 """
974 the longitude and latitude global event
975@@ -524,8 +533,8 @@
976 location['title'] = event.name
977 # TODO: create an separate view with template for the content
978 location['content'] = '<p>Location: <a href="%s">%s</a></p><p>Start date: %s</p><p>End date: %s</p>' % (event.get_absolute_url(),
979- event.venue.name,
980- str(event.date_begin),
981+ event.venue.name,
982+ str(event.date_begin),
983 str(event.date_end))
984 location['lng'] = event.venue.longitude
985 location['lat'] = event.venue.latitude
986@@ -534,7 +543,8 @@
987 json = simplejson.dumps(locations)
988
989 return HttpResponse(json)
990-
991+
992+
993 def global_jam(request):
994 try:
995 global_event_object = GlobalEvent.objects.filter(name='Ubuntu Global Jam').order_by('-date_begin')[0]
996@@ -542,6 +552,7 @@
997 raise Http404
998 return global_event_detail(request, global_event_object.id)
999
1000+
1001 def global_jam_dashboard(request):
1002 try:
1003 global_event_object = GlobalEvent.objects.filter(name='Ubuntu Global Jam').order_by('-date_begin')[0]
1004@@ -552,4 +563,3 @@
1005 'global_event_object': global_event_object,
1006 }
1007 return render_to_response('events/global_jam_dashboard.html', context, RequestContext(request))
1008-

Subscribers

People subscribed via source and target branches