diff --git a/api/resources.py b/api/resources.py
index 5430644f..74fd530f 100755
--- a/api/resources.py
+++ b/api/resources.py
@@ -5,8 +5,9 @@ from tastypie.constants import ALL, ALL_WITH_RELATIONS
from tastypie.resources import ModelResource, Resource, Bundle
from tastypie.utils import trailing_slash
from tastypie.authentication import ApiKeyAuthentication, Authentication
+from tastypie.exceptions import BadRequest
-from django.conf.urls.defaults import url
+from django.conf.urls import url
from django.contrib import auth
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
@@ -135,22 +136,22 @@ class FreeResource(ModelResource):
bundle.data["href"]=reverse('download_ebook',kwargs={'ebook_id':bundle.obj.id})
return bundle
- def obj_get_list(self, request=None, **kwargs):
+ def obj_get_list(self, bundle, **kwargs):
+ request = bundle.request
isbn =""
if hasattr(request, 'GET'):
isbn = request.GET.get("isbn","")
isbn = isbn.replace('-','')
if len(isbn)==10:
isbn=regluit.core.isbn.convert_10_to_13(isbn)
-
try:
work=models.Identifier.objects.get(type='isbn',value=isbn,).work
base_object_list = models.Ebook.objects.filter(edition__work=work)
- return self.apply_authorization_limits(request, base_object_list)
+ return base_object_list
except ValueError:
raise BadRequest("Invalid resource lookup data provided (mismatched type).")
except models.Identifier.DoesNotExist:
- return self.apply_authorization_limits(request, models.Ebook.objects.none())
+ return models.Ebook.objects.none()
class Meta:
authentication = ApiKeyAuthentication()
diff --git a/api/tests.py b/api/tests.py
index 337abe4b..36151424 100755
--- a/api/tests.py
+++ b/api/tests.py
@@ -21,6 +21,7 @@ from regluit.utils.localdatetime import now
from regluit.api import models as apimodels
class ApiTests(TestCase):
+ fixtures = ['initial_data.json']
work_id=None
def setUp(self):
@@ -135,6 +136,13 @@ class ApiTests(TestCase):
})
j = json.loads(r.content)
self.assertEqual(j['objects'][0]['filetype'], 'epub')
+ r = self.client.get('/api/v1/free/', data={
+ 'format': 'xml',
+ 'isbn': '0441007465',
+ 'username': self.user.username,
+ 'api_key': self.user.api_key.key
+ })
+ self.assertTrue(r.content.find('CC BY')>0)
def test_widget(self):
r = self.client.get('/api/widget/0441007465/')
diff --git a/api/urls.py b/api/urls.py
index 5a1d9f4c..2fc59fc5 100644
--- a/api/urls.py
+++ b/api/urls.py
@@ -1,6 +1,6 @@
from tastypie.api import Api
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
from django.views.generic.base import TemplateView
from regluit.api import resources
diff --git a/bisac/urls.py b/bisac/urls.py
index bc388c41..10ba0384 100644
--- a/bisac/urls.py
+++ b/bisac/urls.py
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
urlpatterns = patterns("",
url(r"^tree$", "regluit.bisac.views.tree"),
diff --git a/core/models.py b/core/models.py
index aeb3f035..ccf4ad81 100755
--- a/core/models.py
+++ b/core/models.py
@@ -1751,7 +1751,7 @@ class Edition(models.Model):
publication_date = models.CharField(max_length=50, null=True, blank=True, db_index=True,)
work = models.ForeignKey("Work", related_name="editions", null=True)
cover_image = models.URLField(null=True, blank=True)
- unglued = models.BooleanField(blank=True)
+ unglued = models.BooleanField(default=False)
def __unicode__(self):
if self.isbn_13:
diff --git a/core/tests.py b/core/tests.py
index 25588957..fade89b6 100755
--- a/core/tests.py
+++ b/core/tests.py
@@ -22,6 +22,7 @@ from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.models import Site
from django.core.files import File as DjangoFile
from django.db import IntegrityError
+from django.db import transaction
from django.http import Http404
from django.test import TestCase
from django.test.client import Client
@@ -485,7 +486,7 @@ class SearchTests(TestCase):
class CampaignTests(TestCase):
-
+ fixtures = ['initial_data.json']
def test_b2u(self):
w = Work()
w.save()
@@ -511,15 +512,16 @@ class CampaignTests(TestCase):
def test_required_fields(self):
# a campaign must have a target, deadline and a work
-
- c = Campaign()
- self.assertRaises(IntegrityError, c.save)
-
- c = Campaign(target=D('1000.00'))
- self.assertRaises(IntegrityError, c.save)
-
- c = Campaign(target=D('1000.00'), deadline=datetime(2013, 1, 1))
- self.assertRaises(IntegrityError, c.save)
+ # see http://stackoverflow.com/questions/21458387/transactionmanagementerror-you-cant-execute-queries-until-the-end-of-the-atom
+ with transaction.atomic():
+ c = Campaign()
+ self.assertRaises(IntegrityError, c.save)
+ with transaction.atomic():
+ c = Campaign(target=D('1000.00'))
+ self.assertRaises(IntegrityError, c.save)
+ with transaction.atomic():
+ c = Campaign(target=D('1000.00'), deadline=datetime(2013, 1, 1))
+ self.assertRaises(IntegrityError, c.save)
w = Work()
w.save()
@@ -815,6 +817,7 @@ class WorkTests(TestCase):
class DownloadPageTest(TestCase):
+ fixtures = ['initial_data.json']
def test_download_page(self):
w = models.Work()
w.save()
@@ -902,7 +905,7 @@ class MailingListTests(TestCase):
@override_settings(LOCAL_TEST=True)
class EbookFileTests(TestCase):
-
+ fixtures = ['initial_data.json']
def test_badepub_errors(self):
textfile = NamedTemporaryFile(delete=False)
textfile.write("bad text file")
@@ -1041,7 +1044,7 @@ class MobigenTests(TestCase):
from .signals import handle_transaction_charged
@override_settings(LOCAL_TEST=True)
class LibTests(TestCase):
-
+ fixtures = ['initial_data.json']
class transaction:
pass
diff --git a/deploy/please.wsgi b/deploy/please.wsgi
index bfc2b5bd..3fe5a14c 100644
--- a/deploy/please.wsgi
+++ b/deploy/please.wsgi
@@ -2,8 +2,8 @@
import os
-import django.core.handlers.wsgi
-
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "regluit.settings.please")
os.environ['CELERY_LOADER'] = 'django'
-os.environ['DJANGO_SETTINGS_MODULE'] = 'regluit.settings.please'
-application = django.core.handlers.wsgi.WSGIHandler()
+
+from django.core.wsgi import get_wsgi_application
+application = get_wsgi_application()
\ No newline at end of file
diff --git a/fabfile.py b/fabfile.py
index cb188ca5..7fd56133 100644
--- a/fabfile.py
+++ b/fabfile.py
@@ -95,7 +95,7 @@ def email_addresses():
def selenium():
"""setting up selenium to run in the background on RY's laptop"""
with cd('/Users/raymondyee/D/Document/Gluejar/Gluejar.github/regluit'):
- local("java -jar test/selenium-server-standalone-2.50.0.jar > selenium-rc.log 2>&1 &")
+ local("java -jar test/selenium-server-standalone-2.53.0.jar > selenium-rc.log 2>&1 &")
def test():
"""run regluit tests locally"""
diff --git a/frontend/forms.py b/frontend/forms.py
index fc864bc3..0119f560 100644
--- a/frontend/forms.py
+++ b/frontend/forms.py
@@ -184,7 +184,7 @@ class EditionForm(forms.ModelForm):
class Meta:
model = Edition
- exclude = 'created', 'work'
+ exclude = ('created', 'work')
widgets = {
'title': forms.TextInput(attrs={'size': 40}),
'add_author': forms.TextInput(attrs={'size': 30}),
@@ -269,7 +269,7 @@ def UserClaimForm ( user_instance, *args, **kwargs ):
class Meta:
model = Claim
- exclude = 'status'
+ exclude = ('status',)
widgets = {
'user': forms.HiddenInput,
'work': forms.HiddenInput,
diff --git a/frontend/tests.py b/frontend/tests.py
index 53375b2e..c021fe9f 100755
--- a/frontend/tests.py
+++ b/frontend/tests.py
@@ -211,7 +211,8 @@ class PledgingUiTests(TestCase):
pass
class UnifiedCampaignTests(TestCase):
- fixtures=['basic_campaign_test.json']
+ fixtures=['initial_data.json','basic_campaign_test.json']
+
def test_setup(self):
# testing basics: are there 3 users?
diff --git a/frontend/urls.py b/frontend/urls.py
index adfb555b..047dd029 100644
--- a/frontend/urls.py
+++ b/frontend/urls.py
@@ -1,11 +1,11 @@
from django.conf import settings
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib.auth.decorators import login_required
from django.contrib.sites.models import Site
from django.views.generic import ListView, DetailView
from django.views.generic.base import TemplateView
-from django.views.generic.simple import direct_to_template
+#from django.views.generic.simple import direct_to_template
from django.views.decorators.csrf import csrf_exempt
from regluit.core.feeds import SupporterWishlistFeed
@@ -138,9 +138,9 @@ urlpatterns = patterns(
url(r"^subjects/map/$", login_required(MapSubjectView.as_view()), name="map_subject"),
url(r"^librarything/$", LibraryThingView.as_view(), name="librarything"),
url(r"^librarything/load/$","librarything_load", name="librarything_load"),
- url('^404testing/$', direct_to_template, {'template': '404.html'}),
- url('^500testing/$', direct_to_template, {'template': '500.html'}),
- url('^robots.txt$', direct_to_template, {'template': 'robots.txt', 'mimetype': 'text/plain'}),
+ url('^404testing/$', TemplateView.as_view(template_name='404.html') ),
+ url('^500testing/$', TemplateView.as_view(template_name='500.html')),
+ url('^robots.txt$', TemplateView.as_view(template_name='robots.txt',content_type='text/plain')),
url(r"^emailshare/(?P\w*)/?$", "emailshare", name="emailshare"),
url(r"^feedback/campaign/(?P\d+)/?$", "ask_rh", name="ask_rh"),
url(r"^feedback/$", "feedback", name="feedback"),
@@ -166,7 +166,7 @@ urlpatterns = patterns(
url(r"^accounts/edit/kindle_config/$", "kindle_config", name="kindle_config"),
url(r"^accounts/edit/kindle_config/(?P\d+)/$", "kindle_config", name="kindle_config_download"),
url(r"^send_to_kindle/(?P\d+)/(?P\d)/$", "send_to_kindle", name="send_to_kindle"),
- url(r"^marc/$", direct_to_template, {'template': 'marc.html'}, name="marc"),
+ url(r"^marc/$", TemplateView.as_view(template_name='marc.html'), name="marc"),
url(r"^accounts/edit/marc_config/$", login_required(LibModeView.as_view()), name="marc_config"),
)
diff --git a/frontend/views.py b/frontend/views.py
index 8e67a777..e40e7f89 100755
--- a/frontend/views.py
+++ b/frontend/views.py
@@ -1687,7 +1687,7 @@ class FundCompleteView(TemplateView):
self.transaction.user.wishlist.add_work(work, 'pledging', notify=True)
#put info into session for download page to pick up.
- self.request.session['amount']= self.transaction.amount
+ self.request.session['amount']= int(self.transaction.amount * 100)
if self.transaction.receipt:
self.request.session['receipt']= self.transaction.receipt
@@ -2834,7 +2834,7 @@ def lockss(request, work_id):
ebooks = work.ebooks().filter(edition__unglued=True)
except:
ebooks = None
- authors = list(models.Author.objects.filter(editions__work=work).all())
+ authors = work.authors.all()
return render(request, "lockss.html", {'work':work, 'ebooks':ebooks, 'authors':authors})
@@ -2993,7 +2993,7 @@ class DownloadView(PurchaseView):
'action': "Contribution",
'user_license': self.user_license,
'lib_thanked': self.lib_thanked,
- 'amount': self.request.session.pop('amount') if self.request.session.has_key('amount') else None,
+ 'amount': Decimal(self.request.session.pop('amount')/100) if self.request.session.has_key('amount') else None,
'testmode': self.request.REQUEST.has_key('testmode'),
'source': self.request.REQUEST.get('source', ''),
diff --git a/libraryauth/backends.py b/libraryauth/backends.py
index 56ab57bf..c1f01c4c 100644
--- a/libraryauth/backends.py
+++ b/libraryauth/backends.py
@@ -47,7 +47,7 @@ class ip:
class admin_form(forms.ModelForm):
class Meta:
model = Block
- exclude = "library"
+ exclude = ("library",)
class cardnum:
def authenticate(self,request, library):
@@ -70,7 +70,7 @@ class cardnum:
class admin_form(forms.ModelForm):
class Meta:
model = CardPattern
- exclude = "library"
+ exclude = ("library",)
class form(forms.ModelForm):
credential = forms.RegexField(
@@ -119,4 +119,4 @@ class email:
class admin_form(forms.ModelForm):
class Meta:
model = EmailPattern
- exclude = "library"
+ exclude = ("library",)
diff --git a/libraryauth/tests.py b/libraryauth/tests.py
index 11950d4b..5ec6fa0e 100644
--- a/libraryauth/tests.py
+++ b/libraryauth/tests.py
@@ -4,6 +4,7 @@ from django.test import TestCase
from django.contrib.auth.models import User
class TestLibraryAuth(TestCase):
+ fixtures=['initial_data.json']
def setUp(self):
pass
diff --git a/libraryauth/urls.py b/libraryauth/urls.py
index b56b8bea..abf28e87 100644
--- a/libraryauth/urls.py
+++ b/libraryauth/urls.py
@@ -1,32 +1,46 @@
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
from django.core.urlresolvers import reverse
-from django.views.generic.simple import direct_to_template
+#from django.views.generic.simple import direct_to_template
+from django.views.generic.base import TemplateView
from django.contrib.auth.decorators import login_required
from . import views, models, forms
from .views import superlogin, CustomRegistrationView
+# class to reproduce django 1.4 funtionality
+class ExtraContextTemplateView(TemplateView):
+ extra_context = None
+ def get_context_data(self, **kwargs):
+ context = super(self.__class__, self).get_context_data(**kwargs)
+ if self.extra_context is not None:
+ for key, value in self.extra_context.items():
+ if callable(value):
+ context[key] = value()
+ else:
+ context[key] = value
+ return context
+
urlpatterns = patterns(
"",
url(r"^libraryauth/(?P\d+)/join/$", views.join_library, name="join_library"),
- url(r"^libraryauth/(?P\d+)/deny/$", direct_to_template, {'template':'libraryauth/denied.html'}, name="bad_library"),
+ url(r"^libraryauth/(?P\d+)/deny/$", TemplateView.as_view(template_name='libraryauth/denied.html'), name="bad_library"),
url(r"^libraryauth/(?P\d+)/users/$", views.library, {'template':'libraryauth/users.html'}, name="library_users"),
url(r"^libraryauth/(?P\d+)/admin/$", login_required(views.UpdateLibraryView.as_view()), name="library_admin"),
url(r"^libraryauth/(?P\d+)/login/$", views.login_as_library, name="library_login"),
url(r"^libraryauth/create/$", login_required(views.CreateLibraryView.as_view()), name="library_create"),
- url(r"^libraryauth/list/$", direct_to_template, {
- 'template':'libraryauth/list.html',
- 'extra_context':{'libraries_to_show':'approved'}},
- name="library_list"),
- url(r"^libraryauth/unapproved/$", direct_to_template, {
- 'template':'libraryauth/list.html',
- 'extra_context':{'libraries_to_show':'new'}},
- name="new_libraries"),
+ url(r"^libraryauth/list/$", ExtraContextTemplateView.as_view(
+ template_name='libraryauth/list.html',
+ extra_context={'libraries_to_show':'approved'}
+ ), name="library_list"),
+ url(r"^libraryauth/unapproved/$", ExtraContextTemplateView.as_view(
+ template_name='libraryauth/list.html',
+ extra_context={'libraries_to_show':'new'}
+ ), name="new_libraries"),
url(r'^accounts/register/$', CustomRegistrationView.as_view(), name='registration_register'),
url(r'^accounts/superlogin/$', views.superlogin, name='superlogin'),
- url(r"^accounts/superlogin/welcome/$", direct_to_template,
- {'template': 'registration/welcome.html',
- 'extra_context': {'suppress_search_box': True,}
- }),
+ url(r"^accounts/superlogin/welcome/$", ExtraContextTemplateView.as_view(
+ template_name='registration/welcome.html',
+ extra_context={'suppress_search_box': True,}
+ ) ),
url(r'^accounts/login/pledge/$',superlogin,
{'template_name': 'registration/from_pledge.html'}),
url(r'^accounts/login/purchase/$',superlogin,
@@ -38,10 +52,10 @@ urlpatterns = patterns(
url(r'^accounts/login-error/$',superlogin,
{'template_name': 'registration/from_error.html'}),
url(r'^accounts/edit/$', 'regluit.frontend.views.edit_user'),
- url(r"^accounts/login/welcome/$", direct_to_template, {
- 'template': 'registration/welcome.html',
- 'extra_context': {'suppress_search_box': True,}
- }),
+ url(r"^accounts/login/welcome/$", ExtraContextTemplateView.as_view(
+ template_name='registration/welcome.html',
+ extra_context={'suppress_search_box': True,}
+ ) ),
url(r'^socialauth/', include('social.apps.django_app.urls', namespace='social')),
url('accounts/', include('email_change.urls')),
url(r'^accounts/', include('registration.backends.default.urls')),
diff --git a/manage.py b/manage.py
index ae949585..5a4d701c 100755
--- a/manage.py
+++ b/manage.py
@@ -1,12 +1,10 @@
#!/usr/bin/env python
-from django.core.management import execute_manager
-
-try:
- import settings # Assumed to be in the same directory.
-except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
- sys.exit(1)
+import os
+import sys
if __name__ == "__main__":
- execute_manager(settings)
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "regluit.settings.me")
+
+ from django.core.management import execute_from_command_line
+
+ execute_from_command_line(sys.argv)
diff --git a/marc/urls.py b/marc/urls.py
index b0ecd0b1..565d323f 100644
--- a/marc/urls.py
+++ b/marc/urls.py
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
from django.contrib.auth.decorators import login_required
from . import views
diff --git a/payment/models.py b/payment/models.py
index 88e69ea5..8e953e2e 100644
--- a/payment/models.py
+++ b/payment/models.py
@@ -108,7 +108,7 @@ class Transaction(models.Model):
extra = JSONField(null=True, default={})
# whether the user wants to be not listed publicly
- anonymous = models.BooleanField(null=False)
+ anonymous = models.BooleanField(default=False)
@property
def tier(self):
@@ -254,7 +254,7 @@ class Receiver(models.Model):
status = models.CharField(max_length=64)
local_status = models.CharField(max_length=64, null=True)
reason = models.CharField(max_length=64)
- primary = models.BooleanField()
+ primary = models.BooleanField(default=True)
txn_id = models.CharField(max_length=64)
transaction = models.ForeignKey(Transaction)
diff --git a/payment/tests.py b/payment/tests.py
index 7b3b06a5..07ffaa9a 100644
--- a/payment/tests.py
+++ b/payment/tests.py
@@ -157,7 +157,8 @@ def payAmazonSandbox(sel):
#print "len(payment_confirm)", len(payment_confirm)
#time.sleep(1)
#payment_confirm[-1].click()
-
+
+@unittest.skip("skipping PledgeTest (selenium)")
class PledgeTest(TestCase):
def setUp(self):
@@ -188,7 +189,8 @@ class PledgeTest(TestCase):
def tearDown(self):
self.selenium.quit()
-
+
+@unittest.skip("skipping AuthorizeTest (selenium)")
class AuthorizeTest(TestCase):
def setUp(self):
@@ -262,6 +264,7 @@ class CreditTest(TestCase):
self.assertEqual(self.user1.credit.balance, 0)
self.assertEqual(self.user2.credit.balance, 50)
+@unittest.skip("skipping ExtraTest")
class ExtraTest(TestCase):
def testPledgeExtra(self):
@@ -275,6 +278,7 @@ class ExtraTest(TestCase):
class TransactionTest(TestCase):
+ fixtures=['initial_data.json']
def setUp(self):
"""
"""
@@ -353,31 +357,31 @@ class TransactionTest(TestCase):
self.assertEqual(t.type, EXECUTE_TYPE_CHAINED_INSTANT)
self.assertEqual(t.amount, D('12.34'))
-class BasicGuiTest(TestCase):
- def setUp(self):
- self.verificationErrors = []
- # This is an empty array where we will store any verification errors
- # we find in our tests
+# class BasicGuiTest(TestCase):
+# def setUp(self):
+# self.verificationErrors = []
+# # This is an empty array where we will store any verification errors
+# # we find in our tests
- setup_selenium()
- self.TEST_SERVER_URL = "http://ry-dev.dyndns.org"
- self.selenium = webdriver.Firefox()
- set_test_logging()
- def testFrontPage(self):
- sel = self.selenium
- sel.get(self.TEST_SERVER_URL)
- # if we click on the learn more, does the panel expand?
- # click on a id=readon -- or the Learn More span
- #sel.find_elements_by_css_selector('a#readon')[0].click()
- #time.sleep(2.0)
- # the learn more panel should be displayed
- #self.assertTrue(sel.find_elements_by_css_selector('div#user-block-hide')[0].is_displayed())
- # click on the panel again -- and panel should not be displayed
- #sel.find_elements_by_css_selector('a#readon')[0].click()
- #time.sleep(2.0)
- #self.assertFalse(sel.find_elements_by_css_selector('div#user-block-hide')[0].is_displayed())
- def tearDown(self):
- self.selenium.quit()
+# setup_selenium()
+# self.TEST_SERVER_URL = "http://ry-dev.dyndns.org"
+# self.selenium = webdriver.Firefox()
+# set_test_logging()
+# def testFrontPage(self):
+# sel = self.selenium
+# sel.get(self.TEST_SERVER_URL)
+# # if we click on the learn more, does the panel expand?
+# # click on a id=readon -- or the Learn More span
+# #sel.find_elements_by_css_selector('a#readon')[0].click()
+# #time.sleep(2.0)
+# # the learn more panel should be displayed
+# #self.assertTrue(sel.find_elements_by_css_selector('div#user-block-hide')[0].is_displayed())
+# # click on the panel again -- and panel should not be displayed
+# #sel.find_elements_by_css_selector('a#readon')[0].click()
+# #time.sleep(2.0)
+# #self.assertFalse(sel.find_elements_by_css_selector('div#user-block-hide')[0].is_displayed())
+# def tearDown(self):
+# self.selenium.quit()
class AccountTest(TestCase):
diff --git a/payment/urls.py b/payment/urls.py
index 88181e11..eaddc67b 100644
--- a/payment/urls.py
+++ b/payment/urls.py
@@ -1,5 +1,5 @@
from django.conf import settings
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
from regluit.payment.views import StripeView
diff --git a/requirements_versioned.pip b/requirements_versioned.pip
index a726cf4b..0480d430 100644
--- a/requirements_versioned.pip
+++ b/requirements_versioned.pip
@@ -1,4 +1,4 @@
-Django==1.4.22
+Django==1.6.11
Fabric==1.6.0
MySQL-python==1.2.3
Pillow==2.5.3
@@ -7,39 +7,40 @@ PyPDF2==1.23
PyGithub==1.15.0
PyYAML==3.11
git+git://github.com/urschrei/pyzotero.git@v0.9.51
-South==0.7.6
+South==0.8.4
SPARQLWrapper==1.6.4
WebOb==1.2.3
WebTest==1.4.0
-amqplib==1.0.2
+amqp==1.4.9
anyjson==0.3.3
+billiard==3.3.0.23
awscli==1.10.26
-billiard==2.7.3.12
boto==2.8.0
#git+ssh://git@github.com/Gluejar/boto.git@2.3.0
-celery==3.0.9
+celery==3.1.23
+certifi==2015.04.28
# pip installing pillow seems to delete distribute
# but having distribute in requirements starting to cause problems
# distribute==0.6.28
-django-celery==3.0.9
+django-celery==3.1.17
django-ckeditor==4.5.1
#django-email-change==0.2.3
-git+git://github.com/novagile/django-email-change.git@0d7cb91b987a0505a9c4bde126d452233dea266d
+git+git://github.com/eshellman/django-email-change.git@582112797466b9fb427ba3c4da3b14b426a28132
django-compat==1.0.10
django-endless-pagination==2.0
-django-extensions==0.9
+django-extensions==1.6.1
django-jsonfield==0.9.10
-django-kombu==0.9.4
+#django-kombu==0.9.4
django-maintenancemode==0.10
django-mptt==0.7.4
django-nose-selenium==0.7.3
#django-notification==0.2
-git+git://github.com/aladagemre/django-notification.git@2927346f4c513a217ac8ad076e494dd1adbf70e1
+git+git://github.com/eshellman/django-notification.git@8bb7afbbb07e8cad74bc1cf17e0ac6fc117c0497
django-registration==1.0
django-selectable==0.7.0
django-smtp-ssl==1.0
django-storages==1.1.6
-django-tastypie==0.9.11
+django-tastypie==0.12.2
django-transmeta==0.7.3
feedparser==5.1.2
freebase==1.0.8
@@ -49,37 +50,39 @@ github3.py==0.9.5
html5lib==1.0b3
httplib2==0.7.5
isodate==0.5.1
-kombu==2.4.5
+kombu==3.0.35
lxml==2.3.5
+defusedxml==0.4.1
mechanize==0.2.5
mimeparse==0.1.3
nose==1.1.2
oauth2==1.5.211
oauthlib==0.7.2
-paramiko==1.7.7.2
-postmonkey==1.0a4
+paramiko==1.14.1
+postmonkey==1.0b
pyasn1==0.1.4
pycrypto==2.6
pymarc==3.0.2
pyparsing==2.0.3
python-dateutil==2.1
+python-mimeparse==0.1.4
python-openid==2.2.5
python-social-auth==0.2.6
pytz==2012d
rdflib==4.2.0
rdflib-jsonld==0.3
-redis==2.6.2
+redis==2.10.3
reportlab==3.1.8
-requests==2.6.0
+requests==2.7.0
requests-oauthlib==0.4.2
-selenium==2.50.0
+selenium==2.53.1
six==1.9.0
sorl-thumbnail==12.3
ssh==1.7.14
-stevedore==0.4
+stevedore==1.12.0
stripe==1.9.1
virtualenv==1.4.9
# virtualenv-clone==0.2.4 not sure why I have this in my env
-virtualenvwrapper==3.6
+#virtualenvwrapper==3.6
wsgiref==0.1.2
-xhtml2pdf==0.0.6
+xhtml2pdf==0.0.6
\ No newline at end of file
diff --git a/settings/common.py b/settings/common.py
index 700541a4..9aee508b 100644
--- a/settings/common.py
+++ b/settings/common.py
@@ -12,6 +12,7 @@ LANGUAGES = (
('en', 'English'),
)
LOCAL_TEST = False
+ALLOWED_HOSTS = ['.unglue.it', '.unglueit.com',]
WISHED_LANGS = ('en','fr','es','de','el','pt','it','ru','cs','ja','zh','nl','ut','ar','la','id','ca','fa','sv','sl','ko','tr')
@@ -88,7 +89,7 @@ STATICFILES_FINDERS = (
)
# Make this unique, and don't share it with anybody.
-SECRET_KEY = 'a+bo0@3$n18e(newe7og6hmq$r#bkib73z(+s*n25%6q3+22jo'
+SECRET_KEY = u'a+bo0@3$n18e(newe7og6hmq$r#bkib73z(+s*n25%6q3+22jo'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
@@ -190,9 +191,15 @@ LOGGING = {
'format': '%(asctime)s %(levelname)s %(name)s[%(funcName)s]: %(message)s',
},
},
+ 'filters': {
+ 'require_debug_false': {
+ '()': 'django.utils.log.RequireDebugFalse'
+ }
+ },
'handlers': {
'mail_admins': {
'level': 'ERROR',
+ 'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'file': {
@@ -352,12 +359,6 @@ UPDATE_ACTIVE_CAMPAIGN_STATUSES = {
"args": ()
}
-EMIT_NOTIFICATIONS_JOB = {
- "task": "regluit.core.tasks.emit_notifications",
- "schedule": datetime.timedelta(seconds=60),
- "args": ()
-}
-
EBOOK_NOTIFICATIONS_JOB = {
"task": "regluit.core.tasks.report_new_ebooks",
"schedule": crontab(hour=0, minute=30),
@@ -472,8 +473,11 @@ DROPBOX_KEY = '4efhwty5aph52bd' #for unglue.it, just.unglue.it
# generated from rdhyee account
GITHUB_PUBLIC_TOKEN = 'f702409f913d7f9046f93c677710f829e2b599c9'
+# https://github.com/celery/django-celery/blob/master/docs/introduction.rst#for-django-17-and-newer
SOUTH_MIGRATION_MODULES = {
- 'default': 'social.apps.django_app.default.south_migrations'
+ 'default': 'social.apps.django_app.default.south_migrations',
+ 'tastypie': 'tastypie.south_migrations',
+ 'djcelery': 'djcelery.south_migrations',
}
MOBIGEN_URL = "https://docker.gluejar.com:5001/mobigen"
diff --git a/settings/dev.py b/settings/dev.py
index ee1bd9bc..492ec305 100644
--- a/settings/dev.py
+++ b/settings/dev.py
@@ -1,5 +1,6 @@
from regluit.settings.common import *
+ALLOWED_HOSTS = ['.unglue.it']
DEBUG = True
TEMPLATE_DEBUG = DEBUG
@@ -29,7 +30,7 @@ DATABASES = {
}
TIME_ZONE = 'America/New_York'
-SECRET_KEY = '_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
+SECRET_KEY = b'_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
# settings for outbout email
# if you have a gmail account you can use your email address and password
@@ -120,10 +121,9 @@ MAINTENANCE_MODE = False
# decide which of the period tasks to add to the schedule
#CELERYBEAT_SCHEDULE['send_test_email'] = SEND_TEST_EMAIL_JOB
-#CELERYBEAT_SCHEDULE['emit_notifications'] = EMIT_NOTIFICATIONS_JOB
CELERYBEAT_SCHEDULE['report_new_ebooks'] = EBOOK_NOTIFICATIONS_JOB
try:
from regluit.settings.local import *
except ImportError:
- pass
\ No newline at end of file
+ pass
diff --git a/settings/jenkins.py b/settings/jenkins.py
index 00da0545..58c1f780 100644
--- a/settings/jenkins.py
+++ b/settings/jenkins.py
@@ -24,7 +24,7 @@ DATABASES = {
}
TIME_ZONE = 'America/New_York'
-SECRET_KEY = '_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
+SECRET_KEY = u'_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
# settings for outbout email
# if you have a gmail account you can use your email address and password
diff --git a/settings/just.py b/settings/just.py
index d4daa6f1..03c683d6 100644
--- a/settings/just.py
+++ b/settings/just.py
@@ -1,5 +1,6 @@
from regluit.settings.common import *
+ALLOWED_HOSTS = ['.unglue.it']
DEBUG = False
TEMPLATE_DEBUG = DEBUG
@@ -25,7 +26,7 @@ DATABASES = {
}
TIME_ZONE = 'America/New_York'
-SECRET_KEY = '_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
+SECRET_KEY = u'_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
# settings for outbout email
# if you have a gmail account you can use your email address and password
@@ -116,8 +117,6 @@ IS_PREVIEW = False
CELERYBEAT_SCHEDULE['send_test_email'] = SEND_TEST_EMAIL_JOB
CELERYBEAT_SCHEDULE['report_new_ebooks'] = EBOOK_NOTIFICATIONS_JOB
-# doing emit_notifications in crontab right now
-#CELERYBEAT_SCHEDULE['emit_notifications'] = EMIT_NOTIFICATIONS_JOB
CELERYBEAT_SCHEDULE['update_account_statuses'] = UPDATE_ACCOUNT_STATUSES
CELERYBEAT_SCHEDULE['notify_expiring_accounts'] = NOTIFY_EXPIRING_ACCOUNTS
diff --git a/settings/localvm.py b/settings/localvm.py
index 390535a1..6e3a23f2 100644
--- a/settings/localvm.py
+++ b/settings/localvm.py
@@ -106,7 +106,6 @@ IS_PREVIEW = False
#CELERYBEAT_SCHEDULE['send_test_email'] = SEND_TEST_EMAIL_JOB
CELERYBEAT_SCHEDULE['report_new_ebooks'] = EBOOK_NOTIFICATIONS_JOB
-CELERYBEAT_SCHEDULE['emit_notifications'] = EMIT_NOTIFICATIONS_JOB
# local settings for maintenance mode
diff --git a/settings/please.py b/settings/please.py
index 68b96df8..9c4fd535 100644
--- a/settings/please.py
+++ b/settings/please.py
@@ -1,5 +1,6 @@
from regluit.settings.common import *
+ALLOWED_HOSTS = ['.unglue.it']
DEBUG = False
TEMPLATE_DEBUG = DEBUG
@@ -26,7 +27,7 @@ DATABASES = {
TIME_ZONE = 'America/New_York'
-SECRET_KEY = '_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
+SECRET_KEY = u'_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
# settings for outbout email
# if you have a gmail account you can use your email address and password
@@ -103,7 +104,6 @@ IS_PREVIEW = False
#CELERYBEAT_SCHEDULE['send_test_email'] = SEND_TEST_EMAIL_JOB
CELERYBEAT_SCHEDULE['report_new_ebooks'] = EBOOK_NOTIFICATIONS_JOB
-CELERYBEAT_SCHEDULE['emit_notifications'] = EMIT_NOTIFICATIONS_JOB
# local settings for maintenance mode
diff --git a/settings/prod.py b/settings/prod.py
index 469c90cb..899e99f7 100644
--- a/settings/prod.py
+++ b/settings/prod.py
@@ -1,5 +1,6 @@
from regluit.settings.common import *
+ALLOWED_HOSTS = ['.unglue.it']
DEBUG = False
TEMPLATE_DEBUG = DEBUG
# we are launched!
@@ -27,7 +28,7 @@ DATABASES = {
}
TIME_ZONE = 'America/New_York'
-SECRET_KEY = '_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
+SECRET_KEY = u'_^_off!8zsj4+)%qq623m&$7_m-q$iau5le0w!mw&n5tgt#x=t'
# settings for outbout email
# if you have a gmail account you can use your email address and password
@@ -112,7 +113,6 @@ STATIC_ROOT = '/var/www/static'
# decide which of the period tasks to add to the schedule
CELERYBEAT_SCHEDULE['send_test_email'] = SEND_TEST_EMAIL_JOB
-#CELERYBEAT_SCHEDULE['emit_notifications'] = EMIT_NOTIFICATIONS_JOB
# update the statuses of campaigns
CELERYBEAT_SCHEDULE['update_active_campaign_statuses'] = UPDATE_ACTIVE_CAMPAIGN_STATUSES
CELERYBEAT_SCHEDULE['report_new_ebooks'] = EBOOK_NOTIFICATIONS_JOB
diff --git a/survey/urls.py b/survey/urls.py
index e7f58680..24dd7f9f 100644
--- a/survey/urls.py
+++ b/survey/urls.py
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
from .views import SurveyView
diff --git a/test/campaigntest.py b/test/campaigntest.py
index e0ced517..8a530b26 100644
--- a/test/campaigntest.py
+++ b/test/campaigntest.py
@@ -351,10 +351,8 @@ def test_relaunch(unglue_it_url = settings.LIVE_SERVER_TEST_URL, do_local=True,
def successful_campaign_signal():
"""fire off a success_campaign signal and send notifications"""
import regluit
- from notification.engine import send_all
c = regluit.core.models.Campaign.objects.get(id=3)
regluit.core.signals.successful_campaign.send(sender=None, campaign=c)
- send_all()
def berkeley_search():
diff --git a/urls.py b/urls.py
index 924a03bf..aeedb85b 100755
--- a/urls.py
+++ b/urls.py
@@ -1,6 +1,4 @@
-import notification.urls
-
-from django.conf.urls.defaults import *
+from django.conf.urls import patterns, url, include
from frontend.views import social_auth_reset_password
from regluit.admin import admin_site
@@ -22,7 +20,7 @@ urlpatterns = patterns('',
url(r'^selectable/', include('selectable.urls')),
url(r'^admin/', include(admin_site.urls)),
url(r'^comments/', include('django.contrib.comments.urls')),
- url(r'^notification/', include(notification.urls)),
+ url(r"^notification/", include('notification.urls')),
url(r'^ckeditor/', include('ckeditor.urls')),
# questionnaire urls
url(r'^survey/', include('regluit.questionnaire.urls')),
diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile
index 9720003a..8497cd05 100644
--- a/vagrant/Vagrantfile
+++ b/vagrant/Vagrantfile
@@ -6,8 +6,6 @@ VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
- config.vm.define "jenkins"
-
config.vm.define "please" do |node|
# Every Vagrant virtual environment requires a box to build off of.
@@ -53,6 +51,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# alestic 2015.05.05
aws.instance_type="t1.micro"
+ #aws.instance_type="m3.medium"
aws.region = "us-east-1"
aws.availability_zone = "us-east-1c"
diff --git a/vagrant/dev.yml b/vagrant/dev.yml
index e378c4a0..6f2f4e6b 100644
--- a/vagrant/dev.yml
+++ b/vagrant/dev.yml
@@ -54,10 +54,10 @@
tasks:
- # sudo add repo to get latest version of python 2.7
+ # add repo to get latest version of python 2.7
- name: add-apt-repository ppa:fkrull/deadsnakes-python2.7
apt_repository: repo='ppa:fkrull/deadsnakes-python2.7' state=present update_cache=true
- when: class in []
+ when: class in ['please', 'just', 'prod']
- name: do apt-get update --fix-missing
command: apt-get update --fix-missing
@@ -437,6 +437,26 @@
- name: put an empty file in main dir to help identify this instance
command: touch "/home/{{user}}/{{class}}_{{ ansible_date_time.iso8601 }}"
+ - name: apply upgrade
+ command: sudo unattended-upgrade
+
+ - name: check whether reboot needed
+ stat: path=/var/run/reboot-required
+ register: reboot_required
+
+ - name: restart machine
+ shell: sleep 2 && shutdown -r now "Ansible updates triggered"
+ async: 1
+ poll: 0
+ sudo: true
+ ignore_errors: true
+ when: reboot_required
+
+ - name: waiting for server to come back
+ local_action: wait_for host={{ inventory_hostname }} state=started delay=30 timeout=300
+ sudo: false
+ when: reboot_required
+
handlers:
- name: restart apache2