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

Reply via email to