diff --git a/beat/web/reports/api.py b/beat/web/reports/api.py index 0cd920858bb71bcb6fa0964c72cae80041065a0b..2a38acc8f751e431faf1c0a469f162a7f2dac295 100644 --- a/beat/web/reports/api.py +++ b/beat/web/reports/api.py @@ -505,3 +505,44 @@ class ReportResultsView(CommonContextMixin, generics.RetrieveAPIView): results[experiment.fullname()] = serializer.data return Response(results) + + +#---------------------------------------------------------- + + +class ReportResultsAllExperimentsView(CommonContextMixin, generics.RetrieveAPIView): + model = Report + serializer_class = ExperimentResultsSerializer + permission_classes = [permissions.IsAuthenticated, IsAuthor] + + def get_queryset(self): + owner_name = self.kwargs.get('owner_name') + report_name = self.kwargs.get('report_name') + + report = get_object_or_404(Report, author__username=owner_name, name=report_name) + + self.check_object_permissions(self.request, report) + + return report + + def get(self, request, owner_name=None, report_name=None, number=None): + report = self.get_queryset() + + results = {} + + report_content = json.loads(report.content) + + if not report_content.has_key("alias_experiments"): + report_content["alias_experiments"] = {} + + for experiment in report.experiments.iterator(): + serializer = self.get_serializer(experiment, fields=['results', 'blocks_status', 'execution_info', 'declaration']) + if not report_content["alias_experiments"].has_key(experiment.fullname()): + report_content["alias_experiments"][experiment.fullname()] = experiment.name + + if report.status == Report.LOCKED: + results[report_content["alias_experiments"][experiment.fullname()]] = serializer.data + else: + results[experiment.fullname()] = serializer.data + + return Response(results) diff --git a/beat/web/reports/api_urls.py b/beat/web/reports/api_urls.py index 7c4caeae91186de83d65ece7b8873ddf84655e9b..f8d4017819df11bc44cd09b3717f8fe273008e06 100644 --- a/beat/web/reports/api_urls.py +++ b/beat/web/reports/api_urls.py @@ -48,6 +48,12 @@ urlpatterns = [ name='results' ), + url( + r'^(?P<owner_name>\w+)/(?P<report_name>[\w\W]+)/results_author/$', + api.ReportResultsAllExperimentsView.as_view(), + name='results' + ), + url( r'^(?P<owner_name>\w+)/$', api.UserReportListView.as_view(), diff --git a/beat/web/reports/static/reports/app/controllers/reportController.js b/beat/web/reports/static/reports/app/controllers/reportController.js index f107843acd9fa806555a4e2845c89a79b79382f2..eb94a86ae0b9ecf4c7da185b7ed3f3e26ead5226 100644 --- a/beat/web/reports/static/reports/app/controllers/reportController.js +++ b/beat/web/reports/static/reports/app/controllers/reportController.js @@ -75,18 +75,37 @@ app.controller('reportController',['$scope', 'reportFactory', 'experimentFactory { $scope.report = reportData; $scope.report.url_prefix = $scope.url_prefix; + var experiments = $scope.report.experiments; - if(experiments != undefined) + if($scope.report.content.alias_experiments != undefined) { - for (var i = 0; i < experiments.length ; i++) - { - getExperimentData(experiments[i]); - //$state.go("beat.reportInfo") - } + $scope.report_experiments_alias = $scope.report.content.alias_experiments; + } + var promises = []; + + function lastTask(){ getPlotters(); } + if(experiments != undefined) + { + promises.push(getExperimentDataForAuthor(experiments)); + $scope.q.all(promises).then(lastTask); + } + + + //if(experiments != undefined) + //{ + // for (var i = 0; i < experiments.length ; i++) + // { + // getExperimentData(experiments[i]); + // //$state.go("beat.reportInfo") + // } + + // getPlotters(); + //} + }) .error(function (error) { @@ -173,6 +192,39 @@ app.controller('reportController',['$scope', 'reportFactory', 'experimentFactory }) } + function getExperimentDataForAuthor(all_experiments) + { + experimentFactory.getAllExperimentResultsForAuthor($scope.user, $scope.report_id, $scope.url_prefix) + .then(function (experiments) + { + $scope.report_experiments = experiments; + $scope.report.all_experiments = experiments; + var experiment_aliases = Object.keys(experiments); + for(var i = 0; i < experiment_aliases.length; i++) + { + var experiment_alias = experiment_aliases[i]; + + if($scope.report.content.alias_experiments != undefined) + { + if($scope.report.content.alias_experiments[experiment_alias] != undefined) + { + setExperimentAliasFromContent(experiment_alias, $scope.report.content.alias_experiments[experiment_alias]); + } + else + { + setExperimentAlias(experiment_alias); + } + } + else + { + setExperimentAlias(experiment_alias); + } + intersectBlocks(experiment_alias); + algorithmParameters(experiment_alias); + } + }) + } + function getExperimentData(experiment_id) { diff --git a/beat/web/reports/static/reports/app/factories/experimentFactory.js b/beat/web/reports/static/reports/app/factories/experimentFactory.js index 5d61a9ffb7e00f99015c0464e19720ea19b04dd7..b80feaae54b00caccc5f2a21c775b686d1ade1ec 100644 --- a/beat/web/reports/static/reports/app/factories/experimentFactory.js +++ b/beat/web/reports/static/reports/app/factories/experimentFactory.js @@ -32,6 +32,15 @@ app.factory('experimentFactory', function($http, $q) }); }, + getAllExperimentResultsForAuthor: function (user, report_id, url_prefix) + { + urlBase = url_prefix + '/api/v1/reports'; + return $http.get(urlBase + '/' + user + '/' + report_id + '/results_author/') + .then(function(response){ + return response.data; + }); + }, + getAllExperimentResults: function (url_prefix, report_number) { urlBase = url_prefix + '/api/v1/reports';