diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dd50908b3a24a5928d5a478d108827f97f9f9fdd..ef36506b1812f540264e32e1318a4a0aab933e5d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,8 +2,10 @@ stages: - build variables: - PREFIX: /opt/beat.env.web/usr - TEST_PREFIX_PATH_FILE: '/tmp/test_prefix_$CI_JOB_ID.txt' + TEST_PREFIX_PATH_FILE: 'test_prefix_$CI_JOB_ID.txt' + CONDA_ENV_NAME: beat_test_env + CONDA_PREFIX: /local/opt/conda + PREFIX: $CONDA_PREFIX/envs/$CONDA_ENV_NAME build: stage: build @@ -12,10 +14,13 @@ build: before_script: - ${PREFIX}/bin/python --version - docker info + - git clean -ffdx - export BEAT_TEST_PREFIX=`mktemp -d --tmpdir=/var/tmp beat_test_prefix.XXXXXXXXX` - echo $BEAT_TEST_PREFIX > $TEST_PREFIX_PATH_FILE + - export PATH="$CONDA_PREFIX/bin:$PATH" + - source activate $CONDA_ENV_NAME + - conda info --envs script: - - git clean -ffdx - ${PREFIX}/bin/python bootstrap-buildout.py - ./bin/buildout - export COVERAGE_FILE=.coverage.django diff --git a/beat/web/accounts/urls.py b/beat/web/accounts/urls.py index dd7c08297f36c58639736e9ab65e09004c900c4d..0d32cda0d887e97571346c103f069b1cba0e5d1f 100644 --- a/beat/web/accounts/urls.py +++ b/beat/web/accounts/urls.py @@ -25,7 +25,7 @@ # # ############################################################################### -from django.conf.urls import patterns, url +from django.conf.urls import url from . import views urlpatterns = [ diff --git a/beat/web/algorithms/views.py b/beat/web/algorithms/views.py index 62f3ace9d5e86f73f57a28f8e99d3a5f49f1717a..c64cbf44fa1094eda76cbdf73b7459d5696c927f 100755 --- a/beat/web/algorithms/views.py +++ b/beat/web/algorithms/views.py @@ -27,8 +27,7 @@ from django.http import Http404, HttpResponseForbidden from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.contrib.auth.decorators import login_required from django.conf import settings from django.contrib.auth.models import User @@ -95,9 +94,7 @@ def create(request, name=None): declaration['language'] = 'python' parameters['declaration'] = json.dumps(declaration) - return render_to_response('algorithms/edition.html', - parameters, - context_instance=RequestContext(request)) + return render(request, 'algorithms/edition.html', parameters) #---------------------------------------------------------- @@ -144,9 +141,7 @@ def fork(request, author, name, version): if not fork_of.is_binary(): parameters['source_code'] = fork_of.source_code_file.read() - return render_to_response('algorithms/edition.html', - parameters, - context_instance=RequestContext(request)) + return render(request, 'algorithms/edition.html', parameters) #---------------------------------------------------------- @@ -193,9 +188,7 @@ def edit(request, author, name, version): if not algorithm.is_binary(): parameters['source_code'] = algorithm.source_code_file.read() - return render_to_response('algorithms/edition.html', - parameters, - context_instance=RequestContext(request)) + return render(request, 'algorithms/edition.html', parameters) #---------------------------------------------------------- @@ -232,14 +225,14 @@ def view(request, author, name, version=None): users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') # Render the page - return render_to_response('algorithms/view.html', - { - 'algorithm': algorithm, - 'owner': owner, - 'users': users, - 'teams': Team.objects.for_user(request.user, True) - }, - context_instance=RequestContext(request)) + return render(request, + 'algorithms/view.html', + { + 'algorithm': algorithm, + 'owner': owner, + 'users': users, + 'teams': Team.objects.for_user(request.user, True) + }) #---------------------------------------------------------- @@ -250,15 +243,15 @@ def diff(request, author1, name1, version1, author2, name2, version2): retrieve the details about the algorithms and check the accessibility. """ - return render_to_response('algorithms/diff.html', - {'algorithm1_author': author1, - 'algorithm1_name': name1, - 'algorithm1_version': version1, - 'algorithm2_author': author2, - 'algorithm2_name': name2, - 'algorithm2_version': version2, - }, - context_instance=RequestContext(request)) + return render(request, + 'algorithms/diff.html', + {'algorithm1_author': author1, + 'algorithm1_name': name1, + 'algorithm1_version': version1, + 'algorithm2_author': author2, + 'algorithm2_name': name2, + 'algorithm2_version': version2, + }) #---------------------------------------------------------- @@ -277,14 +270,13 @@ def ls(request, author_name): author_name).order_by('-creation_date') objects = Algorithm.filter_latest_versions(objects) - return render_to_response('algorithms/list.html', - dict( - objects=objects, - author=author, - owner=(request.user==author), - ), - context_instance=RequestContext(request), - ) + return render(request, + 'algorithms/list.html', + dict( + objects=objects, + author=author, + owner=(request.user == author) + )) #---------------------------------------------------------- @@ -297,11 +289,10 @@ def public_ls(request): objects = Algorithm.objects.public().order_by('-creation_date') objects = Algorithm.filter_latest_versions(objects) - return render_to_response('algorithms/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'algorithms/list.html', + dict( + objects=objects, + author=request.user, # anonymous + owner=False + )) diff --git a/beat/web/attestations/views.py b/beat/web/attestations/views.py index 64e73a0ed72ff1f1a6e6ffda729ff754951ae52d..62d10e536c612962eaad659349b70a8f64fcb619 100644 --- a/beat/web/attestations/views.py +++ b/beat/web/attestations/views.py @@ -31,8 +31,7 @@ from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.contrib.auth.models import User from django.db.models import Q @@ -46,13 +45,13 @@ def view(request, number): (has_access, _) = attestation.experiment.accessibility_for(request.user) # Render the page - return render_to_response('attestations/view.html', - dict( - attestation=attestation, - has_access=has_access, - owner=(attestation.experiment.author == request.user), - ), - context_instance=RequestContext(request)) + return render(request, + 'attestations/view.html', + dict( + attestation=attestation, + has_access=has_access, + owner=(attestation.experiment.author == request.user) + )) def ls(request, author_name): @@ -75,14 +74,13 @@ def ls(request, author_name): objects = objects.order_by('-locked', 'expiration_date') - return render_to_response('attestations/list.html', - dict( - objects=objects, - author=author, - owner=(request.user==author), - ), - context_instance=RequestContext(request), - ) + return render(request, + 'attestations/list.html', + dict( + objects=objects, + author=author, + owner=(request.user == author) + )) def public_ls(request): @@ -91,11 +89,10 @@ def public_ls(request): # orders so that recent objects are displayed first objects = Attestation.objects.filter(locked=False).order_by('-publication_date') - return render_to_response('attestations/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'attestations/list.html', + dict( + objects=objects, + author=request.user, # anonymous + owner=False, + )) diff --git a/beat/web/backend/views.py b/beat/web/backend/views.py index 94a71e5513337ca9e146b82e29c9bbf4b8df9759..de7bd1fb6ea08991373b083b477a9ec686ecc28c 100755 --- a/beat/web/backend/views.py +++ b/beat/web/backend/views.py @@ -36,8 +36,7 @@ from django.http import Http404, HttpResponseRedirect from django.conf import settings from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.contrib.auth.decorators import login_required from django.http import HttpResponseForbidden from django.contrib import messages @@ -81,18 +80,18 @@ def scheduler(request): if request.GET.has_key('period'): refreshing_period = int(request.GET['period']) - return render_to_response('backend/scheduler.html', - dict( - jobs=state.jobs(), - experiments=state.experiments(), - workers=Worker.objects.order_by('-active', 'name'), - queues=Queue.objects.order_by('memory_limit', 'max_slots_per_user'), - cache_chart_data=simplejson.dumps(cache_chart_data), - cache_gb=cache_gb, - helper_panel=getattr(settings, 'SCHEDULING_PANEL', False), - refreshing_period=refreshing_period, - ), - context_instance=RequestContext(request)) + return render(request, + 'backend/scheduler.html', + dict( + jobs=state.jobs(), + experiments=state.experiments(), + workers=Worker.objects.order_by('-active', 'name'), + queues=Queue.objects.order_by('memory_limit', 'max_slots_per_user'), + cache_chart_data=simplejson.dumps(cache_chart_data), + cache_gb=cache_gb, + helper_panel=getattr(settings, 'SCHEDULING_PANEL', False), + refreshing_period=refreshing_period + )) #------------------------------------------------ @@ -109,11 +108,9 @@ def environment(request, name, version): raise Http404() # Render the page - return render_to_response('backend/environment.html', - { - 'environment': environment, - }, - context_instance=RequestContext(request)) + return render(request, + 'backend/environment.html', + {'environment': environment}) #---------------------------------------------------------- @@ -125,15 +122,13 @@ def list_environments(request): objects = Environment.objects.for_user(request.user, True).filter(active=True).order_by('-creation_date') # Render the page - return render_to_response( - 'backend/environment_list.html', - dict( - objects=objects, - author=request.user, - owner=True, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'backend/environment_list.html', + dict( + objects=objects, + author=request.user, + owner=True + )) diff --git a/beat/web/databases/views.py b/beat/web/databases/views.py index 88d37e553728974ecb5d58c281ba1eec95d46b82..b2e22661ff6f14fe271bf932755d341adb9ab823 100644 --- a/beat/web/databases/views.py +++ b/beat/web/databases/views.py @@ -26,8 +26,7 @@ ############################################################################### from django.http import Http404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from .models import Database @@ -48,10 +47,9 @@ def view(request, name, version=None): raise Http404 # Render the page - return render_to_response('databases/view.html', - {'database': database, - }, - context_instance=RequestContext(request)) + return render(request, + 'databases/view.html', + {'database': database}) def ls(request): @@ -61,11 +59,10 @@ def ls(request): objects = Database.objects.for_user(request.user, True).order_by('-creation_date') objects = Database.filter_latest_versions(objects) - return render_to_response('databases/list.html', - dict( - objects=objects, - author=request.user, - owner=True, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'databases/list.html', + dict( + objects=objects, + author=request.user, + owner=True, + )) diff --git a/beat/web/dataformats/serializers.py b/beat/web/dataformats/serializers.py index a296776e9df18ef4b199d0a7a81851a1d42380b7..68fee96f423c4a9288da3ab288e3bf5adf046f9e 100644 --- a/beat/web/dataformats/serializers.py +++ b/beat/web/dataformats/serializers.py @@ -52,7 +52,8 @@ class BaseSerializer(DynamicFieldsSerializer): name = serializers.CharField(source="fullname") accessibility = serializers.SerializerMethodField() - class Meta: + class Meta(DynamicFieldsSerializer.Meta): + fields = '__all__' default_fields = ['name', 'short_description', 'accessibility'] def get_accessibility(self, obj): diff --git a/beat/web/dataformats/views.py b/beat/web/dataformats/views.py index 63665106eb10ccf6c8e3ef03819518d97035049f..2140eda27dc4a51889a925df5abb0e99e9a0d111 100644 --- a/beat/web/dataformats/views.py +++ b/beat/web/dataformats/views.py @@ -29,8 +29,7 @@ from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.http import Http404 from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.views.decorators.csrf import csrf_protect from django.contrib.auth.decorators import login_required from django.conf import settings @@ -133,14 +132,14 @@ def create(request, name=None): form = CreationForm(**form_args) - return render_to_response('dataformats/edition.html', - { - 'form': form, - 'object': previous_version, - 'op': 'new-version' if previous_version else 'new', - 'edition': False, - }, - context_instance=RequestContext(request)) + return render(request, + 'dataformats/edition.html', + { + 'form': form, + 'object': previous_version, + 'op': 'new-version' if previous_version else 'new', + 'edition': False, + }) #---------------------------------------------------------- @@ -210,13 +209,13 @@ def fork(request, author, name, version): form = CreationForm(**form_args) - return render_to_response('dataformats/edition.html', - { - 'form': form, - 'object': fork_of, - 'op': 'fork', - }, - context_instance=RequestContext(request)) + return render(request, + 'dataformats/edition.html', + { + 'form': form, + 'object': fork_of, + 'op': 'fork', + }) #---------------------------------------------------------- @@ -287,12 +286,12 @@ def edit(request, author, name, version): form = UpdateForm(**form_args) - return render_to_response('dataformats/edition.html', - {'form': form, - 'op': 'edit', - 'object': dataformat, - }, - context_instance=RequestContext(request)) + return render(request, + 'dataformats/edition.html', + {'form': form, + 'op': 'edit', + 'object': dataformat, + }) #---------------------------------------------------------- @@ -328,14 +327,14 @@ def view(request, author, name, version=None): users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') # Render the page - return render_to_response('dataformats/view.html', - { - 'dataformat': dataformat, - 'owner': owner, - 'users': users, - 'teams': Team.objects.for_user(request.user, True) - }, - context_instance=RequestContext(request)) + return render(request, + 'dataformats/view.html', + { + 'dataformat': dataformat, + 'owner': owner, + 'users': users, + 'teams': Team.objects.for_user(request.user, True) + }) #---------------------------------------------------------- @@ -351,15 +350,15 @@ def diff(request, author1, name1, version1, author2, name2, version2): """ - return render_to_response('dataformats/diff.html', - {'dataformat1_author': author1, - 'dataformat1_name': name1, - 'dataformat1_version': version1, - 'dataformat2_author': author2, - 'dataformat2_name': name2, - 'dataformat2_version': version2, - }, - context_instance=RequestContext(request)) + return render(request, + 'dataformats/diff.html', + {'dataformat1_author': author1, + 'dataformat1_name': name1, + 'dataformat1_version': version1, + 'dataformat2_author': author2, + 'dataformat2_name': name2, + 'dataformat2_version': version2, + }) #---------------------------------------------------------- @@ -378,14 +377,13 @@ def ls(request, author_name): author_name).order_by('-creation_date') objects = DataFormat.filter_latest_versions(objects) - return render_to_response('dataformats/list.html', - dict( - objects=objects, - author=author, - owner=(request.user==author), - ), - context_instance=RequestContext(request), - ) + return render(request, + 'dataformats/list.html', + dict( + objects=objects, + author=author, + owner=(request.user == author) + )) #---------------------------------------------------------- @@ -398,11 +396,10 @@ def public_ls(request): objects = DataFormat.objects.public().order_by('-creation_date') objects = DataFormat.filter_latest_versions(objects) - return render_to_response('dataformats/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'dataformats/list.html', + dict( + objects=objects, + author=request.user, #anonymous + owner=False, + )) diff --git a/beat/web/experiments/serializers.py b/beat/web/experiments/serializers.py index c9fde18c0b22dc936eb7ac5cd5c550dce6978249..c873f1e3cdc85dd9f40c562d309177adf5e166cf 100755 --- a/beat/web/experiments/serializers.py +++ b/beat/web/experiments/serializers.py @@ -59,6 +59,7 @@ class ExperimentSerializer(ShareableSerializer): class Meta: model = Experiment + fields = '__all__' default_fields = ShareableSerializer.Meta.default_fields + ['name', 'toolchain', 'datasets', 'short_description', 'creation_date', 'start_date', 'end_date', @@ -148,6 +149,7 @@ class AnalyzerSerializer(serializers.ModelSerializer): class Meta: model = Block + fields = '__all__' def get_results(self, obj): results = {} @@ -187,6 +189,7 @@ class BlockErrorSerializer(serializers.ModelSerializer): class Meta: model = Block + fields = '__all__' #---------------------------------------------------------- @@ -211,6 +214,7 @@ class ExperimentResultsSerializer(ShareableSerializer): class Meta(ShareableSerializer.Meta): model = Experiment + fields = '__all__' default_fields = ['started', 'done', 'failed', 'status', 'blocks_status', 'results', 'attestation', 'declaration', 'errors', 'sharing', 'accessibility', diff --git a/beat/web/experiments/views.py b/beat/web/experiments/views.py index 576af7f573ba291773ed46f4b8b1bc00d1838720..94059074eada47a499bf9ac0bef853723e08c313 100644 --- a/beat/web/experiments/views.py +++ b/beat/web/experiments/views.py @@ -26,9 +26,8 @@ ############################################################################### from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response, redirect +from django.shortcuts import render, redirect from django.http import Http404 -from django.template import RequestContext from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User from django.conf import settings @@ -59,14 +58,12 @@ def new_from_toolchain(request, toolchain_author_name, toolchain_name, has_access = toolchain.accessibility_for(request.user)[0] if not(has_access): raise Http404() - return render_to_response( - 'experiments/setup.html', - { - 'toolchain': toolchain, - 'action': 'new', - }, - context_instance=RequestContext(request), - ) + return render(request, + 'experiments/setup.html', + { + 'toolchain': toolchain, + 'action': 'new', + }) #---------------------------------------------------------- @@ -91,15 +88,13 @@ def fork(request, author_name, toolchain_author_name, (has_access, accessibility) = experiment.accessibility_for(request.user) if not(has_access): raise Http404() - return render_to_response( - 'experiments/setup.html', - { - 'toolchain': experiment.toolchain, - 'experiment': experiment, - 'action': 'fork', - }, - context_instance=RequestContext(request), - ) + return render(request, + 'experiments/setup.html', + { + 'toolchain': experiment.toolchain, + 'experiment': experiment, + 'action': 'fork', + }) #---------------------------------------------------------- @@ -146,30 +141,26 @@ def view(request, author_name, toolchain_author_name, toolchain_name, if experiment.status == Experiment.PENDING: if request.user.is_anonymous(): raise Http404() - return render_to_response( - 'experiments/setup.html', - { - 'toolchain': experiment.toolchain, - 'experiment': experiment, - 'action': 'pending', - }, - context_instance=RequestContext(request), - ) + return render(request, + 'experiments/setup.html', + { + 'toolchain': experiment.toolchain, + 'experiment': experiment, + 'action': 'pending', + }) # Users the object can be shared with users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') # The experiment was already done, show results - return render_to_response( - 'experiments/view.html', - { - 'experiment': experiment, - 'owner': experiment.author == request.user, - 'users': users, - 'teams': Team.objects.for_user(request.user, True) - }, - context_instance=RequestContext(request), - ) + return render(request, + 'experiments/view.html', + { + 'experiment': experiment, + 'owner': experiment.author == request.user, + 'users': users, + 'teams': Team.objects.for_user(request.user, True) + }) #---------------------------------------------------------- @@ -193,14 +184,13 @@ def ls(request, author_name): owner = (request.user == author) - return render_to_response('experiments/list.html', - dict( - objects=objects, - author=author, - owner=owner, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'experiments/list.html', + dict( + objects=objects, + author=author, + owner=owner, + )) #---------------------------------------------------------- @@ -212,11 +202,10 @@ def public_ls(request): # orders so that recent objects are displayed first objects = Experiment.objects.public().exclude(status=Experiment.PENDING).annotate(updated=Coalesce('end_date', 'start_date', 'creation_date')).order_by('-updated') - return render_to_response('experiments/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'experiments/list.html', + dict( + objects=objects, + author=request.user, #anonymous + owner=False, + )) diff --git a/beat/web/libraries/views.py b/beat/web/libraries/views.py index 38ce49142a28690e2e91b5296bda90620d2daf2b..79b3af4402372e611954a9e03c966c916fe29d6b 100644 --- a/beat/web/libraries/views.py +++ b/beat/web/libraries/views.py @@ -27,8 +27,7 @@ from django.http import Http404, HttpResponseForbidden from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.views.decorators.csrf import csrf_protect from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User @@ -55,14 +54,13 @@ def create(request): visible_libraries = Library.objects.from_author_and_public(request.user, request.user.username).order_by('-creation_date') - return render_to_response('libraries/edition.html', - dict( - op="new", - texts=Messages, - visible_libraries=visible_libraries, - ), - context_instance=RequestContext(request) - ) + return render(request, + 'libraries/edition.html', + dict( + op="new", + texts=Messages, + visible_libraries=visible_libraries, + )) @csrf_protect @@ -81,15 +79,14 @@ def new_version(request, name): visible_libraries = Library.objects.from_author_and_public(request.user, request.user.username).order_by('-creation_date') - return render_to_response('libraries/edition.html', - dict( - op="new-version", - texts=Messages, - library=previous_version[0], - visible_libraries=visible_libraries, - ), - context_instance=RequestContext(request) - ) + return render(request, + 'libraries/edition.html', + dict( + op="new-version", + texts=Messages, + library=previous_version[0], + visible_libraries=visible_libraries, + )) @csrf_protect @@ -119,14 +116,14 @@ def fork(request, author_name, name, version): visible_libraries = Library.objects.from_author_and_public(request.user, request.user.username).order_by('-creation_date') - return render_to_response('libraries/edition.html', - dict( - op="fork", - texts=Messages, - library=fork_of, - visible_libraries=visible_libraries, - ), - context_instance=RequestContext(request)) + return render(request, + 'libraries/edition.html', + dict( + op="fork", + texts=Messages, + library=fork_of, + visible_libraries=visible_libraries, + )) #---------------------------------------------------------- @@ -153,14 +150,14 @@ def edit(request, author_name, name, version): visible_libraries = Library.objects.from_author_and_public(request.user, request.user.username).exclude(id=library.id).order_by('-creation_date') - return render_to_response('libraries/edition.html', - dict( - op="edit", - texts=Messages, - library=library, - visible_libraries=visible_libraries, - ), - context_instance=RequestContext(request)) + return render(request, + 'libraries/edition.html', + dict( + op="edit", + texts=Messages, + library=library, + visible_libraries=visible_libraries, + )) #---------------------------------------------------------- @@ -195,14 +192,14 @@ def view(request, author_name, name, version=None): users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') # Render the page - return render_to_response('libraries/view.html', - { - 'library': library, - 'owner': owner, - 'users': users, - 'teams': Team.objects.all(), - }, - context_instance=RequestContext(request)) + return render(request, + 'libraries/view.html', + { + 'library': library, + 'owner': owner, + 'users': users, + 'teams': Team.objects.all(), + }) #---------------------------------------------------------- @@ -218,15 +215,15 @@ def diff(request, author1, name1, version1, author2, name2, version2): """ - return render_to_response('libraries/diff.html', - {'library1_author': author1, - 'library1_name': name1, - 'library1_version': version1, - 'library2_author': author2, - 'library2_name': name2, - 'library2_version': version2, - }, - context_instance=RequestContext(request)) + return render(request, + 'libraries/diff.html', + {'library1_author': author1, + 'library1_name': name1, + 'library1_version': version1, + 'library2_author': author2, + 'library2_name': name2, + 'library2_version': version2, + }) #---------------------------------------------------------- @@ -245,14 +242,13 @@ def ls(request, author_name): author_name).order_by('-creation_date') objects = Library.filter_latest_versions(objects) - return render_to_response('libraries/list.html', - dict( - objects=objects, - author=author, - owner=(request.user==author), - ), - context_instance=RequestContext(request), - ) + return render(request, + 'libraries/list.html', + dict( + objects=objects, + author=author, + owner=(request.user==author), + )) #---------------------------------------------------------- @@ -265,11 +261,10 @@ def public_ls(request): objects = Library.objects.public().order_by('-creation_date') objects = Library.filter_latest_versions(objects) - return render_to_response('libraries/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'libraries/list.html', + dict( + objects=objects, + author=request.user, #anonymous + owner=False, + )) diff --git a/beat/web/navigation/views.py b/beat/web/navigation/views.py index d291dbc212ecf36aec1985a15d5e3631b6af9483..40989eab44659ae1033d44e1066b8e964cc88378 100644 --- a/beat/web/navigation/views.py +++ b/beat/web/navigation/views.py @@ -25,10 +25,8 @@ # # ############################################################################### -from django.shortcuts import render_to_response -from django.shortcuts import get_object_or_404 -from django.template import RequestContext, Context, loader -from django.contrib import messages +from django.shortcuts import render +from django.template import Context, loader from django.conf import settings from .middleware import remove_banner_message @@ -50,11 +48,9 @@ def terms_of_service(request): settings.LEGAL_DISCLAIMER_VERSION remove_banner_message(request) - return render_to_response( - 'navigation/terms_of_service.html', - dict(contents=contents), - context_instance=RequestContext(request), - ) + return render(request, + 'navigation/terms_of_service.html', + dict(contents=contents)) #------------------------------------------------ @@ -77,11 +73,9 @@ def legal_disclaimer(request): remove_banner_message(request) - return render_to_response( - 'navigation/legal_disclaimer.html', - dict(contents=contents), - context_instance=RequestContext(request), - ) + return render(request, + 'navigation/legal_disclaimer.html', + dict(contents=contents)) @@ -91,8 +85,4 @@ def legal_disclaimer(request): def contact(request): '''Returns an HTML page with the contact information''' - return render_to_response( - 'navigation/contact.html', - dict(), - context_instance=RequestContext(request), - ) + return render(request, 'navigation/contact.html') diff --git a/beat/web/plotters/serializers.py b/beat/web/plotters/serializers.py index e6a6ce109494b25d89c7489448999c2c89c5f898..3577c9f5397c29c28bf4f49ed6bd206bef2ecb70 100644 --- a/beat/web/plotters/serializers.py +++ b/beat/web/plotters/serializers.py @@ -101,6 +101,7 @@ class FullPlotterSerializer(PlotterAllSerializer): class Meta(PlotterAllSerializer.Meta): default_fields = PlotterAllSerializer.Meta.default_fields + PlotterAllSerializer.Meta.extra_fields + exclude = [] #---------------------------------------------------------- @@ -117,7 +118,7 @@ class PlotterParameterCreationSerializer(ContributionCreationSerializer): def create(self, validated_data): plotterparameter = None - + if not validated_data.has_key("name"): raise serializers.ValidationError('No name provided') @@ -131,7 +132,7 @@ class PlotterParameterCreationSerializer(ContributionCreationSerializer): if not self.data.has_key("plotter"): raise serializers.ValidationError('No plotter provided') - + plotter = None try: plotter = Plotter.objects.get(id=self.data['plotter']) diff --git a/beat/web/plotters/views.py b/beat/web/plotters/views.py index 71a9b270454d53146e9993a8ca0d78070395de91..2bf1c23623e060130f1fc72e89c6c66cd24d64d7 100644 --- a/beat/web/plotters/views.py +++ b/beat/web/plotters/views.py @@ -37,9 +37,9 @@ import simplejson from django.http import HttpResponse, HttpResponseForbidden, HttpResponseBadRequest from django.conf import settings -from django.shortcuts import render_to_response +from django.shortcuts import render from django.shortcuts import get_object_or_404 -from django.template import RequestContext, Context +from django.template import Context from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User from django.views.generic import TemplateView @@ -614,14 +614,14 @@ def view(request, author, name, version=None): users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') # Render the page - return render_to_response('plotters/view.html', - { - 'plotter': plotter, - 'owner': owner, - 'users': users, - 'teams': Team.objects.for_user(request.user, True) - }, - context_instance=RequestContext(request)) + return render(request, + 'plotters/view.html', + { + 'plotter': plotter, + 'owner': owner, + 'users': users, + 'teams': Team.objects.for_user(request.user, True) + }) #---------------------------------------------------------- @@ -639,14 +639,14 @@ def list_plotters(request): objects=Plotter.objects.from_author_and_public(request.user,request.user.username) owner=(request.user==author) - return render_to_response('plotters/list.html', - dict( - objects=objects, - author=author, - owner=owner, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotters/list.html', + dict( + objects=objects, + author=author, + owner=owner, + )) + #---------------------------------------------------------- @@ -657,14 +657,13 @@ def list_plotters_public(request): # orders so that objects with latest information are displayed first objects=Plotter.objects.public().order_by('-creation_date') - return render_to_response('plotters/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotters/list.html', + dict( + objects=objects, + author=request.user, #anonymous + owner=False, + )) #---------------------------------------------------------- @@ -681,14 +680,13 @@ def list_plotterparameters(request, author_name): owner=(request.user==author) - return render_to_response('plotterparameters/list.html', - dict( - objects=objects, - author=author, - owner=owner, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotterparameters/list.html', + dict( + objects=objects, + author=author, + owner=owner, + )) #---------------------------------------------------------- @@ -701,14 +699,13 @@ def list_plotterparameters_public(request): objects = PlotterParameter.objects.public().order_by('-creation_date') objects = PlotterParameter.filter_latest_versions(objects) - return render_to_response('plotterparameters/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotterparameters/list.html', + dict( + objects=objects, + author=request.user, #anonymous + owner=False, + )) #---------------------------------------------------------- @@ -725,14 +722,13 @@ def plotterparameter_latest(request, author, name): objects = PlotterParameter.filter_latest_versions(objects) - return render_to_response('plotterparameters/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotterparameters/list.html', + dict( + objects=objects, + author=request.user, #anonymous + owner=False, + )) @@ -758,18 +754,18 @@ def plotterparameter_for_author(request, author_name, plotterparameter_name, ver # Users the object can be shared with users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') - return render_to_response('plotterparameters/plotterparameter.html', - { - 'author' : author_name, - 'plotterparameter_name' : plotterparameter_name, - 'owner' : (request.user == obj.author), - 'users': users, - 'teams': Team.objects.for_user(request.user, True), - 'plotterparameter' : obj, - 'plotter_origin' : plotter_origin, - 'USE_HTTPS_GRAVATAR': settings.USE_HTTPS_GRAVATAR, - }, - context_instance=RequestContext(request)) + return render(request, + 'plotterparameters/plotterparameter.html', + { + 'author' : author_name, + 'plotterparameter_name' : plotterparameter_name, + 'owner' : (request.user == obj.author), + 'users': users, + 'teams': Team.objects.for_user(request.user, True), + 'plotterparameter' : obj, + 'plotter_origin' : plotter_origin, + 'USE_HTTPS_GRAVATAR': settings.USE_HTTPS_GRAVATAR, + }) #---------------------------------------------------------- @@ -798,14 +794,14 @@ def diff(request, author1, name1, version1, author2, name2, version2): has_access, _ = plotterparameter2.accessibility_for(request.user) if not has_access: raise Http404() - return render_to_response('plotterparameters/diff.html', - { - 'plotterparameter1': plotterparameter1, - 'plotterparameter1_data': simplejson.loads(plotterparameter1.data), - 'plotterparameter2': plotterparameter2, - 'plotterparameter2_data': simplejson.loads(plotterparameter2.data), - }, - context_instance=RequestContext(request)) + return render(request, + 'plotterparameters/diff.html', + { + 'plotterparameter1': plotterparameter1, + 'plotterparameter1_data': simplejson.loads(plotterparameter1.data), + 'plotterparameter2': plotterparameter2, + 'plotterparameter2_data': simplejson.loads(plotterparameter2.data), + }) #---------------------------------------------------------- @@ -822,17 +818,16 @@ def create_plotterparameter(request, author_name): owner=(request.user==author) - return render_to_response('plotterparameters/plotterparameter.html', - dict( - objects=objects, - author=author, - owner=owner, - plotterparameter_name="CREATION_MODE", - plotterparameter="CREATION_MODE", - USE_HTTPS_GRAVATAR=settings.USE_HTTPS_GRAVATAR, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotterparameters/plotterparameter.html', + dict( + objects=objects, + author=author, + owner=owner, + plotterparameter_name="CREATION_MODE", + plotterparameter="CREATION_MODE", + USE_HTTPS_GRAVATAR=settings.USE_HTTPS_GRAVATAR, + )) #------------------------------------------------ @@ -877,17 +872,16 @@ def create_new_version(request, author_name=None, plotterparameter_name=None, ve declaration, errors = prototypes.load('toolchain') parameters['declaration'] = simplejson.dumps(declaration) - return render_to_response('plotterparameters/plotterparameter.html', - dict( - author=request.user.username, - parameters=parameters, - plotterparameter_name=plotterparameter_name, - plotterparameter=plotterparameter, - owner=(request.user == plotterparameter.author), - plotterparameter_mode="NEW_VERSION_MODE", - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotterparameters/plotterparameter.html', + dict( + author=request.user.username, + parameters=parameters, + plotterparameter_name=plotterparameter_name, + plotterparameter=plotterparameter, + owner=(request.user == plotterparameter.author), + plotterparameter_mode="NEW_VERSION_MODE", + )) @login_required @@ -918,17 +912,16 @@ def fork(request, author_name, plotterparameter_name, version): 'request_user': request.user.username, } - return render_to_response('plotterparameters/plotterparameter.html', - dict( - author=request.user.username, - parameters=parameters, - plotterparameter_name=plotterparameter_name, - plotterparameter=fork_of, - owner=(request.user == fork_of.author), - plotterparameter_mode="FORK_MODE", - ), - context_instance=RequestContext(request), - ) + return render(request, + 'plotterparameters/plotterparameter.html', + dict( + author=request.user.username, + parameters=parameters, + plotterparameter_name=plotterparameter_name, + plotterparameter=fork_of, + owner=(request.user == fork_of.author), + plotterparameter_mode="FORK_MODE", + )) diff --git a/beat/web/reports/views.py b/beat/web/reports/views.py index 59aa872b8999d91a7bc7f0fee627561b32b3d8d7..1ad7f06d82108824578e6f4d150e864a80507515 100644 --- a/beat/web/reports/views.py +++ b/beat/web/reports/views.py @@ -25,9 +25,9 @@ # # ############################################################################### -from django.shortcuts import render_to_response, redirect +from django.shortcuts import render, redirect from django.shortcuts import get_object_or_404 -from django.template import RequestContext, Context +from django.template import Context from django.conf import settings from django.views.generic import TemplateView from django.contrib.auth.models import User @@ -73,15 +73,15 @@ def by_number(request, number): # return 404 raise Http404('No %s matches the given query.' % Report._meta.object_name) - return render_to_response('reports/report.html', - { - 'report_number' : number, - 'owner': False, - 'report': obj, - 'USE_HTTPS_GRAVATAR': settings.USE_HTTPS_GRAVATAR, - 'show_actionbar': show_actionbar(request, obj) - }, - context_instance=RequestContext(request)) + return render(request, + 'reports/report.html', + { + 'report_number' : number, + 'owner': False, + 'report': obj, + 'USE_HTTPS_GRAVATAR': settings.USE_HTTPS_GRAVATAR, + 'show_actionbar': show_actionbar(request, obj) + }) #------------------------------------------------ @@ -106,16 +106,16 @@ def for_author(request, author_name, report_name): # only valid when the author is accessing it and its editable if isEditable and isAuthor: - return render_to_response('reports/report.html', - { - 'author' : author_name, - 'report_name' : report_name, - 'owner' : (request.user == obj.author), - 'report' : obj, - 'USE_HTTPS_GRAVATAR': settings.USE_HTTPS_GRAVATAR, - 'show_actionbar': show_actionbar(request, obj) - }, - context_instance=RequestContext(request)) + return render(request, + 'reports/report.html', + { + 'author' : author_name, + 'report_name' : report_name, + 'owner' : (request.user == obj.author), + 'report' : obj, + 'USE_HTTPS_GRAVATAR': settings.USE_HTTPS_GRAVATAR, + 'show_actionbar': show_actionbar(request, obj) + }) # return 404 raise Http404('No %s matches the given query.' % Report._meta.object_name) @@ -142,14 +142,13 @@ def ls(request, author_name): objects = objects.annotate(updated=Coalesce('publication_date', 'creation_date',)).order_by('-updated') - return render_to_response('reports/list.html', - dict( - objects=objects, - author=author, - owner=owner, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'reports/list.html', + dict( + objects=objects, + author=author, + owner=owner, + )) #------------------------------------------------ @@ -162,14 +161,13 @@ def public_ls(request): objects = objects.annotate(updated=Coalesce('publication_date', 'creation_date',)).order_by('-updated') - return render_to_response('reports/list.html', - dict( - objects=objects, - author=request.user, - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'reports/list.html', + dict( + objects=objects, + author=request.user, + owner=False, + )) #------------------------------------------------ diff --git a/beat/web/search/models.py b/beat/web/search/models.py index 5577c5637eb682bbe049d88ba45aa33618487b1f..f70b392b3024a52ffa1b3630c3b774b2348ae67c 100644 --- a/beat/web/search/models.py +++ b/beat/web/search/models.py @@ -132,7 +132,6 @@ class Leaderboard(models.Model): notify = models.ManyToManyField(User, limit_choices_to={'is_active': True}, blank=True, help_text='If set, and the leader board changes, an e-mail notification will be sent to people on this list, every time it changes.') experiments = models.ManyToManyField(Experiment, - limit_choices_to={'status': Experiment.DONE}, through='Rank', related_name='leaderboards', blank=True, diff --git a/beat/web/search/views.py b/beat/web/search/views.py index 2e139be5bb17d24378570053954252a405c266ea..19a7f34a008c13bda621276b8c50cbb0b659ca69 100644 --- a/beat/web/search/views.py +++ b/beat/web/search/views.py @@ -26,9 +26,8 @@ ############################################################################### from django.http import Http404 -from django.shortcuts import render_to_response, redirect +from django.shortcuts import render, redirect from django.shortcuts import get_object_or_404 -from django.template import RequestContext from django.conf import settings from django.contrib.auth.models import User from django.db.models import Count @@ -285,16 +284,16 @@ def search(request): if 'settings' in request.POST: #overrules the other two display_settings = request.POST['settings'].strip() - return render_to_response('search/view.html', - dict( - search=None, - owner=False, - filters=filters, - settings=display_settings, - results=search_experiments(request.user, json.loads(filters)), - URL_PREFIX=settings.URL_PREFIX, - ), - context_instance=RequestContext(request)) + return render(request, + 'search/view.html', + dict( + search=None, + owner=False, + filters=filters, + settings=display_settings, + results=search_experiments(request.user, json.loads(filters)), + URL_PREFIX=settings.URL_PREFIX, + )) #------------------------------------------------ @@ -327,19 +326,18 @@ def view(request, author_name, query_name): # Users the object can be shared with users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') - return render_to_response('search/view.html', - { - 'search': obj, - 'owner': (request.user == obj.author), - 'filters': filters, - 'settings': display_settings, - 'results': search_experiments(request.user, json.loads(filters)), - 'URL_PREFIX': settings.URL_PREFIX, - 'users': users, - 'teams': Team.objects.for_user(request.user, True) - }, - context_instance=RequestContext(request), - ) + return render(request, + 'search/view.html', + { + 'search': obj, + 'owner': (request.user == obj.author), + 'filters': filters, + 'settings': display_settings, + 'results': search_experiments(request.user, json.loads(filters)), + 'URL_PREFIX': settings.URL_PREFIX, + 'users': users, + 'teams': Team.objects.for_user(request.user, True) + }) #---------------------------------------------------------- @@ -357,14 +355,13 @@ def ls(request, author_name): objects = Search.objects.from_author_and_public(request.user, author_name).order_by('-creation_date') - return render_to_response('search/list.html', - dict( - objects=objects, - author=author, - owner=(request.user==author), - ), - context_instance=RequestContext(request), - ) + return render(request, + 'search/list.html', + dict( + objects=objects, + author=author, + owner=(request.user==author), + )) #---------------------------------------------------------- @@ -376,14 +373,13 @@ def public_ls(request): # orders searchs so that the latest information is displayed first objects = Search.objects.public().order_by('-creation_date') - return render_to_response('search/list.html', - dict( - objects=objects, - author=request.user, - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'search/list.html', + dict( + objects=objects, + author=request.user, + owner=False, + )) #---------------------------------------------------------- diff --git a/beat/web/settings/settings.py b/beat/web/settings/settings.py index d27a2aca26a20e5d742e2172b6282b4a54452bb9..355efa685036a48c67eb3c4d7061fca0bf3274b6 100755 --- a/beat/web/settings/settings.py +++ b/beat/web/settings/settings.py @@ -300,7 +300,7 @@ TEMPLATES = [ 'OPTIONS': { 'context_processors': [ 'django.contrib.auth.context_processors.auth', - 'django.core.context_processors.request', + 'django.template.context_processors.request', 'django.template.context_processors.csrf', 'django.contrib.messages.context_processors.messages', 'beat.web.navigation.context_processors.exported_settings', @@ -313,10 +313,13 @@ TEMPLATES = [ ] MIDDLEWARE_CLASSES = ( + 'django.middleware.security.SecurityMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'beat.web.navigation.middleware.AgreementMiddleware', ) diff --git a/beat/web/statistics/views.py b/beat/web/statistics/views.py index 616fdcb5ed419e2b3b84e490b07c3ef0fded9c90..f35426c98e89f4bce02b135980109020c10e80b2 100644 --- a/beat/web/statistics/views.py +++ b/beat/web/statistics/views.py @@ -31,14 +31,14 @@ import itertools import simplejson -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.contrib.auth.decorators import login_required from django.http import HttpResponseForbidden from django.db.models import Sum from .models import HourlyStatistics + def calculate_totals(): """Caculates all totals required by the statistics display""" @@ -269,11 +269,11 @@ def statistics(request): if not(request.user.is_superuser): return HttpResponseForbidden() - return render_to_response('statistics/statistics.html', - dict( - totals=calculate_totals(), - hourly_chart_data=hourly_charts(), - daily_chart_data=daily_charts(), - weekly_chart_data=weekly_charts(), - ), - context_instance=RequestContext(request)) + return render(request, + 'statistics/statistics.html', + dict( + totals=calculate_totals(), + hourly_chart_data=hourly_charts(), + daily_chart_data=daily_charts(), + weekly_chart_data=weekly_charts(), + )) diff --git a/beat/web/team/views.py b/beat/web/team/views.py index 902eb1b68159f3e3f656bd3725cb661b30d5c4c7..1bdcdb342f7a714a0d4873cf42f0952af6fe46ea 100644 --- a/beat/web/team/views.py +++ b/beat/web/team/views.py @@ -28,9 +28,7 @@ from django.conf import settings from django.shortcuts import get_object_or_404 from django.shortcuts import render -from django.shortcuts import render_to_response from django.contrib.auth.decorators import login_required -from django.template import RequestContext from django.contrib.auth.models import User from django.http import Http404 @@ -47,11 +45,11 @@ def create(request): The user must be authenticated before it can add a new team """ - return render_to_response('team/edition.html', - { - 'users': User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username'), - }, - context_instance=RequestContext(request)) + return render(request, + 'team/edition.html', + { + 'users': User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username'), + }) #---------------------------------------------------------- @@ -72,12 +70,12 @@ def edit(request, author_name, name): name__iexact=name ) - return render_to_response('team/edition.html', - { - 'team': team, - 'users': User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username'), - }, - context_instance=RequestContext(request)) + return render(request, + 'team/edition.html', + { + 'team': team, + 'users': User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username'), + }) #---------------------------------------------------------- @@ -110,14 +108,13 @@ def ls(request, author_name): else: objects = Team.objects.for_user(request.user, True).filter(owner=author) - return render_to_response('team/list.html', - dict( - objects=objects, - author=author, - owner=(request.user == author), - ), - context_instance=RequestContext(request), - ) + return render(request, + 'team/list.html', + dict( + objects=objects, + author=author, + owner=(request.user == author), + )) #---------------------------------------------------------- @@ -126,11 +123,10 @@ def ls(request, author_name): def public_ls(request): '''List all accessible teams to the request user''' - return render_to_response('team/list.html', - dict( - objects=Team.objects.public(), - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'team/list.html', + dict( + objects=Team.objects.public(), + author=request.user, #anonymous + owner=False, + )) diff --git a/beat/web/toolchains/views.py b/beat/web/toolchains/views.py index 51c7458cd2154fc0317513f74f2e57c4da986d59..55ffa8b42527fd1df2c620eb2813f1f4e49d3bd3 100644 --- a/beat/web/toolchains/views.py +++ b/beat/web/toolchains/views.py @@ -27,8 +27,7 @@ from django.http import Http404 from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.contrib.auth.decorators import login_required from django.conf import settings from django.contrib.auth.models import User @@ -85,9 +84,9 @@ def create(request, name=None): declaration, errors = prototypes.load('toolchain') parameters['declaration'] = json.dumps(declaration) - return render_to_response('toolchains/edition.html', - parameters, - context_instance=RequestContext(request)) + return render(request, + 'toolchains/edition.html', + parameters) @login_required @@ -118,9 +117,9 @@ def fork(request, author, name, version): 'messages': Messages, } - return render_to_response('toolchains/edition.html', - parameters, - context_instance=RequestContext(request)) + return render(request, + 'toolchains/edition.html', + parameters) @login_required @@ -143,19 +142,19 @@ def edit(request, author, name, version): description = toolchain.description # Render the page - return render_to_response('toolchains/edition.html', - {'toolchain_author': request.user.username, - 'toolchain_name': name, - 'toolchain_version': toolchain.version, - 'declaration': toolchain.declaration_string.replace('\n', ''), - 'short_description': toolchain.short_description, - 'description': description.replace('\n', '\\n'), - 'html_description': restructuredtext(description).replace('\n', ''), - 'errors': toolchain.errors.replace('\n', '\\n') if toolchain.errors is not None else '', - 'edition': True, - 'messages': Messages, - }, - context_instance=RequestContext(request)) + return render(request, + 'toolchains/edition.html', + {'toolchain_author': request.user.username, + 'toolchain_name': name, + 'toolchain_version': toolchain.version, + 'declaration': toolchain.declaration_string.replace('\n', ''), + 'short_description': toolchain.short_description, + 'description': description.replace('\n', '\\n'), + 'html_description': restructuredtext(description).replace('\n', ''), + 'errors': toolchain.errors.replace('\n', '\\n') if toolchain.errors is not None else '', + 'edition': True, + 'messages': Messages, + }) def view(request, author, name, version=None): @@ -194,15 +193,15 @@ def view(request, author, name, version=None): users = User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username') # Render the page - return render_to_response('toolchains/view.html', - { - 'toolchain': toolchain, - 'owner': owner, - 'reports': reports, - 'users': users, - 'teams': Team.objects.for_user(request.user, True) - }, - context_instance=RequestContext(request)) + return render(request, + 'toolchains/view.html', + { + 'toolchain': toolchain, + 'owner': owner, + 'reports': reports, + 'users': users, + 'teams': Team.objects.for_user(request.user, True) + }) def diff(request, author1, name1, version1, author2, name2, version2): @@ -228,12 +227,12 @@ def diff(request, author1, name1, version1, author2, name2, version2): has_access, _ = toolchain2.accessibility_for(request.user) if not has_access: raise Http404() - return render_to_response('toolchains/diff.html', - { - 'toolchain1': toolchain1, - 'toolchain2': toolchain2, - }, - context_instance=RequestContext(request)) + return render(request, + 'toolchains/diff.html', + { + 'toolchain1': toolchain1, + 'toolchain2': toolchain2, + }) def ls(request, author_name): @@ -249,14 +248,13 @@ def ls(request, author_name): author_name).order_by('-creation_date') objects = Toolchain.filter_latest_versions(objects) - return render_to_response('toolchains/list.html', - dict( - objects=objects, - author=author, - owner=(request.user==author), - ), - context_instance=RequestContext(request), - ) + return render(request, + 'toolchains/list.html', + dict( + objects=objects, + author=author, + owner=(request.user==author), + )) def public_ls(request): @@ -266,11 +264,10 @@ def public_ls(request): objects = Toolchain.objects.public().order_by('-creation_date') objects = Toolchain.filter_latest_versions(objects) - return render_to_response('toolchains/list.html', - dict( - objects=objects, - author=request.user, #anonymous - owner=False, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'toolchains/list.html', + dict( + objects=objects, + author=request.user, #anonymous + owner=False, + )) diff --git a/beat/web/ui/registration/views.py b/beat/web/ui/registration/views.py index 2db209b71d0ef42d46917eb380654209983d73fd..e1701e8135d4833af5db952eb7544dec3fda19c5 100644 --- a/beat/web/ui/registration/views.py +++ b/beat/web/ui/registration/views.py @@ -34,8 +34,7 @@ Views which allow users to create and activate accounts. from django.conf import settings from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.views.decorators.csrf import csrf_protect from .forms import RegistrationFormTermsOfService @@ -97,10 +96,10 @@ def activate(request, activation_key, context = RequestContext(request) for key, value in extra_context.items(): context[key] = callable(value) and value() or value - return render_to_response(template_name, - { 'account': account, - 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS }, - context_instance=context) + return render(request, + template_name, + { 'account': account, + 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS }) @csrf_protect @@ -203,12 +202,11 @@ def register(request, success_url=None, for key, value in extra_context.items(): context[key] = callable(value) and value() or value - return render_to_response( - template_name, - { - 'form': form, - 'form_supervisor': form_supervisor, - 'supervisor_form_active': supervisor_form_active, - 'url_prefix':settings.URL_PREFIX, - }, - context_instance=context) + return render(request, + template_name, + { + 'form': form, + 'form_supervisor': form_supervisor, + 'supervisor_form_active': supervisor_form_active, + 'url_prefix':settings.URL_PREFIX, + }) diff --git a/beat/web/ui/templatetags/fingerprint.py b/beat/web/ui/templatetags/fingerprint.py index 10f827ca6e9e61ff1744c04eb89cd3f770128a69..4d0e69db7bf58b53fab59fbd0b36dc56876b3989 100644 --- a/beat/web/ui/templatetags/fingerprint.py +++ b/beat/web/ui/templatetags/fingerprint.py @@ -26,7 +26,9 @@ ############################################################################### from django import template -from django.contrib.staticfiles.templatetags.staticfiles import StaticFilesNode +from django.templatetags.static import StaticNode +from django.contrib.staticfiles.storage import staticfiles_storage + from ... import __version__ @@ -36,10 +38,12 @@ register = template.Library() #-------------------------------------------------- -class FingerprintedFilesNode(StaticFilesNode): +class FingerprintedFilesNode(StaticNode): def url(self, context): - return super(FingerprintedFilesNode, self).url(context) + '?v' + __version__ + path = self.path.resolve(context) + url = staticfiles_storage.url(path) + return url + '?v' + __version__ #-------------------------------------------------- diff --git a/beat/web/ui/views.py b/beat/web/ui/views.py index 6ad045ce523a24d0a26ca4b9a92b05c31f3c99a4..bcffa5f04fee31299894711fdb4f997ce267485a 100755 --- a/beat/web/ui/views.py +++ b/beat/web/ui/views.py @@ -27,8 +27,7 @@ from django.shortcuts import get_object_or_404 -from django.shortcuts import render_to_response -from django.template import RequestContext +from django.shortcuts import render from django.template import loader from django.template import Context from django.contrib.auth.views import login as django_login @@ -63,8 +62,7 @@ logger = logging.getLogger(__name__) def index(request): '''Our main index page''' - return render_to_response('ui/index.html', - context_instance=RequestContext(request)) + return render(request, 'ui/index.html') #---------------------------------------------------------- @@ -190,8 +188,9 @@ def blocked_user_reactivation(request): else: form = BlockedUserRevalidationForm() - return render_to_response('registration/blocked_user_reactivate.html', {'form': form}, - context_instance=RequestContext(request)) + return render(request, + 'registration/blocked_user_reactivate.html', + {'form': form}) #---------------------------------------------------------- @@ -263,15 +262,14 @@ def activity_stream(request, author_name): # 2. request.user != author leaderboards = Leaderboard.objects.filter(search__in=Search.objects.for_user(request.user).filter(author=author)).order_by('-changed') - return render_to_response('ui/activity_stream.html', - dict( - owner = (request.user == author), - author= author, - statistics= gather_contributions(request.user, author), - leaderboards= leaderboards, - ), - context_instance=RequestContext(request), - ) + return render(request, + 'ui/activity_stream.html', + dict( + owner = (request.user == author), + author= author, + statistics= gather_contributions(request.user, author), + leaderboards= leaderboards, + )) #---------------------------------------------------------- @@ -350,25 +348,25 @@ def user_settings(request): password_change_form = PasswordChangeForm(user=user) - return render_to_response('ui/user_settings.html', - { - 'password_change_form': password_change_form, - 'token' : user.auth_token, - 'statistics' : { - 'nb_experiments': user.experiments.count(), - 'nb_public_experiments': user.experiments.filter(sharing=Shareable.PUBLIC).count(), - 'nb_attested_experiments': user.experiments.filter(~Q(attestation=None)).count(), - 'nb_toolchains': user.toolchains.count(), - 'nb_public_toolchains': user.toolchains.filter(sharing=Shareable.PUBLIC).count(), - 'nb_algorithms': user.algorithms.count(), - 'nb_public_algorithms': user.algorithms.filter(sharing=Shareable.PUBLIC).count(), - 'nb_libraries': user.algorithms.count(), - 'nb_public_libraries': user.librarys.filter(sharing=Shareable.PUBLIC).count(), - 'nb_dataformats': user.dataformats.count(), - 'nb_public_dataformats': user.dataformats.filter(sharing=Shareable.PUBLIC).count(), - }, - }, - context_instance=RequestContext(request)) + return render(request, + 'ui/user_settings.html', + { + 'password_change_form': password_change_form, + 'token' : user.auth_token, + 'statistics' : { + 'nb_experiments': user.experiments.count(), + 'nb_public_experiments': user.experiments.filter(sharing=Shareable.PUBLIC).count(), + 'nb_attested_experiments': user.experiments.filter(~Q(attestation=None)).count(), + 'nb_toolchains': user.toolchains.count(), + 'nb_public_toolchains': user.toolchains.filter(sharing=Shareable.PUBLIC).count(), + 'nb_algorithms': user.algorithms.count(), + 'nb_public_algorithms': user.algorithms.filter(sharing=Shareable.PUBLIC).count(), + 'nb_libraries': user.algorithms.count(), + 'nb_public_libraries': user.librarys.filter(sharing=Shareable.PUBLIC).count(), + 'nb_dataformats': user.dataformats.count(), + 'nb_public_dataformats': user.dataformats.filter(sharing=Shareable.PUBLIC).count(), + }, + }) #---------------------------------------------------------- diff --git a/beat/web/urls.py b/beat/web/urls.py index d7d626b32c84ebab706a864fc3c14c50af54610a..3c09aead55c42532ac3b3859df681e9f0d7615f2 100755 --- a/beat/web/urls.py +++ b/beat/web/urls.py @@ -30,6 +30,8 @@ from django.conf import settings from django.views.generic import TemplateView from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from rest_framework_swagger.views import get_swagger_view + from .ui import urls as ui_urls from .navigation import urls as navigation_urls @@ -38,6 +40,8 @@ from urlparse import urlparse from django.contrib import admin admin.autodiscover() +schema_view = get_swagger_view(title='BEAT API') + # Views unprefixed_patterns = ui_urls.urlpatterns unprefixed_patterns += navigation_urls.urlpatterns @@ -103,7 +107,7 @@ unprefixed_patterns += [ url(r'^admin/', include(admin.site.urls)), url(r'^docs/', - include('rest_framework_swagger.urls', namespace='docs'), + schema_view ), url(r'^activity/', diff --git a/buildout.cfg b/buildout.cfg index b46762413fe23b350c01af24fff69ff7c3adc896..cdc4dc392376d79dbb35d01089efc5a91a326508 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -16,11 +16,12 @@ develop = . versions = versions [versions] -django = >=1.9,<1.10 -django-rest-swagger = >=0.3.2,<0.3.3 +django = >=1.11,<2.0 +django-rest-swagger = >2.1 django-guardian = >=1.3 -djangorestframework = >=3.2,<3.3 -django-activity-stream = >= 0.6.0 +djangorestframework = >3.7 +django-activity-stream = >= 0.6.5 +django-jsonield = >= 1.0.1 [sysegg] recipe = syseggrecipe