commit
bff6092565
|
@ -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()
|
||||
|
|
|
@ -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('<rights>CC BY</rights>')>0)
|
||||
|
||||
def test_widget(self):
|
||||
r = self.client.get('/api/widget/0441007465/')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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()
|
|
@ -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"""
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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?
|
||||
|
||||
|
|
|
@ -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<action>\w*)/?$", "emailshare", name="emailshare"),
|
||||
url(r"^feedback/campaign/(?P<campaign_id>\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<work_id>\d+)/$", "kindle_config", name="kindle_config_download"),
|
||||
url(r"^send_to_kindle/(?P<work_id>\d+)/(?P<javascript>\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"),
|
||||
|
||||
)
|
||||
|
|
|
@ -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', ''),
|
||||
|
||||
|
|
|
@ -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",)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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<library_id>\d+)/join/$", views.join_library, name="join_library"),
|
||||
url(r"^libraryauth/(?P<library_id>\d+)/deny/$", direct_to_template, {'template':'libraryauth/denied.html'}, name="bad_library"),
|
||||
url(r"^libraryauth/(?P<library_id>\d+)/deny/$", TemplateView.as_view(template_name='libraryauth/denied.html'), name="bad_library"),
|
||||
url(r"^libraryauth/(?P<library_id>\d+)/users/$", views.library, {'template':'libraryauth/users.html'}, name="library_users"),
|
||||
url(r"^libraryauth/(?P<library_id>\d+)/admin/$", login_required(views.UpdateLibraryView.as_view()), name="library_admin"),
|
||||
url(r"^libraryauth/(?P<library_id>\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')),
|
||||
|
|
16
manage.py
16
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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
pass
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from django.conf.urls.defaults import *
|
||||
from django.conf.urls import patterns, url, include
|
||||
from .views import SurveyView
|
||||
|
||||
|
||||
|
|
|
@ -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():
|
||||
|
|
6
urls.py
6
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')),
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue