From c417f44c2b514bc44669194653dafc2fd18e1f05 Mon Sep 17 00:00:00 2001 From: Istvan Soos Date: Thu, 21 Jun 2018 16:05:44 +0200 Subject: [PATCH 1/3] Proposal: ScoreCard model --- app/lib/scorecard/models.dart | 118 ++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 app/lib/scorecard/models.dart diff --git a/app/lib/scorecard/models.dart b/app/lib/scorecard/models.dart new file mode 100644 index 0000000000..ce499689fc --- /dev/null +++ b/app/lib/scorecard/models.dart @@ -0,0 +1,118 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:convert'; +import 'dart:io'; + +import 'package:gcloud/db.dart' as db; +import 'package:meta/meta.dart'; + +import 'package:pub_dartlang_org/search/scoring.dart' + show calculateOverallScore; + +import '../shared/model_properties.dart'; + +String _id(String packageName, String packageVersion) => + '$packageName/$packageVersion'; + +final _gzipCodec = new GZipCodec(); + +/// Summary of various reports for a given PackageVersion. +@db.Kind(name: 'ScoreCard', idType: db.IdType.String) +class ScoreCard extends db.ExpandoModel { + @db.StringProperty(required: true) + String packageName; + + @db.StringProperty(required: true) + String packageVersion; + + @db.DateTimeProperty(required: true) + DateTime packageCreated; + + @db.DateTimeProperty(required: true) + DateTime packageVersionCreated; + + @db.BoolProperty() + bool isDiscontinued; + + @CompatibleStringListProperty() + List panaPlatformTags; + + @db.DoubleProperty() + double documentationScore; + + @db.DoubleProperty() + double healthScore; + + @db.DoubleProperty() + double maintenanceScore; + + @db.DoubleProperty() + double popularityScore; + + @db.DoubleProperty() + double overallScore; + + ScoreCard(); + + ScoreCard.init({ + @required this.packageName, + @required this.packageVersion, + @required this.packageCreated, + @required this.packageVersionCreated, + }) { + id = _id(packageName, packageVersion); + } + + void updateOverallScore() { + // TODO: use documentationScore too + overallScore = calculateOverallScore( + health: healthScore ?? 0.0, + maintenance: maintenanceScore ?? 0.0, + popularity: popularityScore ?? 0.0, + ); + } +} + +/// Detail of a specific report for a given PackageVersion. +@db.Kind(name: 'ScoreCardReport', idType: db.IdType.String) +class ScoreCardReport extends db.ExpandoModel { + @db.StringProperty(required: true) + String packageName; + + @db.StringProperty(required: true) + String packageVersion; + + @db.StringProperty(required: true) + String reportType; + + @db.BlobProperty() + List reportJsonGz; + + ScoreCardReport(); + + ScoreCardReport.init({ + @required this.packageName, + @required this.packageVersion, + @required this.reportType, + }) { + parentKey = db.dbService.emptyKey + .append(ScoreCard, id: _id(packageName, packageVersion)); + id = reportType; + } + + Map get reportJson { + if (reportJsonGz == null) return null; + return json.decode(utf8.decode(_gzipCodec.decode(reportJsonGz))) + as Map; + } + + set reportJson(Map map) { + if (map == null) { + reportJsonGz = null; + } else { + reportJsonGz = _gzipCodec.encode(utf8.encode(json.encode(map))); + } + } +} From 2504d8f21da4a291aa078c36bda71e370101a312 Mon Sep 17 00:00:00 2001 From: Istvan Soos Date: Thu, 28 Jun 2018 15:53:56 +0200 Subject: [PATCH 2/3] Documentation --- app/lib/scorecard/models.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/lib/scorecard/models.dart b/app/lib/scorecard/models.dart index ce499689fc..3c038c4c1b 100644 --- a/app/lib/scorecard/models.dart +++ b/app/lib/scorecard/models.dart @@ -33,21 +33,27 @@ class ScoreCard extends db.ExpandoModel { @db.DateTimeProperty(required: true) DateTime packageVersionCreated; + /// Whether the package has its discontinued flag set. @db.BoolProperty() bool isDiscontinued; + /// The platform tags (flutter, web, other) set by `pana` analysis. @CompatibleStringListProperty() List panaPlatformTags; + /// Score for documentation coverage (0.0 - 1.0). @db.DoubleProperty() double documentationScore; + /// Score for code health (0.0 - 1.0). @db.DoubleProperty() double healthScore; + /// Score for package maintenance (0.0 - 1.0). @db.DoubleProperty() double maintenanceScore; + /// Score for package popularity (0.0 - 1.0). @db.DoubleProperty() double popularityScore; From fd0f200a45a805f2acdc7b3a0705f1b51921c265 Mon Sep 17 00:00:00 2001 From: Istvan Soos Date: Thu, 28 Jun 2018 15:54:49 +0200 Subject: [PATCH 3/3] Move overallScore to a getter field. --- app/lib/scorecard/models.dart | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/app/lib/scorecard/models.dart b/app/lib/scorecard/models.dart index 3c038c4c1b..13c56448cd 100644 --- a/app/lib/scorecard/models.dart +++ b/app/lib/scorecard/models.dart @@ -57,9 +57,6 @@ class ScoreCard extends db.ExpandoModel { @db.DoubleProperty() double popularityScore; - @db.DoubleProperty() - double overallScore; - ScoreCard(); ScoreCard.init({ @@ -71,14 +68,13 @@ class ScoreCard extends db.ExpandoModel { id = _id(packageName, packageVersion); } - void updateOverallScore() { - // TODO: use documentationScore too - overallScore = calculateOverallScore( - health: healthScore ?? 0.0, - maintenance: maintenanceScore ?? 0.0, - popularity: popularityScore ?? 0.0, - ); - } + double get overallScore => + // TODO: use documentationScore too + calculateOverallScore( + health: healthScore ?? 0.0, + maintenance: maintenanceScore ?? 0.0, + popularity: popularityScore ?? 0.0, + ); } /// Detail of a specific report for a given PackageVersion.