Bene has uploaded a new change for review.
https://gerrit.wikimedia.org/r/278566
Change subject: Add support for all entity types in ParserOutputJsConfigBuilder
......................................................................
Add support for all entity types in ParserOutputJsConfigBuilder
This changes the js config builder to require the entity serializer as a
dependency instead of creating one that only supports items and
properties.
Change-Id: I7380b0c726daa5b808c397436731b8ba1c397581
---
M repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
M repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
M repo/includes/WikibaseRepo.php
M
repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
M repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
5 files changed, 67 insertions(+), 21 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/66/278566/1
diff --git a/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
b/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
index c7c5aaa..4e6c5f9 100644
--- a/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
+++ b/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
@@ -4,6 +4,7 @@
use GeoData\GeoData;
use Language;
+use Serializers\Serializer;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Services\Entity\PropertyDataTypeMatcher;
use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
@@ -63,6 +64,11 @@
private $externalEntityIdParser;
/**
+ * @var Serializer
+ */
+ private $entitySerializer;
+
+ /**
* @var string[]
*/
private $preferredGeoDataProperties;
@@ -86,6 +92,7 @@
* @param EntityDataFormatProvider $entityDataFormatProvider
* @param PropertyDataTypeLookup $propertyDataTypeLookup
* @param EntityIdParser $externalEntityIdParser
+ * @param Serializer $entitySerializer
* @param string[] $preferredGeoDataProperties
* @param string[] $preferredPageImagesProperties
* @param string[] $globeUris Mapping of globe uris to string names.
@@ -99,9 +106,10 @@
EntityDataFormatProvider $entityDataFormatProvider,
PropertyDataTypeLookup $propertyDataTypeLookup,
EntityIdParser $externalEntityIdParser,
+ Serializer $entitySerializer,
array $preferredGeoDataProperties = array(),
array $preferredPageImagesProperties = array(),
- array $globeUris
+ array $globeUris = array()
) {
$this->entityViewFactory = $entityViewFactory;
$this->entityInfoBuilderFactory = $entityInfoBuilderFactory;
@@ -111,6 +119,7 @@
$this->entityDataFormatProvider = $entityDataFormatProvider;
$this->propertyDataTypeLookup = $propertyDataTypeLookup;
$this->externalEntityIdParser = $externalEntityIdParser;
+ $this->entitySerializer = $entitySerializer;
$this->preferredGeoDataProperties = $preferredGeoDataProperties;
$this->preferredPageImagesProperties =
$preferredPageImagesProperties;
$this->globeUris = $globeUris;
@@ -145,7 +154,7 @@
* @return ParserOutputJsConfigBuilder
*/
private function newParserOutputJsConfigBuilder() {
- return new ParserOutputJsConfigBuilder();
+ return new ParserOutputJsConfigBuilder( $this->entitySerializer
);
}
/**
diff --git a/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
b/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
index 7888623..99c7ab0 100644
--- a/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
+++ b/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
@@ -4,6 +4,7 @@
use DataValues\Serializers\DataValueSerializer;
use FormatJson;
+use Serializers\Serializer;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\SerializerFactory;
@@ -20,16 +21,12 @@
class ParserOutputJsConfigBuilder {
/**
- * @var SerializerFactory
+ * @var Serializer
*/
- private $serializerFactory;
+ private $entitySerializer;
- public function __construct() {
- $this->serializerFactory = new SerializerFactory(
- new DataValueSerializer(),
-
SerializerFactory::OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH +
-
SerializerFactory::OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH
- );
+ public function __construct( Serializer $entitySerializer ) {
+ $this->entitySerializer = $entitySerializer;
}
/**
@@ -60,9 +57,7 @@
* @return string
*/
private function getSerializedEntity( EntityDocument $entity ) {
- $serializer = $this->serializerFactory->newEntitySerializer();
-
- $serialization = $serializer->serialize( $entity );
+ $serialization = $this->entitySerializer->serialize( $entity );
// Remove empty parts of the serialization (Added when Lib
Serializers were removed)
// We could allow parts if we are sure it would not break
anything
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 984b3f9..50329ce 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -1541,6 +1541,10 @@
// CachingPropertyInfoStore enough?
new InProcessCachingDataTypeLookup(
$this->getPropertyDataTypeLookup() ),
$this->getLocalEntityUriParser(),
+ $this->getEntitySerializer(
+
SerializerFactory::OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH +
+
SerializerFactory::OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH
+ ),
$this->settings->getSetting(
'preferredGeoDataProperties' ),
$this->settings->getSetting(
'preferredPageImagesProperties' ),
$this->settings->getSetting( 'globeUris' )
diff --git
a/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
b/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
index 36d84ad..e2a18cb 100644
---
a/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
@@ -2,8 +2,18 @@
namespace Wikibase\Repo\Tests\ParserOutput;
+use Serializers\Serializer;
+use Wikibase\DataModel\Entity\BasicEntityIdParser;
+use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
+use Wikibase\LanguageFallbackChainFactory;
+use Wikibase\Lib\Store\EntityInfoBuilderFactory;
+use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Repo\LinkedData\EntityDataFormatProvider;
+use Wikibase\Repo\ParserOutput\DispatchingEntityViewFactory;
use Wikibase\Repo\ParserOutput\EntityParserOutputGenerator;
+use Wikibase\Repo\ParserOutput\EntityParserOutputGeneratorFactory;
use Wikibase\Repo\WikibaseRepo;
+use Wikibase\View\Template\TemplateFactory;
/**
* @covers Wikibase\Repo\ParserOutput\EntityParserOutputGeneratorFactory
@@ -20,8 +30,6 @@
public function testGetEntityParserOutputGenerator() {
$parserOutputGeneratorFactory =
$this->getEntityParserOutputGeneratorFactory();
- $testUser = new \TestUser( 'Wikibase User' );
-
$instance =
$parserOutputGeneratorFactory->getEntityParserOutputGenerator(
'en', true
);
@@ -30,7 +38,19 @@
}
private function getEntityParserOutputGeneratorFactory() {
- return
WikibaseRepo::getDefaultInstance()->getEntityParserOutputGeneratorFactory();
+ return new EntityParserOutputGeneratorFactory(
+ $this->getMockBuilder(
DispatchingEntityViewFactory::class )
+ ->disableOriginalConstructor()->getMock(),
+ $this->getMock( EntityInfoBuilderFactory::class ),
+ $this->getMock( EntityTitleLookup::class ),
+ new LanguageFallbackChainFactory(),
+ $this->getMockBuilder( TemplateFactory::class )
+ ->disableOriginalConstructor()->getMock(),
+ $this->getMock( EntityDataFormatProvider::class ),
+ $this->getMock( PropertyDataTypeLookup::class ),
+ new BasicEntityIdParser(),
+ $this->getMock( Serializer::class )
+ );
}
}
diff --git
a/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
b/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
index 27f77a9..91f61e0 100644
---
a/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
@@ -2,19 +2,23 @@
namespace Wikibase\Repo\Tests\ParserOutput;
+use DataValues\Deserializers\DataValueDeserializer;
+use DataValues\Serializers\DataValueSerializer;
use DataValues\StringValue;
use MediaWikiTestCase;
+use Wikibase\DataModel\DeserializerFactory;
+use Wikibase\DataModel\Entity\BasicEntityIdParser;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\SerializerFactory;
use Wikibase\DataModel\Snak\PropertyValueSnak;
use Wikibase\DataModel\Statement\StatementListProvider;
use Wikibase\DataModel\Term\FingerprintProvider;
use Wikibase\Repo\ParserOutput\ParserOutputJsConfigBuilder;
-use Wikibase\Repo\WikibaseRepo;
/**
* @covers Wikibase\Repo\ParserOutput\ParserOutputJsConfigBuilder
@@ -29,12 +33,22 @@
*/
class ParserOutputJsConfigBuilderTest extends MediaWikiTestCase {
+ private function newEntitySerializer() {
+ $serializerFactory = new SerializerFactory(
+ new DataValueSerializer(),
+
SerializerFactory::OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH +
+
SerializerFactory::OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH
+ );
+
+ return $serializerFactory->newEntitySerializer();
+ }
+
public function testBuildConfigItem() {
$item = new Item( new ItemId( 'Q5881' ) );
$this->addLabels( $item );
$mainSnakPropertyId = $this->addStatements( $item );
- $configBuilder = new ParserOutputJsConfigBuilder();
+ $configBuilder = new ParserOutputJsConfigBuilder(
$this->newEntitySerializer() );
$configVars = $configBuilder->build( $item );
$this->assertWbEntityId( 'Q5881', $configVars );
@@ -55,7 +69,7 @@
$this->addLabels( $property );
$mainSnakPropertyId = $this->addStatements( $property );
- $configBuilder = new ParserOutputJsConfigBuilder();
+ $configBuilder = new ParserOutputJsConfigBuilder(
$this->newEntitySerializer() );
$configVars = $configBuilder->build( $property );
$this->assertWbEntityId( 'P330', $configVars );
@@ -88,8 +102,12 @@
}
public function assertSerializationEqualsEntity( EntityDocument
$entity, $serialization ) {
- $deserializer =
WikibaseRepo::getDefaultInstance()->getExternalFormatEntityDeserializer();
- $unserializedEntity = $deserializer->deserialize(
$serialization );
+ $deserializerFactory = new DeserializerFactory(
+ new DataValueDeserializer( array( 'string' =>
StringValue::class ) ),
+ new BasicEntityIdParser()
+ );
+
+ $unserializedEntity =
$deserializerFactory->newEntityDeserializer()->deserialize( $serialization );
$this->assertTrue(
$unserializedEntity->equals( $entity ),
--
To view, visit https://gerrit.wikimedia.org/r/278566
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7380b0c726daa5b808c397436731b8ba1c397581
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Bene <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits