jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/352864 )
Change subject: Import constraint parameters from qualifiers
......................................................................
Import constraint parameters from qualifiers
The updater job is kept very simple: it just serializes all qualifiers
and adds them all to the parameters. Interpreting those qualifiers
(starting with mapping their property IDs to parameter meanings) is then
left to the individual checkers, and done in a separate commit.
A test is added to test the parameter extraction method; for a full test
of importing a complete constraint with parameters, we have to wait
until we have config variables for some constraint types that take
parameters, as well as for those parameters. This will happen in a later
commit.
Change-Id: I6e5428187fc9d0c3137ca1fb0b20c18567c4698c
---
M composer.json
M includes/UpdateConstraintsTableJob.php
M tests/phpunit/Job/UpdateConstraintsTableJobTest.php
3 files changed, 86 insertions(+), 5 deletions(-)
Approvals:
Jonas Kress (WMDE): Looks good to me, approved
jenkins-bot: Verified
diff --git a/composer.json b/composer.json
index b290983..295cd28 100644
--- a/composer.json
+++ b/composer.json
@@ -17,7 +17,8 @@
"php": ">=5.5.9",
"serialization/serialization": "^3.2.1",
"wikibase/data-model": "~4.2|~5.0|~6.0|~7.0",
- "wikibase/data-model-services": "~2.0|~3.0"
+ "wikibase/data-model-services": "~2.0|~3.0",
+ "wikibase/data-model-serialization": "^2.0.0"
},
"require-dev": {
"jakub-onderka/php-console-highlighter": "0.3.2",
diff --git a/includes/UpdateConstraintsTableJob.php
b/includes/UpdateConstraintsTableJob.php
index 5238a9c..d7b428c 100644
--- a/includes/UpdateConstraintsTableJob.php
+++ b/includes/UpdateConstraintsTableJob.php
@@ -8,7 +8,13 @@
use MediaWiki\MediaWikiServices;
use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\SerializerFactory;
+use Wikibase\DataModel\Serializers\SnakSerializer;
use Wikibase\DataModel\Services\Lookup\EntityLookup;
+use Wikibase\DataModel\Snak\PropertyValueSnak;
+use Wikibase\DataModel\Snak\PropertyNoValueSnak;
+use Wikibase\DataModel\Snak\PropertySomeValueSnak;
+use Wikibase\DataModel\Snak\SnakList;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\Repo\WikibaseRepo;
use WikibaseQuality\ConstraintReport\ConstraintReportFactory;
@@ -29,13 +35,15 @@
public static function newFromGlobalState( Title $title, array $params
) {
Assert::parameterType( 'string', $params['propertyId'],
'$params["propertyId"]' );
+ $repo = WikibaseRepo::getDefaultInstance();
return new UpdateConstraintsTableJob(
$title,
$params,
$params['propertyId'],
MediaWikiServices::getInstance()->getMainConfig(),
ConstraintReportFactory::getDefaultInstance()->getConstraintRepository(),
- WikibaseRepo::getDefaultInstance()->getEntityLookup()
+ $repo->getEntityLookup(),
+ $repo->getSerializerFactory()
);
}
@@ -59,25 +67,51 @@
*/
private $entityLookup;
+ /**
+ * @var SnakSerializer
+ */
+ private $snakSerializer;
+
+ /**
+ * @param Title $title
+ * @param string[] $params should contain 'propertyId' => 'P...'
+ * @param string $propertyId property ID of the property for this job
(which has the constraint statements)
+ * @param Config $config
+ * @param ConstraintRepository $constraintRepo
+ * @param EntityLookup $entityLookup
+ * @param SerializerFactory $serializerFactory
+ */
public function __construct(
Title $title,
array $params,
$propertyId,
Config $config,
ConstraintRepository $constraintRepo,
- EntityLookup $entityLookup
+ EntityLookup $entityLookup,
+ SerializerFactory $serializerFactory
) {
parent::__construct( 'constraintsTableUpdate', $title, $params
);
$this->propertyId = $propertyId;
$this->config = $config;
$this->constraintRepo = $constraintRepo;
$this->entityLookup = $entityLookup;
+ $this->snakSerializer = $serializerFactory->newSnakSerializer();
+ }
+
+ public function extractParametersFromQualifiers( SnakList $qualifiers )
{
+ $parameters = [];
+ foreach ( $qualifiers as $qualifier ) {
+ $qualifierId =
$qualifier->getPropertyId()->getSerialization();
+ $paramSerialization = $this->snakSerializer->serialize(
$qualifier );
+ $parameters[$qualifierId][] = $paramSerialization;
+ }
+ return $parameters;
}
public function extractConstraintFromStatement( PropertyId $propertyId,
Statement $constraintStatement ) {
$constraintId = $constraintStatement->getGuid();
$constraintTypeQid =
$constraintStatement->getMainSnak()->getDataValue()->getEntityId()->getSerialization();
- $parameters = []; // TODO extract parameters from qualifiers
+ $parameters = $this->extractParametersFromQualifiers(
$constraintStatement->getQualifiers() );
return new Constraint(
$constraintId,
$propertyId,
diff --git a/tests/phpunit/Job/UpdateConstraintsTableJobTest.php
b/tests/phpunit/Job/UpdateConstraintsTableJobTest.php
index 99c0468..4d0bf8b 100644
--- a/tests/phpunit/Job/UpdateConstraintsTableJobTest.php
+++ b/tests/phpunit/Job/UpdateConstraintsTableJobTest.php
@@ -2,6 +2,8 @@
namespace WikibaseQuality\ConstraintReport\Tests\Job;
+use DataValues\TimeValue;
+use DataValues\UnboundedQuantityValue;
use HashConfig;
use MediaWikiTestCase;
use Title;
@@ -9,13 +11,17 @@
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\Snak\PropertyNoValueSnak;
+use Wikibase\DataModel\Snak\PropertySomeValueSnak;
use Wikibase\DataModel\Snak\PropertyValueSnak;
+use Wikibase\DataModel\Snak\SnakList;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\DataModel\Statement\StatementList;
use WikibaseQuality\ConstraintReport\ConstraintRepository;
use WikibaseQuality\ConstraintReport\Tests\DefaultConfig;
use WikibaseQuality\ConstraintReport\UpdateConstraintsTableJob;
use WikibaseQuality\Tests\Helper\JsonFileEntityLookup;
+use Wikibase\Repo\WikibaseRepo;
/**
* @covers \WikibaseQuality\ConstraintReport\UpdateConstraintsTableJob
@@ -64,6 +70,45 @@
'constraint_parameters' => '{}'
],
] );
+ }
+
+ public function testExtractParametersFromQualifiers() {
+ $job = UpdateConstraintsTableJob::newFromGlobalState(
Title::newFromText( 'constraintsTableUpdate' ), [ 'propertyId' => 'P2' ] );
+ $class1 = new EntityIdValue( new ItemId( 'Q5' ) );
+ $class2 = new EntityIdValue( new ItemId( 'Q15632617' ) );
+ $quantity = UnboundedQuantityValue::newFromNumber( 50, 'kg' );
+ $date = new TimeValue( '+2000-01-01T00:00:00Z', 0, 0, 0,
TimeValue::PRECISION_DAY, 'Q1985727' );
+ $snakP2308A = new PropertyValueSnak(
+ new PropertyId( 'P2308' ),
+ $class1
+ );
+ $snakP1646 = new PropertyNoValueSnak(
+ new PropertyId( 'P1646' )
+ );
+ $snakP2308B = new PropertyValueSnak(
+ new PropertyId( 'P2308' ),
+ $class2
+ );
+ $snakP2313 = new PropertyValueSnak(
+ new PropertyId( 'P2313' ),
+ $quantity
+ );
+ $snakP2310 = new PropertyValueSnak(
+ new PropertyId( 'P2310' ),
+ $date
+ );
+ $snakP2305 = new PropertySomeValueSnak(
+ new PropertyId( 'P2305' )
+ );
+ $qualifiers = new SnakList( [ $snakP2308A, $snakP1646,
$snakP2308B, $snakP2313, $snakP2310, $snakP2305 ] );
+ $parameters = $job->extractParametersFromQualifiers(
$qualifiers );
+ $deserializer =
WikibaseRepo::getDefaultInstance()->getBaseDataModelDeserializerFactory()->newSnakDeserializer();
+ $this->assertEquals( $snakP2308A, $deserializer->deserialize(
$parameters['P2308'][0] ), 'P2308 (1)' );
+ $this->assertEquals( $snakP1646, $deserializer->deserialize(
$parameters['P1646'][0] ), 'P1646' );
+ $this->assertEquals( $snakP2308B, $deserializer->deserialize(
$parameters['P2308'][1] ), 'P2308 (2)' );
+ $this->assertEquals( $snakP2313, $deserializer->deserialize(
$parameters['P2313'][0] ), 'P2313' );
+ $this->assertEquals( $snakP2310, $deserializer->deserialize(
$parameters['P2310'][0] ), 'P2310' );
+ $this->assertEquals( $snakP2305, $deserializer->deserialize(
$parameters['P2305'][0] ), 'P2305' );
}
public function testExtractConstraintFromStatement_NoParameters() {
@@ -163,7 +208,8 @@
'P2',
$this->getDefaultConfig(),
new ConstraintRepository(),
- new JsonFileEntityLookup( __DIR__ )
+ new JsonFileEntityLookup( __DIR__ ),
+
WikibaseRepo::getDefaultInstance()->getSerializerFactory()
);
$job->run();
--
To view, visit https://gerrit.wikimedia.org/r/352864
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I6e5428187fc9d0c3137ca1fb0b20c18567c4698c
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/extensions/WikibaseQualityConstraints
Gerrit-Branch: master
Gerrit-Owner: Lucas Werkmeister (WMDE) <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Lucas Werkmeister (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits