Merge branch 'master' into training

# Conflicts:
#	.idea/dataSources.ids
#	db.sqlite3
This commit is contained in:
Tom Price
2015-11-10 12:18:53 +00:00
9 changed files with 95 additions and 15 deletions

View File

@@ -51,9 +51,11 @@ INSTALLED_APPS = (
'reversion', 'reversion',
'captcha', 'captcha',
'widget_tweaks', 'widget_tweaks',
'raven.contrib.django.raven_compat',
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
'raven.contrib.django.raven_compat.middleware.SentryResponseErrorIdMiddleware',
'reversion.middleware.RevisionMiddleware', 'reversion.middleware.RevisionMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
@@ -138,6 +140,15 @@ LOGGING = {
} }
} }
import raven
RAVEN_CONFIG = {
'dsn': os.environ.get('RAVEN_DSN'),
# If you are using git, you can also automatically configure the
# release based on the git info.
# 'release': raven.fetch_git_sha(os.path.dirname(os.path.dirname(__file__))),
}
# User system # User system
AUTH_USER_MODEL = 'RIGS.Profile' AUTH_USER_MODEL = 'RIGS.Profile'
@@ -148,21 +159,21 @@ LOGOUT_URL = '/user/logout'
ACCOUNT_ACTIVATION_DAYS = 7 ACCOUNT_ACTIVATION_DAYS = 7
# reCAPTCHA settings # reCAPTCHA settings
RECAPTCHA_PUBLIC_KEY = '6Le16gUTAAAAAO5f-6te_x0NjWmF65_h7saBI6Cg' RECAPTCHA_PUBLIC_KEY = os.environ.get('RECAPTCHA_PUBLIC_KEY', None)
RECAPTCHA_PRIVATE_KEY = '6Le16gUTAAAAAByo-ZxRRX3RKyoBngf7ms3dnoEW' RECAPTCHA_PRIVATE_KEY = os.environ.get('RECAPTCHA_PRIVATE_KEY', None)
NOCAPTCHA = True NOCAPTCHA = True
# Email # Email
EMAILER_TEST = False EMAILER_TEST = False
if not DEBUG or EMAILER_TEST: if not DEBUG or EMAILER_TEST:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail.nottinghamtec.co.uk' EMAIL_HOST = os.environ.get('EMAIL_HOST')
EMAIL_PORT = 465 EMAIL_PORT = int(os.environ.get('EMAIL_PORT'))
EMAIL_HOST_USER = 'pyrigs@nottinghamtec.co.uk' EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = 'N_dF9T&dD(Th' EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
EMAIL_USE_TLS = False EMAIL_USE_TLS = bool(int(os.environ.get('EMAIL_USE_TLS', 0)))
EMAIL_USE_SSL = True EMAIL_USE_SSL = bool(int(os.environ.get('EMAIL_USE_SSL', 0)))
DEFAULT_FROM_EMAIL = 'pyrigs@nottinghamtec.co.uk' DEFAULT_FROM_EMAIL = os.environ.get('EMAIL_FROM')
else: else:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

View File

@@ -1,9 +1,10 @@
from django.contrib import admin from django.contrib import admin
from RIGS import models from RIGS import models, forms
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import ugettext_lazy as _
import reversion import reversion
# Register your models here. # Register your models here.
admin.site.register(models.Profile)
admin.site.register(models.Person, reversion.VersionAdmin) admin.site.register(models.Person, reversion.VersionAdmin)
admin.site.register(models.Organisation, reversion.VersionAdmin) admin.site.register(models.Organisation, reversion.VersionAdmin)
admin.site.register(models.VatRate, reversion.VersionAdmin) admin.site.register(models.VatRate, reversion.VersionAdmin)
@@ -11,4 +12,25 @@ admin.site.register(models.Venue, reversion.VersionAdmin)
admin.site.register(models.Event, reversion.VersionAdmin) admin.site.register(models.Event, reversion.VersionAdmin)
admin.site.register(models.EventItem, reversion.VersionAdmin) admin.site.register(models.EventItem, reversion.VersionAdmin)
admin.site.register(models.Invoice) admin.site.register(models.Invoice)
admin.site.register(models.Payment) admin.site.register(models.Payment)
class ProfileAdmin(UserAdmin):
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {
'fields': ('first_name', 'last_name', 'email', 'initials', 'phone')}),
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')}),
(_('Important dates'), {
'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'password1', 'password2'),
}),
)
form = forms.ProfileChangeForm
add_form = forms.ProfileCreationForm
admin.site.register(models.Profile, ProfileAdmin)

View File

