jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/401824 )
Change subject: Rename and cleanup Scoring.php
......................................................................
Rename and cleanup Scoring.php
Bug: T184142
Change-Id: Ic756af5f7978e8fa8db464dbd17698b6ff15cd2f
---
M includes/FetchScoreJob.php
M includes/Hooks.php
M includes/Hooks/ApiHooksHandler.php
M includes/Parser/ScoreParser.php
R includes/ScoreFetcher.php
A includes/ScoreLookup.php
M maintenance/PopulateDatabase.php
R tests/phpunit/includes/ScoreFetcherTest.php
8 files changed, 88 insertions(+), 37 deletions(-)
Approvals:
jenkins-bot: Verified
Awight: Looks good to me, approved
diff --git a/includes/FetchScoreJob.php b/includes/FetchScoreJob.php
index 83e831d..6bdc88b 100644
--- a/includes/FetchScoreJob.php
+++ b/includes/FetchScoreJob.php
@@ -68,7 +68,7 @@
}
$logger->info( 'Fetching scores for revision ' . json_encode(
$this->params ) );
- $scoring = Scoring::instance();
+ $scoring = ScoreFetcher::instance();
if ( isset( $this->params['originalRequest'] ) ) {
$scoring->setOriginalRequest(
$this->params['originalRequest'] );
}
@@ -77,14 +77,14 @@
} else {
$models = null;
}
- $scores = $scoring->getScores( $this->params['revid'], $models,
$this->params['extra_params'] );
+ $scores = $scoring->getScores( $this->params['revid'], $models,
$this->params['precache'] );
$scoreStorage = MediaWikiServices::getInstance()->getService(
'ORESScoreStorage' );
$success = true;
$scoreStorage->storeScores(
$scores,
function ( $mssg, $revision ) use ( &$success, $logger
) {
- $logger->warning( "Scoring errored for
$revision: $mssg\n" );
+ $logger->warning( "ScoreFetcher errored for
$revision: $mssg\n" );
$success = false;
}
);
diff --git a/includes/Hooks.php b/includes/Hooks.php
index 9e4d751..f0161cf 100644
--- a/includes/Hooks.php
+++ b/includes/Hooks.php
@@ -102,7 +102,7 @@
'userAgent' => $request->getHeader(
'User-Agent' ),
],
'models' => $models,
- 'extra_params' => [ 'precache' => 'true' ],
+ 'precache' => true,
] );
JobQueueGroup::singleton()->push( $job );
$logger->debug( 'Job pushed for {revid}', [
diff --git a/includes/Hooks/ApiHooksHandler.php
b/includes/Hooks/ApiHooksHandler.php
index a1ea636..cc43094 100644
--- a/includes/Hooks/ApiHooksHandler.php
+++ b/includes/Hooks/ApiHooksHandler.php
@@ -35,7 +35,7 @@
use ORES\FetchScoreJob;
use ORES\Hooks;
use ORES\Parser\ScoreParser;
-use ORES\Scoring;
+use ORES\ScoreFetcher;
use ORES\WatchedItemQueryServiceExtension;
use RequestContext;
use Title;
@@ -322,7 +322,7 @@
}
}
- $loadedScores = Scoring::instance()->getScores( $revids
);
+ $loadedScores = ScoreFetcher::instance()->getScores(
$revids );
// Filter loaded scores to store cacheable ones
$cacheableScores = array_intersect_key( $loadedScores,
array_flip( $cacheableRevids ) );
@@ -361,7 +361,7 @@
} catch ( InvalidArgumentException $exception ) {
$logger = LoggerFactory::getInstance( 'ORES' );
$mssg = $exception->getMessage();
- $logger->info( "Scoring errored for $revid: $mssg\n" );
+ $logger->info( "ScoreFetcher errored for $revid:
$mssg\n" );
return [];
}
$scores = [];
diff --git a/includes/Parser/ScoreParser.php b/includes/Parser/ScoreParser.php
index 7075d2a..65e4597 100644
--- a/includes/Parser/ScoreParser.php
+++ b/includes/Parser/ScoreParser.php
@@ -37,11 +37,11 @@
}
/**
- * Convert data returned by Scoring::getScores() into
ores_classification rows
+ * Convert data returned by ScoreFetcher::getScores() into
ores_classification rows
*
* @note No row is generated for class 0
* @param int $revision Revision being processed
- * @param array $revisionData Data returned by Scoring::getScores() for
the revision.
+ * @param array $revisionData Data returned by
ScoreFetcher::getScores() for the revision.
*
* @return array[]
* @throws RuntimeException
diff --git a/includes/Scoring.php b/includes/ScoreFetcher.php
similarity index 76%
rename from includes/Scoring.php
rename to includes/ScoreFetcher.php
index 34e4a59..4d3d8b3 100644
--- a/includes/Scoring.php
+++ b/includes/ScoreFetcher.php
@@ -19,20 +19,22 @@
use MediaWiki\MediaWikiServices;
use WebRequest;
-class Scoring {
+class ScoreFetcher implements ScoreLookup {
+
/** @var WebRequest|string[]|null */
private $originalRequest;
/**
- * @param int|array $revisions Single or multiple revisions
- * @param string|array|null $models Single or multiple model names. If
- * left empty, all configured models are queries.
- * @param array $extra_params to be passed to ORES endpoint
+ * @see ScoreLookup::getScores()
*
- * @return array Results in the form returned by ORES
- * @throws \RuntimeException
+ * @param int|array $revisions Single or multiple revisions
+ * @param string|array|null $models Single or multiple model names. If
+ * left empty, all configured models are queried.
+ * @param bool $precache either the request is made for precaching or
not
+ *
+ * @return array Results in the form returned by ORES API
*/
- public function getScores( $revisions, $models = null, array
$extra_params = [] ) {
+ public function getScores( $revisions, $models = null, $precache =
false ) {
if ( !$models ) {
global $wgOresModels;
$models = array_keys( array_filter( $wgOresModels ) );
@@ -42,6 +44,9 @@
'models' => implode( '|', (array)$models ),
'revids' => implode( '|', (array)$revisions ),
];
+ if ( $precache === true ) {
+ $params['precache'] = true;
+ }
if ( $this->originalRequest === null ) {
$api = Api::newFromContext();
@@ -49,22 +54,27 @@
$api = new Api();
$api->setOriginalRequest( $this->originalRequest );
}
- $wireData = $api->request( array_merge( $params, $extra_params
) );
- // Dig down to the scores.
+ $wireData = $api->request( $params );
+
$wikiId = Api::getWikiID();
if ( array_key_exists( 'models', $wireData[$wikiId] ) ) {
- foreach ( $wireData[$wikiId]['models'] as $model =>
$modelOutputs ) {
- $responseVersion = $this->checkModelVersion(
$model, $modelOutputs );
- if ( $responseVersion !== null ) {
- $this->updateModelVersion( $model,
$responseVersion );
- }
- }
-
+ $this->checkAndUpdateModels(
$wireData[$wikiId]['models'] );
}
- $wireData = $wireData[$wikiId]['scores'];
- return $wireData;
+ return $wireData[$wikiId]['scores'];
+ }
+
+ /**
+ * @param array $modelData Model information returned by the API
+ */
+ private function checkAndUpdateModels( array $modelData ) {
+ foreach ( $modelData as $model => $modelOutputs ) {
+ $responseVersion = $this->checkModelVersion( $model,
$modelOutputs );
+ if ( $responseVersion !== null ) {
+ $this->updateModelVersion( $model,
$responseVersion );
+ }
+ }
}
/**
diff --git a/includes/ScoreLookup.php b/includes/ScoreLookup.php
new file mode 100644
index 0000000..12e65cf
--- /dev/null
+++ b/includes/ScoreLookup.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace ORES;
+
+use RuntimeException;
+
+/**
+ * Service interface for retrieving score data from storage or API.
+ *
+ * @license GPL-2.0+
+ */
+interface ScoreLookup {
+
+ /**
+ * Method to retrieve scores of given revision and models
+ *
+ * @param int|array $revisions Single or multiple revisions
+ * @param string|array|null $models Single or multiple model names. If
+ * left empty, all configured models are queried.
+ * @param bool $precache either the request is made for precaching or
not
+ *
+ * @return array Results in the form returned by ORES API
+ * @throws RuntimeException
+ */
+ public function getScores( $revisions, $models = null, $precache =
false );
+
+}
diff --git a/maintenance/PopulateDatabase.php b/maintenance/PopulateDatabase.php
index af9a481..5d40017 100644
--- a/maintenance/PopulateDatabase.php
+++ b/maintenance/PopulateDatabase.php
@@ -43,7 +43,7 @@
public function execute() {
global $wgOresExcludeBots, $wgOresRevisionsPerBatch;
- $scoring = Scoring::instance();
+ $scoring = ScoreFetcher::instance();
/** @var ScoreStorage $scoreStorage */
$scoreStorage = MediaWikiServices::getInstance()->getService(
'ORESScoreStorage' );
$this->batchSize = $this->getOption( 'batch', 5000 );
@@ -104,10 +104,10 @@
* Process several edits and store the scores in the database
*
* @param array $revs array of revision ids
- * @param Scoring $scoring
+ * @param ScoreFetcher $scoring
* @param ScoreStorage $scoreStorage service to store scores in
persistence layer
*/
- private function processScores( array $revs, Scoring $scoring,
ScoreStorage $scoreStorage ) {
+ private function processScores( array $revs, ScoreFetcher $scoring,
ScoreStorage $scoreStorage ) {
$size = count( $revs );
$this->output( "Processing $size revisions\n" );
@@ -115,7 +115,7 @@
$scoreStorage->storeScores(
$scores,
function ( $mssg, $revision ) {
- $this->output( "Scoring errored for $revision:
$mssg\n" );
+ $this->output( "ScoreFetcher errored for
$revision: $mssg\n" );
}
);
}
diff --git a/tests/phpunit/includes/ScoringTest.php
b/tests/phpunit/includes/ScoreFetcherTest.php
similarity index 91%
rename from tests/phpunit/includes/ScoringTest.php
rename to tests/phpunit/includes/ScoreFetcherTest.php
index cb600ff..84d8d58 100644
--- a/tests/phpunit/includes/ScoringTest.php
+++ b/tests/phpunit/includes/ScoreFetcherTest.php
@@ -2,15 +2,15 @@
namespace ORES\Tests;
-use ORES\Scoring;
+use ORES\ScoreFetcher;
use ORES\Storage\HashModelLookup;
/**
* @group ORES
* @group Database
- * @covers ORES\Scoring
+ * @covers ORES\ScoreFetcher
*/
-class ScoringTest extends \MediaWikiTestCase {
+class ScoreFetcherTest extends \MediaWikiTestCase {
const REVERTED = 2;
const DAMAGING = 3;
@@ -41,7 +41,7 @@
* @dataProvider provideTestCheckModelVersion
*/
public function testCheckModelVersion( $expected, $model, array
$response ) {
- $scoring = Scoring::instance();
+ $scoring = ScoreFetcher::instance();
$this->assertSame( $expected, $scoring->checkModelVersion(
$model, $response ) );
}
@@ -56,7 +56,7 @@
],
__METHOD__
);
- $scoring = Scoring::instance();
+ $scoring = ScoreFetcher::instance();
$scoring->updateModelVersion( 'damaging', '0.0.4' );
$res = wfGetDB( DB_REPLICA )->select(
--
To view, visit https://gerrit.wikimedia.org/r/401824
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic756af5f7978e8fa8db464dbd17698b6ff15cd2f
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/ORES
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <[email protected]>
Gerrit-Reviewer: Awight <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits