#0.6.11; initial work on django 1.10 support; replace render_to_response with render; get rid of django-localeurl package; update requirements for django 1.10 compatibility

This commit is contained in:
Artur Barseghyan 2016-09-13 11:09:45 +02:00
parent 03607fbd63
commit 69ba6f6384
13 changed files with 232 additions and 78 deletions

View file

@ -15,6 +15,15 @@ are used for versioning (schema follows below):
0.3.4 to 0.4).
- All backwards incompatible changes are mentioned in this document.
0.6.11
------
2016-xx-xx (not released yet)
- Step forward towards Django 1.10. use `render` instead of
`render_to_response`, get rid of `django-localeurl` and use `i18n_patterns`
instead.
- Minor fixes.
0.6.10
------
2016-09-11

View file

@ -0,0 +1,47 @@
alabaster==0.7.6
Babel==2.1.1
decorator==4.0.4
Django==1.10.1
django-admin-tools>=0.8.0
django-autoslug==1.9.3
django-debug-toolbar==1.5
django-formtools==1.0
#django-localeurl==2.0.2
django-nine==0.1.9
django-nonefield==0.1
django-registration-redux>=1.4
docopt==0.4.0
docutils==0.12
easy-thumbnails==2.3
ipdb==0.8.1
ipython==4.0.0
ipython-genutils==0.1.0
Jinja2==2.8
mailchimp==2.0.9
MarkupSafe==0.23
ordereddict==1.1
path.py==8.1.2
pexpect==4.0.1
pickleshare==0.5
Pillow==3.0.0
pluggy==0.3.1
ptyprocess==0.5
py==1.4.30
Pygments==2.0.2
pytz==2015.6
requests==2.8.1
selenium==2.48.0
simple-timer==0.2
simplegeneric==0.8.1
simplejson==3.8.0
six==1.10.0
snowballstemmer==1.2.0
Sphinx==1.3.1
sphinx-rtd-theme==0.1.9
sqlparse==0.1.17
tox==2.1.1
traitlets==4.0.0
Unidecode==0.4.18
virtualenv==13.1.2
vishap==0.1.5
wheel==0.24.0

View file

@ -1,7 +1,7 @@
alabaster==0.7.6
Babel==2.1.1
decorator==4.0.4
Django==1.9
Django==1.9.9
django-admin-tools>=0.7.1
django-autoslug==1.9.3
django-debug-toolbar==0.11
@ -45,5 +45,3 @@ Unidecode==0.4.18
virtualenv==13.1.2
vishap==0.1.5
wheel==0.24.0
#git+https://github.com/macropin/django-registration.git

View file

