jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/373312 )
Change subject: Use the entity serializers provided by WikibaseServices in
Client and optionally repo
......................................................................
Use the entity serializers provided by WikibaseServices in Client and
optionally repo
Change-Id: I85f96844bfd4c354979740c1ecf329cb02606f96
---
M client/includes/WikibaseClient.php
M data-access/src/GenericServices.php
M data-access/src/MultipleRepositoryAwareWikibaseServices.php
M data-access/src/WikibaseServices.php
M data-access/tests/phpunit/GenericServicesTest.php
M data-access/tests/phpunit/MultipleRepositoryAwareWikibaseServicesTest.php
M repo/includes/WikibaseRepo.php
7 files changed, 107 insertions(+), 23 deletions(-)
Approvals:
Daniel Kinzler: Looks good to me, approved
jenkins-bot: Verified
diff --git a/client/includes/WikibaseClient.php
b/client/includes/WikibaseClient.php
index 3dc0ac1..e9385cc 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -23,7 +23,6 @@
use MediaWiki\MediaWikiServices;
use MediaWikiSite;
use MWException;
-use Serializers\DispatchingSerializer;
use Serializers\Serializer;
use Site;
use SiteLookup;
@@ -1016,19 +1015,7 @@
* @return Serializer
*/
public function getCompactEntitySerializer() {
- if ( $this->compactEntitySerializer === null ) {
- $serializerFactoryCallbacks =
$this->entityTypeDefinitions->getSerializerFactoryCallbacks();
- $baseSerializerFactory =
$this->getCompactSerializerFactory();
- $serializers = [];
-
- foreach ( $serializerFactoryCallbacks as $callback ) {
- $serializers[] = call_user_func( $callback,
$baseSerializerFactory );
- }
-
- $this->compactEntitySerializer = new
DispatchingSerializer( $serializers );
- }
-
- return $this->compactEntitySerializer;
+ return
$this->getWikibaseServices()->getCompactEntitySerializer();
}
/**
diff --git a/data-access/src/GenericServices.php
b/data-access/src/GenericServices.php
index 58b8c5d..f968702 100644
--- a/data-access/src/GenericServices.php
+++ b/data-access/src/GenericServices.php
@@ -34,6 +34,11 @@
private $entitySerializer;
/**
+ * @var Serializer|null
+ */
+ private $compactEntitySerializer;
+
+ /**
* @var LanguageFallbackChainFactory
*/
private $languageFallbackChainFactory;
@@ -78,6 +83,25 @@
}
/**
+ * @return Serializer Entity serializer that that generates the most
compact serialization
+ */
+ public function getCompactEntitySerializer() {
+ if ( !isset( $this->compactEntitySerializer ) ) {
+ $serializerFactoryCallbacks =
$this->entityTypeDefinitions->getSerializerFactoryCallbacks();
+ $baseSerializerFactory = $this->getSerializerFactory();
+ $serializers = [];
+
+ foreach ( $serializerFactoryCallbacks as $callback ) {
+ $serializers[] = call_user_func( $callback,
$baseSerializerFactory );
+ }
+
+ $this->compactEntitySerializer = new
DispatchingSerializer( $serializers );
+ }
+
+ return $this->compactEntitySerializer;
+ }
+
+ /**
* @return SerializerFactory
*/
private function getSerializerFactory() {
diff --git a/data-access/src/MultipleRepositoryAwareWikibaseServices.php
b/data-access/src/MultipleRepositoryAwareWikibaseServices.php
index fdfa4c2..23a15c8 100644
--- a/data-access/src/MultipleRepositoryAwareWikibaseServices.php
+++ b/data-access/src/MultipleRepositoryAwareWikibaseServices.php
@@ -4,7 +4,9 @@
namespace Wikibase\DataAccess;
use MediaWiki\Services\ServiceContainer;
+use Serializers\Serializer;
use Wikibase\DataModel\Entity\EntityIdParser;
+use Wikibase\DataModel\SerializerFactory;
use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory;
use Wikibase\DataModel\Services\Term\TermBuffer;
@@ -36,6 +38,11 @@
private $multiRepositoryServices;
/**
+ * @var GenericServices
+ */
+ private $genericServices;
+
+ /**
* @param EntityIdParser $idParser
* @param EntityIdComposer $idComposer
* @param EntityNamespaceLookup $entityNamespaceLookup
@@ -57,21 +64,20 @@
) {
parent::__construct();
- $genericServices = new GenericServices( $entityNamespaceLookup,
$entityTypeDefinitions );
+ $this->genericServices = new GenericServices(
$entityNamespaceLookup, $entityTypeDefinitions );
$this->multiRepositoryServices =
$this->createMultiRepositoryServices(
$idParser,
$idComposer,
$repositoryDefinitions,
$entityTypeDefinitions,
- $genericServices,
$settings,
$perRepositoryServiceWiring
);
$this->multiRepositoryServices->applyWiring(
$multiRepositoryServiceWiring );
- $this->defineServices( $genericServices );
+ $this->defineServices();
}
private function createMultiRepositoryServices(
@@ -79,7 +85,6 @@
EntityIdComposer $idComposer,
RepositoryDefinitions $repositoryDefinitions,
EntityTypeDefinitions $entityTypeDefinitions,
- GenericServices $genericServices,
DataAccessSettings $settings,
array $perRepositoryServiceWiring
) {
@@ -89,7 +94,6 @@
$idComposer,
$repositoryDefinitions,
$entityTypeDefinitions,
- $genericServices,
$settings,
$perRepositoryServiceWiring
),
@@ -102,7 +106,6 @@
EntityIdComposer $idComposer,
RepositoryDefinitions $repositoryDefinitions,
EntityTypeDefinitions $entityTypeDefinitions,
- GenericServices $genericServices,
DataAccessSettings $settings,
array $perRepositoryServiceWiring
) {
@@ -117,14 +120,15 @@
new RepositorySpecificDataValueDeserializerFactory(
$idParserFactory ),
$repositoryDefinitions->getDatabaseNames(),
$perRepositoryServiceWiring,
- $genericServices,
+ $this->genericServices,
$settings,
$entityTypeDefinitions
);
}
- private function defineServices( GenericServices $genericServices ) {
+ private function defineServices() {
$multiRepositoryServices = $this->multiRepositoryServices;
+ $genericServices = $this->genericServices;
$this->applyWiring( [
'EntityInfoBuilderFactory' => function() use (
$multiRepositoryServices ) {
@@ -179,6 +183,24 @@
}
/**
+ * Returns the entity serializer instance that includes snak hashes in
the serialization.
+ *
+ * @return Serializer
+ */
+ public function getEntitySerializer() {
+ return $this->genericServices->getEntitySerializer();
+ }
+
+ /**
+ * Returns the entity serializer instance that omits snak hashes in the
serialization.
+ *
+ * @return Serializer
+ */
+ public function getCompactEntitySerializer() {
+ return $this->genericServices->getCompactEntitySerializer();
+ }
+
+ /**
* @return EntityStoreWatcher
*/
public function getEntityStoreWatcher() {
diff --git a/data-access/src/WikibaseServices.php
b/data-access/src/WikibaseServices.php
index eef637b..7d0d013 100644
--- a/data-access/src/WikibaseServices.php
+++ b/data-access/src/WikibaseServices.php
@@ -2,6 +2,7 @@
namespace Wikibase\DataAccess;
+use Serializers\Serializer;
use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
use Wikibase\DataModel\Services\Term\TermBuffer;
use Wikibase\LanguageFallbackChainFactory;
@@ -38,6 +39,20 @@
public function getEntityRevisionLookup();
/**
+ * Returns the entity serializer instance that generates the full
(expanded) serialization.
+ *
+ * @return Serializer
+ */
+ public function getEntitySerializer();
+
+ /**
+ * Returns the entity serializer instance that generates the most
compact serialization.
+ *
+ * @return Serializer
+ */
+ public function getCompactEntitySerializer();
+
+ /**
* Returns a service that can be registered as a watcher to changes to
entity data.
* Such watcher gets notified when entity is updated or deleted, or
when the entity
* redirect is updated.
diff --git a/data-access/tests/phpunit/GenericServicesTest.php
b/data-access/tests/phpunit/GenericServicesTest.php
index e3949e0..1389726 100644
--- a/data-access/tests/phpunit/GenericServicesTest.php
+++ b/data-access/tests/phpunit/GenericServicesTest.php
@@ -23,7 +23,7 @@
$this->assertInstanceOf( Serializer::class,
$services->getEntitySerializer() );
}
- public function
testGetEntitySerializerReturnsSingleInstanceForSameOptions() {
+ public function
testGetEntitySerializerReusesTheInstanceForMultipleCalls() {
$services = $this->newGenericServices();
$serializerOne = $services->getEntitySerializer();
@@ -32,6 +32,20 @@
$this->assertSame( $serializerOne, $serializerTwo );
}
+ public function testGetCompactEntitySerializer() {
+ $services = $this->newGenericServices();
+ $this->assertInstanceOf( Serializer::class,
$services->getCompactEntitySerializer() );
+ }
+
+ public function
testGetCompactEntitySerializerReusesTheInstanceForMultipleCalls() {
+ $services = $this->newGenericServices();
+
+ $serializerOne = $services->getCompactEntitySerializer();
+ $serializerTwo = $services->getCompactEntitySerializer();
+
+ $this->assertSame( $serializerOne, $serializerTwo );
+ }
+
public function testGetLanguageFallbackChainFactory() {
$services = $this->newGenericServices();
diff --git
a/data-access/tests/phpunit/MultipleRepositoryAwareWikibaseServicesTest.php
b/data-access/tests/phpunit/MultipleRepositoryAwareWikibaseServicesTest.php
index e48a14a..f9317e0 100644
--- a/data-access/tests/phpunit/MultipleRepositoryAwareWikibaseServicesTest.php
+++ b/data-access/tests/phpunit/MultipleRepositoryAwareWikibaseServicesTest.php
@@ -2,6 +2,7 @@
namespace Wikibase\DataAccess\Tests;
+use Serializers\Serializer;
use Wikibase\DataAccess\DataAccessSettings;
use Wikibase\DataAccess\MultipleRepositoryAwareWikibaseServices;
use Wikibase\DataAccess\MultiRepositoryServices;
@@ -99,6 +100,18 @@
$this->assertInstanceOf( EntityRevisionLookup::class,
$wikibaseServices->getEntityRevisionLookup() );
}
+ public function testGetEntitySerializer() {
+ $wikibaseServices =
$this->newMultipleRepositoryAwareWikibaseServices();
+
+ $this->assertInstanceOf( Serializer::class,
$wikibaseServices->getEntitySerializer() );
+ }
+
+ public function testGetCompactEntitySerializer() {
+ $wikibaseServices =
$this->newMultipleRepositoryAwareWikibaseServices();
+
+ $this->assertInstanceOf( Serializer::class,
$wikibaseServices->getCompactEntitySerializer() );
+ }
+
public function testGetEntityStoreWatcher() {
$wikibaseServices =
$this->newMultipleRepositoryAwareWikibaseServices();
@@ -143,6 +156,7 @@
$serviceNames = $wikibaseServices->getServiceNames();
+ // TODO: how to include EnititySerializer here?
$this->assertEquals(
[
'EntityInfoBuilderFactory',
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index c1a39ea..e529204 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -1443,6 +1443,10 @@
* @return Serializer Entity serializer that generates the full
(expanded) serialization.
*/
public function getAllTypesEntitySerializer() {
+ if ( $this->wikibaseServices !== null ) {
+ return $this->wikibaseServices->getEntitySerializer();
+ }
+
if ( !isset( $this->entitySerializer ) ) {
$serializerFactoryCallbacks =
$this->entityTypeDefinitions->getSerializerFactoryCallbacks();
$baseSerializerFactory =
$this->getBaseDataModelSerializerFactory();
@@ -1462,6 +1466,10 @@
* @return Serializer Entity serializer that generates the most compact
serialization.
*/
public function getCompactEntitySerializer() {
+ if ( $this->wikibaseServices !== null ) {
+ return
$this->wikibaseServices->getCompactEntitySerializer();
+ }
+
if ( !isset( $this->compactEntitySerializer ) ) {
$serializerFactoryCallbacks =
$this->entityTypeDefinitions->getSerializerFactoryCallbacks();
$baseSerializerFactory =
$this->getCompactSerializerFactory();
--
To view, visit https://gerrit.wikimedia.org/r/373312
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I85f96844bfd4c354979740c1ecf329cb02606f96
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits