WMDE-leszek has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/373056 )
Change subject: Do not pass the WikibaseClient instance to
RepositoryServiceContainer
......................................................................
Do not pass the WikibaseClient instance to RepositoryServiceContainer
RepositoryServiceContainer gets the array of callbacks instantiating
entity deserializers in the constructor, instead of WikibaseClient
being passed.
RepositoryServiceContainerFactory gets the instance of
EntityTypeDefinitions that is then used the get the array
of deserializer "factory" callbacks.
Note this does not yet entirely remove the dependency of data access
component on the Client component.
Change-Id: I6338881ae4140894b2cb869f0216431dec32c87b
---
M client/includes/WikibaseClient.php
M data-access/src/RepositoryServiceContainer.php
M data-access/src/RepositoryServiceContainerFactory.php
M data-access/tests/phpunit/MultiRepositoryServiceWiringTest.php
M data-access/tests/phpunit/NoReverseDependencyTest.php
M data-access/tests/phpunit/RepositoryServiceContainerFactoryTest.php
M data-access/tests/phpunit/RepositoryServiceContainerTest.php
M data-access/tests/phpunit/RepositoryServiceWiringTest.php
8 files changed, 20 insertions(+), 31 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/56/373056/1
diff --git a/client/includes/WikibaseClient.php
b/client/includes/WikibaseClient.php
index 359ca2f..861b7cb 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -424,7 +424,7 @@
$clientSettings->getSetting(
'repositoryServiceWiringFiles' ),
$genericServices,
$dataAccessSettings,
- $this
+ $this->entityTypeDefinitions
);
}
diff --git a/data-access/src/RepositoryServiceContainer.php
b/data-access/src/RepositoryServiceContainer.php
index 496d51b..a0368e4 100644
--- a/data-access/src/RepositoryServiceContainer.php
+++ b/data-access/src/RepositoryServiceContainer.php
@@ -6,7 +6,6 @@
use Deserializers\Deserializer;
use Deserializers\DispatchingDeserializer;
use MediaWiki\Services\ServiceContainer;
-use Wikibase\Client\WikibaseClient;
use Wikibase\DataModel\DeserializerFactory;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\EntityIdParser;
@@ -62,7 +61,7 @@
* @param DataValueDeserializer $dataValueDeserializer
* @param GenericServices $genericServices
* @param DataAccessSettings $settings
- * @param WikibaseClient $client Top-level factory passed to service
instantiators // TODO: fix this!
+ * @param callable[] $deserializerFactoryCallbacks
*/
public function __construct(
$databaseName,
@@ -72,7 +71,7 @@
DataValueDeserializer $dataValueDeserializer,
GenericServices $genericServices,
DataAccessSettings $settings,
- WikibaseClient $client
+ array $deserializerFactoryCallbacks
) {
parent::__construct( [ $genericServices, $settings ] );
@@ -81,8 +80,7 @@
$this->entityIdParser = $entityIdParser;
$this->entityIdComposer = $entityIdComposer;
$this->dataValueDeserializer = $dataValueDeserializer;
- // TODO: pass EntityTypeDefinitions to get those callbacks? or
two arrays at least?
- $this->deserializerFactoryCallbacks =
$client->getEntityDeserializerFactoryCallbacks();
+ $this->deserializerFactoryCallbacks =
$deserializerFactoryCallbacks;
}
/**
diff --git a/data-access/src/RepositoryServiceContainerFactory.php
b/data-access/src/RepositoryServiceContainerFactory.php
index 99498df..6096133 100644
--- a/data-access/src/RepositoryServiceContainerFactory.php
+++ b/data-access/src/RepositoryServiceContainerFactory.php
@@ -2,10 +2,10 @@
namespace Wikibase\DataAccess;
-use Wikibase\Client\WikibaseClient;
use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory;
use Wikibase\DataModel\Services\Lookup\UnknownForeignRepositoryException;
use Wikibase\Lib\EntityIdComposer;
+use Wikibase\Lib\EntityTypeDefinitions;
use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory;
/**
@@ -49,23 +49,14 @@
private $genericServices;
/**
- * @var WikibaseClient
- */
- private $client;
- /**
* @var DataAccessSettings
*/
private $settings;
+
+ private $entityTypeDefinitions;
+
/**
- * FIXME: injecting of the top-level factory (WikibaseClient) here is
only a temporary solution.
- * The instance of the top-level factory is being passed to
instantiators of services
- * stored in the RepositoryServiceContainer so they can get the service
they depend on.
- *
- * This approach is not clean, the class should not depend on the
top-level factory.
- * This should be changed after some refactoring: Instantiators in
RepositoryServiceWiring should
- * rather be getting some other service container, not the whole
top-level factory.
- *
* @param PrefixMappingEntityIdParserFactory $idParserFactory
* @param EntityIdComposer $idComposer
* @param RepositorySpecificDataValueDeserializerFactory
$dataValueDeserializerFactory
@@ -73,7 +64,7 @@
* @param string[] $wiringFiles
* @param GenericServices $genericServices
* @param DataAccessSettings $settings
- * @param WikibaseClient $client
+ * @param EntityTypeDefinitions $entityTypeDefinitions
*/
public function __construct(
PrefixMappingEntityIdParserFactory $idParserFactory,
@@ -83,7 +74,7 @@
array $wiringFiles,
GenericServices $genericServices,
DataAccessSettings $settings,
- WikibaseClient $client
+ EntityTypeDefinitions $entityTypeDefinitions
) {
$this->idParserFactory = $idParserFactory;
$this->idComposer = $idComposer;
@@ -92,7 +83,7 @@
$this->wiringFiles = $wiringFiles;
$this->genericServices = $genericServices;
$this->settings = $settings;
- $this->client = $client;
+ $this->entityTypeDefinitions = $entityTypeDefinitions;
}
/**
@@ -115,7 +106,7 @@
$this->dataValueDeserializerFactory->getDeserializer(
$repositoryName ),
$this->genericServices,
$this->settings,
- $this->client
+
$this->entityTypeDefinitions->getDeserializerFactoryCallbacks()
);
$container->loadWiringFiles( $this->wiringFiles );
diff --git a/data-access/tests/phpunit/MultiRepositoryServiceWiringTest.php
b/data-access/tests/phpunit/MultiRepositoryServiceWiringTest.php
index e61737f..167fa16 100644
--- a/data-access/tests/phpunit/MultiRepositoryServiceWiringTest.php
+++ b/data-access/tests/phpunit/MultiRepositoryServiceWiringTest.php
@@ -36,6 +36,7 @@
);
$client = WikibaseClient::getDefaultInstance();
+ $entityTypeDefinitions = new EntityTypeDefinitions( [] );
return new RepositoryServiceContainerFactory(
$idParser,
@@ -43,9 +44,9 @@
new RepositorySpecificDataValueDeserializerFactory(
$idParser ),
[ '' => false ],
[ __DIR__ . '/../../src/RepositoryServiceWiring.php' ],
- new GenericServices(
$client->getEntityNamespaceLookup(), new EntityTypeDefinitions( [] ) ),
+ new GenericServices(
$client->getEntityNamespaceLookup(), $entityTypeDefinitions ),
new DataAccessSettings( 0, false ),
- $client
+ $entityTypeDefinitions
);
}
diff --git a/data-access/tests/phpunit/NoReverseDependencyTest.php
b/data-access/tests/phpunit/NoReverseDependencyTest.php
index bb0444e..55b32c8 100644
--- a/data-access/tests/phpunit/NoReverseDependencyTest.php
+++ b/data-access/tests/phpunit/NoReverseDependencyTest.php
@@ -19,8 +19,6 @@
public function testNoClientDependency() {
$this->assertEquals(
[
- 'RepositoryServiceContainer.php',
- 'RepositoryServiceContainerFactory.php',
'RepositoryServiceWiring.php',
],
$this->getFilesContainingString( 'Wikibase\\Client\\',
__DIR__ . '/../../src/' )
diff --git
a/data-access/tests/phpunit/RepositoryServiceContainerFactoryTest.php
b/data-access/tests/phpunit/RepositoryServiceContainerFactoryTest.php
index 4a19fac..6339bb2 100644
--- a/data-access/tests/phpunit/RepositoryServiceContainerFactoryTest.php
+++ b/data-access/tests/phpunit/RepositoryServiceContainerFactoryTest.php
@@ -29,6 +29,7 @@
);
$client = WikibaseClient::getDefaultInstance();
+ $entityTypeDefinitions = new EntityTypeDefinitions( [] );
return new RepositoryServiceContainerFactory(
$idParserFactory,
@@ -36,9 +37,9 @@
new RepositorySpecificDataValueDeserializerFactory(
$idParserFactory ),
[ '' => false ],
[],
- new GenericServices(
$client->getEntityNamespaceLookup(), new EntityTypeDefinitions( [] ) ),
+ new GenericServices(
$client->getEntityNamespaceLookup(), $entityTypeDefinitions ),
new DataAccessSettings( 0, false ),
- $client
+ $entityTypeDefinitions
);
}
diff --git a/data-access/tests/phpunit/RepositoryServiceContainerTest.php
b/data-access/tests/phpunit/RepositoryServiceContainerTest.php
index cbf28ec..7fadb40 100644
--- a/data-access/tests/phpunit/RepositoryServiceContainerTest.php
+++ b/data-access/tests/phpunit/RepositoryServiceContainerTest.php
@@ -66,7 +66,7 @@
new DataValueDeserializer( [] ),
new GenericServices(
$client->getEntityNamespaceLookup(), new EntityTypeDefinitions( [] ) ),
new DataAccessSettings( 0, false ),
- $client
+ []
);
}
diff --git a/data-access/tests/phpunit/RepositoryServiceWiringTest.php
b/data-access/tests/phpunit/RepositoryServiceWiringTest.php
index ffb7019..8b4a23d 100644
--- a/data-access/tests/phpunit/RepositoryServiceWiringTest.php
+++ b/data-access/tests/phpunit/RepositoryServiceWiringTest.php
@@ -43,7 +43,7 @@
new DataValueDeserializer( [] ),
new GenericServices(
$client->getEntityNamespaceLookup(), new EntityTypeDefinitions( [] ) ),
new DataAccessSettings( 0, false ),
- $client
+ []
);
$container->loadWiringFiles( [ __DIR__ .
'/../../src/RepositoryServiceWiring.php' ] );
--
To view, visit https://gerrit.wikimedia.org/r/373056
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6338881ae4140894b2cb869f0216431dec32c87b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits