From 60f3ff43a9dee84a09d37a7e2381572a0343da7b Mon Sep 17 00:00:00 2001
From: Amit Kumar
Date: Fri, 10 Apr 2020 20:57:16 +0100
Subject: [PATCH 1/5] Upgrade Django to 1.11
---
app.yaml.template | 4 +++-
app/views.py | 39 +++++++++++++++++++++------------------
main.py | 5 +++--
requirements.txt | 2 +-
settings.py | 27 ++++++++++++++++-----------
templates/base.html | 2 +-
urls.py | 29 +++++++++++++++--------------
7 files changed, 60 insertions(+), 48 deletions(-)
diff --git a/app.yaml.template b/app.yaml.template
index 4dfff04b..35054755 100644
--- a/app.yaml.template
+++ b/app.yaml.template
@@ -26,6 +26,8 @@ handlers:
libraries:
- name: django
- version: "1.3"
+ version: "1.11"
- name: numpy
version: "1.6.1"
+- name: ssl
+ version: "latest"
diff --git a/app/views.py b/app/views.py
index 5a3bae60..9809784a 100644
--- a/app/views.py
+++ b/app/views.py
@@ -1,17 +1,12 @@
from django.http import HttpResponse, Http404
from django.shortcuts import render_to_response, redirect
from django.template.loader import render_to_string
-from django.utils import simplejson
from django import forms
-import django
from google.appengine.api import users
from google.appengine.runtime import DeadlineExceededError
-import sympy
-from logic.utils import Eval
from logic.logic import SymPyGamma, mathjax_latex
-from logic.resultsets import get_card, find_result_set
import settings
import models
@@ -127,6 +122,7 @@
]),
]
+
class MobileTextInput(forms.widgets.TextInput):
def render(self, name, value, attrs=None):
if attrs is None:
@@ -135,9 +131,11 @@ def render(self, name, value, attrs=None):
attrs['autocapitalize'] = 'off'
return super(MobileTextInput, self).render(name, value, attrs)
+
class SearchForm(forms.Form):
i = forms.CharField(required=False, widget=MobileTextInput())
+
def authenticate(view):
def _wrapper(request, **kwargs):
user = users.get_current_user()
@@ -157,6 +155,7 @@ def _wrapper(request, **kwargs):
return template, params
return _wrapper
+
def app_version(view):
def _wrapper(request, **kwargs):
result = view(request, **kwargs)
@@ -173,6 +172,7 @@ def _wrapper(request, **kwargs):
return result
return _wrapper
+
@app_version
@authenticate
def index(request, user):
@@ -279,19 +279,19 @@ def eval_card(request, card_name):
except ValueError as e:
return HttpResponse(json.dumps({
'error': e.message
- }), mimetype="application/json")
+ }), content_type="application/json")
except DeadlineExceededError:
return HttpResponse(json.dumps({
'error': 'Computation timed out.'
- }), mimetype="application/json")
+ }), content_type="application/json")
except:
trace = traceback.format_exc(5)
return HttpResponse(json.dumps({
'error': ('There was an error in Gamma. For reference'
'the last five traceback entries are: ' + trace)
- }), mimetype="application/json")
+ }), content_type="application/json")
- return HttpResponse(json.dumps(result), mimetype="application/json")
+ return HttpResponse(json.dumps(result), content_type="application/json")
def get_card_info(request, card_name):
g, variable, expression, _ = _process_card(request, card_name)
@@ -301,19 +301,19 @@ def get_card_info(request, card_name):
except ValueError as e:
return HttpResponse(json.dumps({
'error': e.message
- }), mimetype="application/json")
+ }), content_type="application/json")
except DeadlineExceededError:
return HttpResponse(json.dumps({
'error': 'Computation timed out.'
- }), mimetype="application/json")
+ }), content_type="application/json")
except:
trace = traceback.format_exc(5)
return HttpResponse(json.dumps({
'error': ('There was an error in Gamma. For reference'
'the last five traceback entries are: ' + trace)
- }), mimetype="application/json")
+ }), content_type="application/json")
- return HttpResponse(json.dumps(result), mimetype="application/json")
+ return HttpResponse(json.dumps(result), content_type="application/json")
def get_card_full(request, card_name):
g, variable, expression, parameters = _process_card(request, card_name)
@@ -339,10 +339,10 @@ def get_card_full(request, card_name):
'error': e.message
},
'input': expression
- }), mimetype="text/html")
+ }), content_type="text/html")
except DeadlineExceededError:
return HttpResponse('Computation timed out.',
- mimetype="text/html")
+ content_type="text/html")
except:
trace = traceback.format_exc(5)
return HttpResponse(render_to_string('card.html', {
@@ -352,14 +352,15 @@ def get_card_full(request, card_name):
'error': trace
},
'input': expression
- }), mimetype="text/html")
+ }), content_type="text/html")
- response = HttpResponse(html, mimetype="text/html")
+ response = HttpResponse(html, content_type="text/html")
response['Access-Control-Allow-Origin'] = '*'
response['Access-Control-Allow-Headers'] = 'Content-Type, X-Requested-With'
return response
+
def remove_query(request, qid):
user = users.get_current_user()
@@ -381,12 +382,14 @@ def remove_query(request, qid):
'message': 'Not logged in or invalid user.'
}
- return HttpResponse(json.dumps(response), mimetype='application/json')
+ return HttpResponse(json.dumps(response), content_type='application/json')
+
@app_version
def view_404(request):
return ("404.html", {})
+
@app_version
def view_500(request):
return ("500.html", {})
diff --git a/main.py b/main.py
index 890b0d7b..5fd3bb28 100644
--- a/main.py
+++ b/main.py
@@ -7,6 +7,7 @@
# Must set this env var *before* importing any part of Django
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
-import django.core.handlers.wsgi
+from django.core.wsgi import get_wsgi_application
+
+application = get_wsgi_application()
-application = django.core.handlers.wsgi.WSGIHandler()
diff --git a/requirements.txt b/requirements.txt
index c434f65c..b7d6a044 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,2 @@
-django==1.3
+django==1.11
numpy==1.6.1
diff --git a/settings.py b/settings.py
index 5d7fda3e..36d0d897 100644
--- a/settings.py
+++ b/settings.py
@@ -2,7 +2,7 @@
# root_dir points to this directory (that contains settings.py):
import os
-root_dir = os.path.dirname(os.path.abspath(__file__))
+ROOT_DIR = os.path.abspath(os.path.dirname(__file__))
DEBUG = False
TEMPLATE_DEBUG = DEBUG
@@ -54,13 +54,6 @@
# Make this unique, and don't share it with anybody.
SECRET_KEY = '4v-c#usznhix_^np%w)4yr@dlit*4^47u@uph3xr2gh@7(&z$u'
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.load_template_source',
- 'django.template.loaders.app_directories.load_template_source',
-# 'django.template.loaders.eggs.load_template_source',
-)
-
MIDDLEWARE_CLASSES = (
'google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware',
'django.middleware.common.CommonMiddleware',
@@ -70,9 +63,21 @@
ROOT_URLCONF = 'urls'
-TEMPLATE_DIRS = (
- root_dir + "/templates",
-)
+TEMPLATES = [{
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [os.path.join(ROOT_DIR, 'templates')],
+ 'OPTIONS': {
+ 'loaders': [
+ ('django.template.loaders.cached.Loader', [
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+ ]),
+ ],
+ },
+}]
+
+
+ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
INSTALLED_APPS = (
#'django.contrib.auth',
diff --git a/templates/base.html b/templates/base.html
index c08cb729..dcfe8fb4 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -64,7 +64,7 @@
- © 2013 SymPy Development Team. This project is
+ © 2020 SymPy Development Team. This project is
open-source:
SymPy Gamma on Github.
diff --git a/urls.py b/urls.py
index 97c79d3e..305fbaf6 100644
--- a/urls.py
+++ b/urls.py
@@ -1,4 +1,6 @@
-from django.conf.urls.defaults import *
+from django.conf.urls import url
+
+from app import views
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
@@ -7,23 +9,22 @@
import os.path
p = os.path.join(os.path.dirname(__file__), 'media/')
-urlpatterns = patterns(
- '',
+urlpatterns = [
# Example:
# (r'^notebook/', include('notebook.foo.urls')),
- (r'^$', 'app.views.index'),
+ url(r'^$', views.index),
- (r'^input/', 'app.views.input'),
- (r'^about/$', 'app.views.about'),
- (r'^random', 'app.views.random_example'),
+ url(r'^input/', views.input),
+ url(r'^about/$', views.about),
+ url(r'^random', views.random_example),
- (r'user/remove/(?P.*)$', 'app.views.remove_query'),
+ url(r'user/remove/(?P.*)$', views.remove_query),
- (r'card/(?P\w*)$', 'app.views.eval_card'),
+ url(r'card/(?P\w*)$', views.eval_card),
- (r'card_info/(?P\w*)$', 'app.views.get_card_info'),
+ url(r'card_info/(?P\w*)$', views.get_card_info),
- (r'card_full/(?P\w*)$', 'app.views.get_card_full')
+ url(r'card_full/(?P\w*)$', views.get_card_full)
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
@@ -32,7 +33,7 @@
# Uncomment the next line to enable the admin:
# (r'^admin/(.*)', admin.site.root),
-)
+]
-handler404 = 'app.views.view_404'
-handler500 = 'app.views.view_500'
+handler404 = views.view_404
+handler500 = views.view_500
From 475216b80f8b1889f3b628350368375123e380cd Mon Sep 17 00:00:00 2001
From: Amit Kumar
Date: Fri, 10 Apr 2020 23:23:05 +0100
Subject: [PATCH 2/5] Copyright 2013-2020
Co-Authored-By: Aaron Meurer
---
templates/base.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/base.html b/templates/base.html
index dcfe8fb4..8f6722c9 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -64,7 +64,7 @@
- © 2020 SymPy Development Team. This project is
+ © 2013-2020 SymPy Development Team. This project is
open-source:
SymPy Gamma on Github.
From 7665c803bce7f94ce720d226aaf858a17f48c7e6 Mon Sep 17 00:00:00 2001
From: Amit Kumar
Date: Sat, 11 Apr 2020 00:54:51 +0100
Subject: [PATCH 3/5] Upgrade App engine SDK
---
.travis.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 6549b875..89843308 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -15,8 +15,8 @@ install: "pip install -r requirements.txt"
before_script:
- cd ..
- - wget https://storage.googleapis.com/appengine-sdks/deprecated/195/google_appengine_1.9.5.zip -nv
- - unzip -q google_appengine_1.9.5.zip
+ - wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.90.zip -nv
+ - unzip -q google_appengine_1.9.90.zip
- export SDK_LOCATION="$(pwd)/google_appengine"
- cd $TRAVIS_BUILD_DIR
- git fetch --tags
From db9d9bab00dc6a3e0cec58b8574e53278d3821ae Mon Sep 17 00:00:00 2001
From: Amit Kumar
Date: Sun, 12 Apr 2020 09:51:03 +0100
Subject: [PATCH 4/5] Add .sympygamma.com wildcard to ALLOWED_HOSTS
---
settings.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/settings.py b/settings.py
index 36d0d897..eb61896e 100644
--- a/settings.py
+++ b/settings.py
@@ -77,7 +77,7 @@
}]
-ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
+ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '.sympygamma.com']
INSTALLED_APPS = (
#'django.contrib.auth',
From 6b6f25eb3f945c772eb197f0481689846a28d15b Mon Sep 17 00:00:00 2001
From: Amit Kumar
Date: Mon, 13 Apr 2020 00:14:43 +0100
Subject: [PATCH 5/5] Update ALLOWED_HOSTS with .sympy.org and .appspot.com
---
settings.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/settings.py b/settings.py
index eb61896e..78c5a6ad 100644
--- a/settings.py
+++ b/settings.py
@@ -77,7 +77,13 @@
}]
-ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '.sympygamma.com']
+ALLOWED_HOSTS = [
+ '127.0.0.1',
+ 'localhost',
+ '.sympygamma.com',
+ '.sympy.org',
+ '.appspot.com'
+]
INSTALLED_APPS = (
#'django.contrib.auth',