@ -1,5 +1,8 @@
# Django settings for example project.
import os
from nine.versions import (
DJANGO_GTE_1_7, DJANGO_GTE_1_8, DJANGO_LTE_1_7, DJANGO_GTE_1_10
)
PROJECT_DIR = lambda base : os.path.abspath(os.path.join(os.path.dirname(__file__), base).replace('\\','/'))
gettext = lambda s: s
@ -101,8 +104,6 @@ STATICFILES_FINDERS = (
# Make this unique, and don't share it with anybody.
SECRET_KEY = '97818c*w97Zi8a-m^1coRRrmurMI6+q5_kyn*)s@(*_Pk6q423'
from nine.versions import DJANGO_GTE_1_7, DJANGO_GTE_1_8, DJANGO_LTE_1_7
if DJANGO_GTE_1_8:
TEMPLATES = [
{
@ -163,7 +164,7 @@ else:
PROJECT_DIR('templates'),
)
MIDDLEWARE_CLASSES = (
MIDDLEWARE_CLASSES = [
'django.contrib.sessions.middleware.SessionMiddleware',
'localeurl.middleware.LocaleURLMiddleware',
'django.middleware.common.CommonMiddleware',
@ -172,7 +173,10 @@ MIDDLEWARE_CLASSES = (
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
]
if DJANGO_GTE_1_10:
MIDDLEWARE_CLASSES.remove('localeurl.middleware.LocaleURLMiddleware')
ROOT_URLCONF = 'urls'
@ -328,21 +332,25 @@ INSTALLED_APPS = [
if DJANGO_LTE_1_7:
INSTALLED_APPS.append('south')
if DJANGO_GTE_1_10:
INSTALLED_APPS.remove('localeurl')
LOGIN_REDIRECT_URL = '/fobi/' # Important for passing the selenium tests
#LOGIN_URL = '/accounts/login/'
#LOGIN_ERROR_URL = '/accounts/login/'
#LOGOUT_URL = '/accounts/logout/'
# Tell localeurl to use sessions for language store.
LOCALEURL_USE_SESSION = True
if not DJANGO_GTE_1_10:
# Tell localeurl to use sessions for language store.
LOCALEURL_USE_SESSION = True
# localeurl locale independent paths (language code won't be appended)
LOCALE_INDEPENDENT_PATHS = (
r'^/sitemap.*\.xml$', # Global regex for all XML sitemaps
r'^/admin/',
#r'^/dashboard/',
)
# localeurl locale independent paths (language code won't be appended)
LOCALE_INDEPENDENT_PATHS = (
r'^/sitemap.*\.xml$', # Global regex for all XML sitemaps
r'^/admin/',
#r'^/dashboard/',
)
PACKAGE_NAME_FILEBROWSER = "filebrowser_safe" # Just for tests
PACKAGE_NAME_GRAPPELLI = "grappelli_safe" # Just for tests

View file

@ -0,0 +1,20 @@
from settings import *
INSTALLED_APPS = list(INSTALLED_APPS)
try:
INSTALLED_APPS.remove('south') if 'south' in INSTALLED_APPS else None
INSTALLED_APPS.remove('tinymce') if 'tinymce' in INSTALLED_APPS else None
INSTALLED_APPS.remove('localeurl') if 'localeurl' in INSTALLED_APPS else None
except Exception as e:
pass
try:
INSTALLED_APPS.remove('admin_tools') \
if 'admin_tools' in INSTALLED_APPS else None
INSTALLED_APPS.remove('admin_tools.menu') \
if 'admin_tools.menu' in INSTALLED_APPS else None
INSTALLED_APPS.remove('admin_tools.dashboard') \
if 'admin_tools.dashboard' in INSTALLED_APPS else None
except Exception as e:
pass

View file

@ -1,5 +1,5 @@
from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.conf import settings
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
@ -27,7 +27,9 @@ FOBI_EDIT_URLS_PREFIX = ''
if DEFAULT_THEME in ('simple', 'djangocms_admin_style_theme'):
FOBI_EDIT_URLS_PREFIX = 'admin/'
urlpatterns = [
urlpatterns = []
urlpatterns += i18n_patterns(
# DB Store plugin URLs
url(r'^fobi/plugins/form-handlers/db-store/',
include('fobi.contrib.plugins.form_handlers.db_store.urls')), #,namespace='fobi'
@ -51,7 +53,7 @@ urlpatterns = [
# django-fobi public forms contrib app:
#url(r'^', include('fobi.contrib.apps.public_forms.urls')),
]
)
# Serving media and static in debug/developer mode.
if settings.DEBUG:
@ -63,17 +65,17 @@ if settings.DEBUG:
if 'feincms' in settings.INSTALLED_APPS:
from page.models import Page
Page
urlpatterns += [
urlpatterns += i18n_patterns(
url(r'^pages/', include('feincms.urls')),
]
)
# Conditionally including DjangoCMS URls in case if
# DjangoCMS in installed apps.
if 'cms' in settings.INSTALLED_APPS:
urlpatterns += [
urlpatterns += i18n_patterns(
url(r'^cms-pages/', include('cms.urls')),
]
)
# Conditionally including Captcha URls in case if
# Captcha in installed apps.

8
scripts/install_django_1_10.sh Executable file
View file

@ -0,0 +1,8 @@
pip uninstall south -y
pip install -r examples/requirements_django_1_10.txt
python setup.py install
mkdir -p examples/logs examples/db examples/media examples/media/static examples/media/fobi_plugins/content_image
mkdir -p examples/media/fobi_plugins/file
python examples/simple/manage.py collectstatic --noinput --settings=settings_bootstrap3_theme_django_1_7 --traceback -v 3
python examples/simple/manage.py migrate --noinput --settings=settings_bootstrap3_theme_django_1_7 --traceback -v 3
python examples/simple/manage.py fobi_create_test_data --settings=settings_bootstrap3_theme_django_1_7 --traceback -v 3

View file

@ -0,0 +1,3 @@
reset
./scripts/uninstall.sh
./scripts/install_django_1_10.sh

4
scripts/test_django_1_10.sh Executable file
View file

@ -0,0 +1,4 @@
reset
./scripts/uninstall.sh
./scripts/install_django_1_10.sh
python examples/simple/manage.py test fobi --settings=settings_bootstrap3_theme_django_1_10 --traceback -v 3

View file

@ -1,22 +1,28 @@
__title__ = 'fobi.contrib.plugins.form_handlers.db_store.views'
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = 'Copyright (c) 2014-2015 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = (
'view_saved_form_data_entries',
)
from django.template import RequestContext
from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required
#from fobi.decorators import permissions_required, SATISFY_ALL, SATISFY_ANY
from fobi.base import get_form_handler_plugin_widget
from nine import versions
if versions.DJANGO_GTE_1_10:
from django.shortcuts import render
else:
from django.shortcuts import render_to_response
from . import UID
from .models import SavedFormDataEntry
from .helpers import DataExporter
__title__ = 'fobi.contrib.plugins.form_handlers.db_store.views'
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = 'Copyright (c) 2014-2016 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = (
'view_saved_form_data_entries',
)
#entries_permissions = [
# 'db_store.add_savedformdataentry',
# 'db_store.change_savedformdataentry',
@ -57,8 +63,11 @@ def view_saved_form_data_entries(request, form_entry_id=None, theme=None, \
if widget and widget.view_saved_form_data_entries_template_name:
template_name = widget.view_saved_form_data_entries_template_name
return render_to_response(
template_name, context, context_instance=RequestContext(request)
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
@login_required

View file

@ -145,15 +145,15 @@ class FormFieldsetEntryForm(forms.ModelForm):
class FormElementForm(forms.ModelForm):
"""FormElement form."""
plugin_uid = forms.ChoiceField(
choices=get_registered_form_element_plugins()
)
# plugin_uid = forms.ChoiceField(
# choices=get_registered_form_element_plugins()
# )
class Meta:
"""Meta class."""
model = FormElement
fields = ('users', 'groups', 'plugin_uid')
fields = ('users', 'groups')
class FormElementEntryForm(forms.ModelForm):
@ -178,15 +178,15 @@ FormElementEntryFormSet = modelformset_factory(
class FormHandlerForm(forms.ModelForm):
"""FormHandler form."""
plugin_uid = forms.ChoiceField(
choices=get_registered_form_handler_plugins()
)
# plugin_uid = forms.ChoiceField(
# choices=get_registered_form_handler_plugins()
# )
class Meta:
"""Meta class."""
model = FormHandler
fields = ('users', 'groups', 'plugin_uid')
fields = ('users', 'groups')
class FormHandlerEntryForm(forms.ModelForm):

View file

@ -2,26 +2,13 @@
Views.
"""
__title__ = 'fobi.views'
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = '2014-2015 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = (
'create_form_entry', 'edit_form_entry', 'delete_form_entry',
'add_form_element_entry', 'edit_form_element_entry',
'delete_form_element_entry', 'add_form_handler_entry',
'edit_form_handler_entry', 'delete_form_handler_entry',
'dashboard', 'view_form_entry', 'form_entry_submitted',
'export_form_entry', 'import_form_entry', 'form_importer',
)
import datetime
import logging
import simplejson as json
from django.template import RequestContext
from django.shortcuts import render_to_response, redirect
from django.shortcuts import redirect
from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404
from django.core.urlresolvers import reverse
@ -63,6 +50,26 @@ from fobi.utils import (
from fobi.helpers import JSONDataExporter
from fobi.settings import GET_PARAM_INITIAL_DATA, DEBUG
from nine import versions
if versions.DJANGO_GTE_1_10:
from django.shortcuts import render
else:
from django.shortcuts import render_to_response
__title__ = 'fobi.views'
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
__copyright__ = '2014-2016 Artur Barseghyan'
__license__ = 'GPL 2.0/LGPL 2.1'
__all__ = (
'create_form_entry', 'edit_form_entry', 'delete_form_entry',
'add_form_element_entry', 'edit_form_element_entry',
'delete_form_element_entry', 'add_form_handler_entry',
'edit_form_handler_entry', 'delete_form_handler_entry',
'dashboard', 'view_form_entry', 'form_entry_submitted',
'export_form_entry', 'import_form_entry', 'form_importer',
)
logger = logging.getLogger(__name__)
# *****************************************************************************
@ -153,9 +160,12 @@ def dashboard(request, theme=None, template_name=None):
theme = get_theme(request=request, as_instance=True)
template_name = theme.dashboard_template
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# *****************************************************************************
@ -220,9 +230,12 @@ def create_form_entry(request, theme=None, template_name=None):
theme = get_theme(request=request, as_instance=True)
template_name = theme.create_form_entry_template
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# **************************************************************************
# ******************************* Edit form entry **************************
@ -388,9 +401,12 @@ def edit_form_entry(request, form_entry_id, theme=None, template_name=None):
if not template_name:
template_name = theme.edit_form_entry_template
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# **************************** Add form element entry *************************
@ -516,8 +532,12 @@ def add_form_element_entry(request,
theme = get_theme(request=request, as_instance=True)
template_name = theme.add_form_element_entry_template
return render_to_response(template_name, context,
context_instance=RequestContext(request))
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# **************************** Edit form element entry ************************
@ -616,8 +636,12 @@ def edit_form_element_entry(request,
theme = get_theme(request=request, as_instance=True)
template_name = theme.edit_form_element_entry_template
return render_to_response(template_name, context,
context_instance=RequestContext(request))
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# **************************** Delete form element entry **********************
@ -759,8 +783,12 @@ def add_form_handler_entry(request,
theme = get_theme(request=request, as_instance=True)
template_name = theme.add_form_handler_entry_template
return render_to_response(template_name, context,
context_instance=RequestContext(request))
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# **************************** Edit form handler entry ************************
@ -847,8 +875,12 @@ def edit_form_handler_entry(request,
theme = get_theme(request=request, as_instance=True)
template_name = theme.edit_form_handler_entry_template
return render_to_response(template_name, context,
context_instance=RequestContext(request))
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# **************************** Delete form handler entry **********************
@ -1005,8 +1037,12 @@ def view_form_entry(request, form_entry_slug, theme=None, template_name=None):
if not template_name:
template_name = theme.view_form_entry_template
return render_to_response(template_name, context,
context_instance=RequestContext(request))
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# **************************** View form entry success ************************
@ -1045,8 +1081,12 @@ def form_entry_submitted(request, form_entry_slug=None, template_name=None):
theme = get_theme(request=request, as_instance=True)
template_name = theme.form_entry_submitted_template
return render_to_response(template_name, context,
context_instance=RequestContext(request))
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# *****************************************************************************
@ -1266,8 +1306,12 @@ def import_form_entry(request, template_name=None):
theme = get_theme(request=request, as_instance=True)
template_name = theme.import_form_entry_template
return render_to_response(template_name, context,
context_instance=RequestContext(request))
if versions.DJANGO_GTE_1_10:
return render(request, template_name, context)
else:
return render_to_response(
template_name, context, context_instance=RequestContext(request)
)
# *****************************************************************************
# *****************************************************************************

View file

@ -3,6 +3,7 @@ envlist =
py{27,33,34}-{django15,django16},
py{27,33,34}-{django17,django18}
py{34}-{django19}
py{35}-{django110}
[testenv]
deps =
@ -11,5 +12,6 @@ deps =
django17: -r{toxinidir}/examples/requirements_django_1_7.txt
django18: -r{toxinidir}/examples/requirements_django_1_8.txt
django19: -r{toxinidir}/examples/requirements_django_1_9.txt
django110: -r{toxinidir}/examples/requirements_django_1_10.txt
commands =
{envpython} examples/simple/manage.py test {posargs:fobi} --settings=settings_test --traceback -v 3