@@ -3,7 +3,7 @@ from django import forms
from django.utils import formats from django.utils import formats
from django.conf import settings from django.conf import settings
from django.core import serializers from django.core import serializers
from django.contrib.auth.forms import AuthenticationForm, PasswordResetForm from django.contrib.auth.forms import UserCreationForm, UserChangeForm, AuthenticationForm, PasswordResetForm
from registration.forms import RegistrationFormUniqueEmail from registration.forms import RegistrationFormUniqueEmail
from captcha.fields import ReCaptchaField from captcha.fields import ReCaptchaField
import simplejson import simplejson
@@ -33,6 +33,17 @@ class LoginForm(AuthenticationForm):
class PasswordReset(PasswordResetForm): class PasswordReset(PasswordResetForm):
captcha = ReCaptchaField(label='Captcha') captcha = ReCaptchaField(label='Captcha')
class ProfileCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = models.Profile
class ProfileChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = models.Profile
# Events Shit # Events Shit
class EventForm(forms.ModelForm): class EventForm(forms.ModelForm):
datetime_input_formats = formats.get_format_lazy("DATETIME_INPUT_FORMATS") + settings.DATETIME_INPUT_FORMATS datetime_input_formats = formats.get_format_lazy("DATETIME_INPUT_FORMATS") + settings.DATETIME_INPUT_FORMATS

View File

@@ -57,14 +57,14 @@
$('#is_rig-selector button').on('click', function () { $('#is_rig-selector button').on('click', function () {
$('.form-non_rig').slideDown(); $('.form-non_rig').slideDown();
if ($(this).data('is_rig') == 1) { if ($(this).data('is_rig') == 1) {
$('#{{form.is_rig.auto_id}}').attr('checked', true); $('#{{form.is_rig.auto_id}}').prop('checked', true);
if ($('.form-non_rig').is(':hidden')) { if ($('.form-non_rig').is(':hidden')) {
$('.form-is_rig').show(); $('.form-is_rig').show();
} else { } else {
$('.form-is_rig').slideDown(); $('.form-is_rig').slideDown();
} }
} else { } else {
$('#{{form.is_rig.auto_id}}').attr('checked', false); $('#{{form.is_rig.auto_id}}').prop('checked', false);
$('.form-is_rig').slideUp(); $('.form-is_rig').slideUp();
} }
}) })

View File

@@ -613,7 +613,38 @@ class EventTest(LiveServerTestCase):
event = models.Event.objects.get(name='Test Event Name') event = models.Event.objects.get(name='Test Event Name')
self.assertIn("N0000%d | Test Event Name"%event.pk, self.browser.find_element_by_xpath('//h1').text) self.assertIn("N0000%d | Test Event Name"%event.pk, self.browser.find_element_by_xpath('//h1').text)
def testRigNonRig(self):
self.browser.get(self.live_server_url + '/event/create/')
# Gets redirected to login and back
self.authenticate('/event/create/')
wait = WebDriverWait(self.browser, 10) #setup WebDriverWait to use later (to wait for animations)
self.browser.implicitly_wait(3) #Set session-long wait (only works for non-existant DOM objects)
wait.until(animation_is_finished())
# Click Non-Rig button
self.browser.find_element_by_xpath('//button[.="Non-Rig"]').click()
# Click Rig button
self.browser.find_element_by_xpath('//button[.="Rig"]').click()
form = self.browser.find_element_by_tag_name('form')
save = self.browser.find_element_by_xpath('(//button[@type="submit"])[3]')
# Set title
e = self.browser.find_element_by_id('id_name')
e.send_keys('Test Event Name')
# Set an arbitrary date
form.find_element_by_id('id_start_date').clear()
form.find_element_by_id('id_start_date').send_keys('3015-04-24')
# Save the rig
save.click()
detail_panel = self.browser.find_element_by_xpath("//div[@id='content']/div/div[6]/div/div")
self.assertTrue(detail_panel.is_displayed())
self.assertIn("Event Detail", detail_panel.text)
def testEventDetail(self): def testEventDetail(self):
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():

Binary file not shown.

View File

@@ -17,6 +17,7 @@ Pygments==2.0.2
PyPDF2==1.24 PyPDF2==1.24
python-dateutil==2.4.2 python-dateutil==2.4.2
pytz==2015.4 pytz==2015.4
raven==5.8.1
reportlab==3.1.44 reportlab==3.1.44
selenium==2.46.0 selenium==2.46.0
simplejson==3.7.2 simplejson==3.7.2

View File

@@ -6,5 +6,6 @@
<div class="text-center"> <div class="text-center">
<h1>500: Server error</h1> <h1>500: Server error</h1>
<img src="{% static 'imgs/500.jpg' %}"/> <img src="{% static 'imgs/500.jpg' %}"/>
<p>If you need assistance, you may reference this error as <strong>{{ request.sentry.id }}</strong>.</p>
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -1,4 +1,5 @@
{% load static from staticfiles %} {% load static from staticfiles %}
{% load raven %}
<!DOCTYPE html> <!DOCTYPE html>
@@ -21,6 +22,8 @@
{% endblock %} {% endblock %}
<script src="//code.jquery.com/jquery-latest.min.js"></script> <script src="//code.jquery.com/jquery-latest.min.js"></script>
<script src="https://cdn.ravenjs.com/1.3.0/jquery,native/raven.min.js"></script>
<script>Raven.config('{% sentry_public_dsn %}').install()</script>
{% block preload_js %} {% block preload_js %}
{% endblock %} {% endblock %}