Skip to content

Commit

Permalink
all changes
Browse files Browse the repository at this point in the history
  • Loading branch information
envycontent committed Jan 14, 2015
2 parents d1694f7 + 2cb6639 commit a8f2a84
Show file tree
Hide file tree
Showing 27 changed files with 666 additions and 17 deletions.
9 changes: 6 additions & 3 deletions fabfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def local():
env.remote_install_dir = '/srv/talks/talks.vm'
env.remote_git_checkout = '/srv/talks/talks.ox'
env.requirements = ['requirements.txt']
env.secrets_dir = '/etc/puppet/secrets/talks-dev.oucs.ox.ac.uk'

@task
def staging():
Expand All @@ -37,6 +38,7 @@ def staging():
env.remote_install_dir = '/srv/talks/talks-dev.oucs.ox.ac.uk'
env.remote_git_checkout = '/srv/talks/talks.ox'
env.requirements = ['requirements.txt']
env.secrets_dir = '/etc/puppet/secrets/talks-dev.oucs.ox.ac.uk'


"""
Expand All @@ -55,8 +57,10 @@ def deploy(version):
with prefix('source %s' % os.path.join(versioned_path, 'bin', 'activate')):
install_dir = prepare(versioned_path)
install(install_dir)
run('rm -f %s' % env.remote_install_dir)
run('ln -s %s %s' % (versioned_path, env.remote_install_dir))
run('rm %s/secrets.py' % install_dir)
run('ln -s %s/secrets.py %s/secrets.py' % (env.secrets_dir, install_dir))
run('rm -f %s' % env.remote_install_dir)
run('ln -s %s %s' % (versioned_path, env.remote_install_dir))
run('touch %s' % os.path.join(env.remote_install_dir, 'talks', 'wsgi.py'))


Expand All @@ -76,7 +80,6 @@ def install(install_dir):
run('python manage.py syncdb --settings=%s' % env.settings_module)
run('python manage.py collectstatic --noinput --settings=%s' % env.settings_module)


"""
Private methods
"""
Expand Down
12 changes: 12 additions & 0 deletions talks/events/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django.apps import AppConfig

default_app_config = 'talks.events.EventsConfig'


class EventsConfig(AppConfig):
name = 'talks.events'
verbose_name = "Events"

def ready(self):
super(EventsConfig, self).ready()
import talks.events.signals
2 changes: 1 addition & 1 deletion talks/events/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ def save(self):

def clean(self):
if not self.cleaned_data['title'] and not self.cleaned_data['title_not_announced']:
raise forms.ValidationError("Either provide title or mark it as not announced")
raise forms.ValidationError("Either provide the Title or mark it as TBA")
return self.cleaned_data

def _update_people(self, field, event, role):
Expand Down
199 changes: 199 additions & 0 deletions talks/events/migrations/0001_squashed_0009_merge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

replaces = [(b'events', '0001_initial'), (b'events', '0002_speaker_email_address'), (b'events', '0003_eventgroup_group_type'), (b'events', '0004_auto_20140715_1013'), (b'events', '0005_auto_20140716_1432'), (b'events', '0006_auto_20141028_1132'), (b'events', '0007_auto_20141028_1746'), (b'events', '0008_auto_20141029_1234'), (b'events', '0006_auto_20141027_1754'), (b'events', '0007_merge'), (b'events', '0009_merge')]

dependencies = [
('contenttypes', '__first__'),
('api_ox', '__first__'),
]

operations = [
migrations.CreateModel(
name='EventGroup',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=250)),
('slug', models.SlugField()),
('description', models.TextField()),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Speaker',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=250)),
('slug', models.SlugField()),
('bio', models.TextField()),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Event',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('start', models.DateTimeField(null=True, blank=True)),
('end', models.DateTimeField(null=True, blank=True)),
('title', models.CharField(max_length=250)),
('slug', models.SlugField()),
('description', models.TextField()),
('group', models.ForeignKey(to_field='id', blank=True, to='events.EventGroup', null=True)),
('location', models.ForeignKey(to_field='id', blank=True, to='api_ox.Location', null=True)),
('department_organiser', models.ForeignKey(to_field='id', blank=True, to='api_ox.Organisation', null=True)),
('speakers', models.ManyToManyField(to=b'events.Speaker', null=True, blank=True)),
],
options={
},
bases=(models.Model,),
),
migrations.AddField(
model_name='speaker',
name='email_address',
field=models.EmailField(default='example@example.com', max_length=254),
preserve_default=False,
),
migrations.AddField(
model_name='eventgroup',
name='group_type',
field=models.CharField(blank=True, max_length=2, null=True, choices=[(b'SE', b'Seminar Series'), (b'CO', b'Conference')]),
preserve_default=True,
),
migrations.CreateModel(
name='Topic',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(unique=True, max_length=250)),
('uri', models.URLField(unique=True, db_index=True)),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='TopicItem',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('object_id', models.PositiveIntegerField()),
('content_type', models.ForeignKey(to='contenttypes.ContentType')),
('topic', models.ForeignKey(to='events.Topic')),
],
options={
},
bases=(models.Model,),
),
migrations.AlterField(
model_name='topic',
name='name',
field=models.CharField(max_length=250),
),
migrations.CreateModel(
name='PersonEvent',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('affiliation', models.TextField(blank=True)),
('role', models.TextField(default=b'speaker', choices=[(b'speaker', b'Speaker'), (b'host', b'Host'), (b'organizer', b'Organizer')])),
('url', models.URLField(blank=True)),
('event', models.ForeignKey(to='events.Event')),
],
options={
},
bases=(models.Model,),
),
migrations.RenameModel(
old_name='Speaker',
new_name='Person',
),
migrations.AddField(
model_name='personevent',
name='person',
field=models.ForeignKey(to='events.Person'),
preserve_default=True,
),
migrations.RunSQL(
sql="INSERT INTO events_personevent (event_id, person_id, affiliation, role, url) SELECT event_id, person_id, '', 'speaker', '' FROM events_event_speakers;",
reverse_sql=None,
state_operations=None,
),
migrations.RemoveField(
model_name='event',
name='speakers',
),
migrations.AddField(
model_name='event',
name='person_set',
field=models.ManyToManyField(to=b'events.Person', through='events.PersonEvent', blank=True),
preserve_default=True,
),
migrations.AlterField(
model_name='event',
name='group',
field=models.ForeignKey(related_name=b'events', blank=True, to='events.EventGroup', null=True),
),
migrations.AddField(
model_name='event',
name='audience',
field=models.TextField(default=b'oxonly', verbose_name=b'Who can attend', choices=[(b'public', b'Public'), (b'oxonly', b'Members of the University only')]),
preserve_default=True,
),
migrations.AddField(
model_name='event',
name='booking_type',
field=models.TextField(default=b'nr', verbose_name=b'Booking required', choices=[(b'nr', b'Not required'), (b're', b'Required'), (b'rc', b'Recommended')]),
preserve_default=True,
),
migrations.AddField(
model_name='event',
name='booking_url',
field=models.URLField(default=b'', verbose_name=b'Web address for booking', blank=True),
preserve_default=True,
),
migrations.AddField(
model_name='event',
name='cost',
field=models.TextField(default=b'', help_text=b'If applicable', verbose_name=b'Cost', blank=True),
preserve_default=True,
),
migrations.AddField(
model_name='event',
name='special_message',
field=models.TextField(default=b'', help_text=b'Use this for important notices - e.g.: cancellation or a last minute change of venue.', verbose_name=b'Special message', blank=True),
preserve_default=True,
),
migrations.AddField(
model_name='event',
name='title_not_announced',
field=models.BooleanField(default=False, verbose_name=b'Title to be announced'),
preserve_default=True,
),
migrations.AlterField(
model_name='event',
name='description',
field=models.TextField(blank=True),
),
migrations.AlterField(
model_name='event',
name='title',
field=models.CharField(max_length=250, blank=True),
),
migrations.AddField(
model_name='event',
name='location_details',
field=models.TextField(default=b'', help_text=b'e.g.: room number or accessibility information', verbose_name=b'Additional details', blank=True),
preserve_default=True,
),
migrations.AlterField(
model_name='event',
name='group',
field=models.ForeignKey(related_name=b'events', blank=True, to='events.EventGroup', null=True),
),
]
19 changes: 19 additions & 0 deletions talks/events/migrations/0006_auto_20141027_1754.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('events', '0005_auto_20140716_1432'),
]

operations = [
migrations.AlterField(
model_name='event',
name='group',
field=models.ForeignKey(related_name=b'events', blank=True, to='events.EventGroup', null=True),
),
]
15 changes: 15 additions & 0 deletions talks/events/migrations/0007_merge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('events', '0006_auto_20141028_1132'),
('events', '0006_auto_20141027_1754'),
]

operations = [
]
15 changes: 15 additions & 0 deletions talks/events/migrations/0009_merge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('events', '0007_merge'),
('events', '0008_auto_20141029_1234'),
]

operations = [
]
5 changes: 5 additions & 0 deletions talks/events/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,11 @@ def __unicode__(self):
def get_absolute_url(self):
return reverse('show-person', args=[self.slug])

@property
def surname(self):
# Attempt to extract the surname as the last word of the name. This will be used for sorting on
return self.name.split(' ')[-1]

@property
def speaker_events(self):
events = Event.published.filter(personevent__role=ROLES_SPEAKER,
Expand Down
7 changes: 7 additions & 0 deletions talks/events/signals.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.dispatch import Signal

# signal used when an Event has been created or updated
event_updated = Signal(providing_args=['instance'])

# signal used when an EventGroup has been created or updated
eventgroup_updated = Signal(providing_args=['instance'])
10 changes: 5 additions & 5 deletions talks/events/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def test_title_blank(self):
errors = form.errors.as_data()
logging.info("form errors: %s", errors)
self.assertIn('__all__', form.errors)
self.assertIn("Either provide title or mark it as not announced", form.errors['__all__'])
self.assertIn("Either provide the Title or mark it as TBA", form.errors['__all__'])
self.assertNotIn('title', form.errors)
self.assertNotIn('title_not_announced', form.errors)

Expand All @@ -135,7 +135,7 @@ def test_title_not_announced_false(self):
form = forms.EventForm(data)
errors = form.errors.as_data()
logging.info("form errors: %s", errors)
self.assertNotIn("Either provide title or mark it as not announced", form.errors.get('__all__', []))
self.assertNotIn("Either provide the Title or mark it as TBA", form.errors.get('__all__', []))
self.assertNotIn('title', form.errors)
self.assertNotIn('title_not_announced', form.errors)

Expand All @@ -147,7 +147,7 @@ def test_title_not_announced_true_title_not_blank(self):
form = forms.EventForm(data)
errors = form.errors.as_data()
logging.info("form errors: %s", errors)
self.assertNotIn("Either provide title or mark it as not announced", form.errors.get('__all__', []))
self.assertNotIn("Either provide the Title or mark it as TBA", form.errors.get('__all__', []))
self.assertNotIn('title', form.errors)
self.assertNotIn('title_not_announced', form.errors)

Expand All @@ -159,7 +159,7 @@ def test_title_not_announced_true_title_blank(self):
form = forms.EventForm(data)
errors = form.errors.as_data()
logging.info("form errors: %s", errors)
self.assertNotIn("Either provide title or mark it as not announced", form.errors.get('__all__', []))
self.assertNotIn("Either provide the Title or mark it as TBA", form.errors.get('__all__', []))
self.assertNotIn('title', form.errors)
self.assertNotIn('title_not_announced', form.errors)

Expand Down Expand Up @@ -364,7 +364,7 @@ def test_get_happy_no_group_id(self):
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'events/event_form.html')
self.assertContains(response, "Oxford Talks")
self.assertContains(response, "Add Talk")
self.assertContains(response, "New Talk")
self.assertIn('event_form', response.context)

def test_get_nonexistent_group(self):
Expand Down

0 comments on commit a8f2a84

Please sign in to comment.