jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/343025 )
Change subject: Move SiteLinkRdfBuilder from RdfBuilder to Item entitytype
definition
......................................................................
Move SiteLinkRdfBuilder from RdfBuilder to Item entitytype definition
Bug: T160623
Change-Id: I5fc25575348ed09562c4c1541765f0ea35b4f812
---
M repo/WikibaseRepo.entitytypes.php
A repo/includes/Rdf/NullEntityRdfBuilder.php
M repo/includes/Rdf/RdfBuilder.php
M repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
M repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
M repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
M repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
7 files changed, 168 insertions(+), 25 deletions(-)
Approvals:
jenkins-bot: Verified
Thiemo Mättig (WMDE): Looks good to me, approved
diff --git a/repo/WikibaseRepo.entitytypes.php
b/repo/WikibaseRepo.entitytypes.php
index 846885f..953066f 100644
--- a/repo/WikibaseRepo.entitytypes.php
+++ b/repo/WikibaseRepo.entitytypes.php
@@ -20,8 +20,11 @@
use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
use Wikibase\LanguageFallbackChain;
+use Wikibase\Rdf\NullEntityRdfBuilder;
use Wikibase\Rdf\PropertyRdfBuilder;
+use Wikibase\Rdf\RdfProducer;
use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
use Wikibase\Repo\ChangeOp\Deserialization\ItemChangeOpDeserializer;
use Wikibase\Repo\ChangeOp\Deserialization\PropertyChangeOpDeserializer;
use Wikibase\Repo\WikibaseRepo;
@@ -60,6 +63,24 @@
WikibaseRepo::getDefaultInstance()->getChangeOpDeserializerFactory()
);
},
+ 'rdf-builder-factory-callback' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer,
+ $mentionedEntityTracker,
+ $dedupe
+ ) {
+ if ( ( $flavorFlags & RdfProducer::PRODUCE_SITELINKS )
!== 0 ) {
+ $sites =
WikibaseRepo::getDefaultInstance()->getSiteLookup()->getSites();
+ // Since the only extra mapping needed for
Items are site links,
+ // we just return the SiteLinksRdfBuilder
directly,
+ // instead of defining an ItemRdfBuilder
+ $builder = new SiteLinksRdfBuilder(
$vocabulary, $writer, $sites );
+ $builder->setDedupeBag( $dedupe );
+ return $builder;
+ }
+ return new NullEntityRdfBuilder();
+ }
),
'property' => array(
'view-factory-callback' => function(
diff --git a/repo/includes/Rdf/NullEntityRdfBuilder.php
b/repo/includes/Rdf/NullEntityRdfBuilder.php
new file mode 100644
index 0000000..5095c73
--- /dev/null
+++ b/repo/includes/Rdf/NullEntityRdfBuilder.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Wikibase\Rdf;
+
+use Wikibase\DataModel\Entity\EntityDocument;
+
+/**
+ * Null implementation of EntityRdfBuilder
+ *
+ * @license GPL-2.0+
+ * @author Amir Sarabadani <[email protected]>
+ */
+class NullEntityRdfBuilder implements EntityRdfBuilder {
+
+ /**
+ * @param EntityDocument $entity
+ */
+ public function addEntity( EntityDocument $entity ) {
+ return;
+ }
+
+ /**
+ * @param EntityDocument $entity
+ */
+ public function addEntityStub( EntityDocument $entity ) {
+ return;
+ }
+
+}
diff --git a/repo/includes/Rdf/RdfBuilder.php b/repo/includes/Rdf/RdfBuilder.php
index d8098af..d0fdd0d 100644
--- a/repo/includes/Rdf/RdfBuilder.php
+++ b/repo/includes/Rdf/RdfBuilder.php
@@ -121,14 +121,6 @@
$this->builders[] = $this->newFullStatementRdfBuilder();
}
- // placing this last produces more readable output since all
entity things are together
- if ( $this->shouldProduce( RdfProducer::PRODUCE_SITELINKS ) ) {
- $builder = new SiteLinksRdfBuilder( $vocabulary,
$writer, $sites );
- // We can use the same bag since namespaces are
different
- $builder->setDedupeBag( $this->dedupeBag );
- $this->builders[] = $builder;
- }
-
$entityRdfBuilders =
$entityRdfBuilderFactory->getEntityRdfBuilders(
$flavor,
$vocabulary,
diff --git a/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
b/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
index d4b7764..3fe5851 100644
--- a/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
+++ b/repo/tests/phpunit/includes/Dumpers/RdfDumpGeneratorTest.php
@@ -2,10 +2,11 @@
namespace Wikibase\Repo\Tests\Dumpers;
+use HashSiteStore;
use MediaWikiTestCase;
use MWException;
use Site;
-use SiteList;
+use SiteLookup;
use Title;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityId;
@@ -18,11 +19,17 @@
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\Store\EntityTitleLookup;
use Wikibase\Lib\Store\RevisionedUnresolvedRedirectException;
+use Wikibase\Rdf\EntityRdfBuilderFactory;
+use Wikibase\Rdf\NullEntityRdfBuilder;
+use Wikibase\Rdf\PropertyRdfBuilder;
+use Wikibase\Rdf\RdfProducer;
use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
use Wikibase\Repo\Tests\Rdf\NTriplesRdfTestHelper;
use Wikibase\Repo\WikibaseRepo;
use Wikibase\Repo\Tests\Rdf\RdfBuilderTest;
use Wikibase\Repo\Tests\Rdf\RdfBuilderTestData;
+use Wikimedia\Purtle\RdfWriter;
/**
* @covers Wikibase\Dumpers\RdfDumpGenerator
@@ -56,10 +63,10 @@
}
/**
- * @return SiteList
+ * @return SiteLookup
*/
- public function getSiteList() {
- $list = new SiteList();
+ public function getSiteLookup() {
+ $list = [];
$wiki = new Site();
$wiki->setGlobalId( 'enwiki' );
@@ -80,7 +87,7 @@
$wiki->setLinkPath( 'http://test.acme.test/$1' );
$list['test'] = $wiki;
- return $list;
+ return new HashSiteStore( $list );
}
private function getTestData() {
@@ -99,6 +106,48 @@
} ) );
return $entityTitleLookup;
+ }
+
+ /**
+ * Returns the mapping of entity types used in tests to callbacks
instantiating EntityRdfBuilder
+ * instances, that are configured to use services configured for test
purposes (e.g. SiteLookup).
+ *
+ * @see EntityTypeDefinitions::getRdfBuilderFactoryCallbacks
+ *
+ * TODO: move to RdfBuilderTestData?
+ *
+ * @param SiteLookup $siteLookup
+ *
+ * @return callable[]
+ */
+ private function getRdfBuilderFactoryCallbacks( SiteLookup $siteLookup
) {
+ return [
+ 'item' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer,
+ $mentionedEntityTracker,
+ $dedupe
+ ) use ( $siteLookup ) {
+ if ( ( $flavorFlags &
RdfProducer::PRODUCE_SITELINKS ) !== 0 ) {
+ $sites = $siteLookup->getSites();
+ $builder = new SiteLinksRdfBuilder(
$vocabulary, $writer, $sites );
+ $builder->setDedupeBag( $dedupe );
+ return $builder;
+ }
+ return new NullEntityRdfBuilder();
+ },
+ 'property' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer
+ ) {
+ return new PropertyRdfBuilder(
+ $vocabulary,
+ $writer
+ );
+ }
+ ];
}
/**
@@ -145,17 +194,19 @@
}
) );
+ $siteLookup = $this->getSiteLookup();
+
$wikibaseRepo = WikibaseRepo::getDefaultInstance();
+
// Note: we test against the actual RDF bindings here, so we
get actual RDF.
$rdfBuilderFactory =
$wikibaseRepo->getValueSnakRdfBuilderFactory();
-
- $entityRdfBuilderFactory =
$wikibaseRepo->getEntityRdfBuilderFactory();
+ $entityRdfBuilderFactory = new EntityRdfBuilderFactory(
$this->getRdfBuilderFactoryCallbacks( $siteLookup ) );
return RdfDumpGenerator::createDumpGenerator(
'ntriples',
$out,
$flavor,
- $this->getSiteList(),
+ $siteLookup->getSites(),
$entityRevisionLookup,
$dataTypeLookup,
$rdfBuilderFactory,
diff --git a/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
b/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
index cf7ddeb..926e164 100644
--- a/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
+++ b/repo/tests/phpunit/includes/Rdf/RdfBuilderTest.php
@@ -3,18 +3,24 @@
namespace Wikibase\Repo\Tests\Rdf;
use PageProps;
+use SiteLookup;
use Title;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\Lib\Store\EntityTitleLookup;
use Wikibase\Rdf\DedupeBag;
+use Wikibase\Rdf\EntityRdfBuilderFactory;
use Wikibase\Rdf\HashDedupeBag;
+use Wikibase\Rdf\NullEntityRdfBuilder;
+use Wikibase\Rdf\PropertyRdfBuilder;
use Wikibase\Rdf\RdfBuilder;
use Wikibase\Rdf\RdfProducer;
use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\SiteLinksRdfBuilder;
use Wikibase\Repo\WikibaseRepo;
use Wikimedia\Purtle\NTriplesRdfWriter;
+use Wikimedia\Purtle\RdfWriter;
/**
* @covers Wikibase\Rdf\RdfBuilder
@@ -70,6 +76,48 @@
}
/**
+ * Returns the mapping of entity types used in tests to callbacks
instantiating EntityRdfBuilder
+ * instances, that are configured to use services configured for test
purposes (e.g. SiteLookup).
+ *
+ * @see EntityTypeDefinitions::getRdfBuilderFactoryCallbacks
+ *
+ * TODO: move to RdfBuilderTestData?
+ *
+ * @param SiteLookup $siteLookup
+ *
+ * @return callable[]
+ */
+ private function getRdfBuilderFactoryCallbacks( SiteLookup $siteLookup
) {
+ return [
+ 'item' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer,
+ $mentionedEntityTracker,
+ $dedupe
+ ) use ( $siteLookup ) {
+ if ( ( $flavorFlags &
RdfProducer::PRODUCE_SITELINKS ) !== 0 ) {
+ $sites = $siteLookup->getSites();
+ $builder = new SiteLinksRdfBuilder(
$vocabulary, $writer, $sites );
+ $builder->setDedupeBag( $dedupe );
+ return $builder;
+ }
+ return new NullEntityRdfBuilder();
+ },
+ 'property' => function(
+ $flavorFlags,
+ RdfVocabulary $vocabulary,
+ RdfWriter $writer
+ ) {
+ return new PropertyRdfBuilder(
+ $vocabulary,
+ $writer
+ );
+ }
+ ];
+ }
+
+ /**
* @param int $produce One of the RdfProducer::PRODUCE_...
constants.
* @param DedupeBag $dedup
* @param RdfVocabulary $vocabulary
@@ -81,13 +129,14 @@
$dedup = new HashDedupeBag();
}
+ $siteLookup = $this->getTestData()->getSiteLookup();
+
// Note: using the actual factory here makes this an
integration test!
$valueBuilderFactory =
WikibaseRepo::getDefaultInstance()->getValueSnakRdfBuilderFactory();
-
- $entityRdfBuilderFactory =
WikibaseRepo::getDefaultInstance()->getEntityRdfBuilderFactory();
+ $entityRdfBuilderFactory = new EntityRdfBuilderFactory(
$this->getRdfBuilderFactoryCallbacks( $siteLookup ) );
$emitter = new NTriplesRdfWriter();
$builder = new RdfBuilder(
- $this->getTestData()->getSiteList(),
+ $siteLookup->getSites(),
$vocabulary ?: $this->getTestData()->getVocabulary(),
$valueBuilderFactory,
$this->getTestData()->getMockRepository(),
diff --git a/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
b/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
index 070a585..24fc3ea 100644
--- a/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
+++ b/repo/tests/phpunit/includes/Rdf/RdfBuilderTestData.php
@@ -2,9 +2,10 @@
namespace Wikibase\Repo\Tests\Rdf;
+use HashSiteStore;
use InvalidArgumentException;
use Site;
-use SiteList;
+use SiteLookup;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\EntityRedirect;
use Wikibase\DataModel\Entity\Item;
@@ -184,10 +185,10 @@
/**
* Get site definitions matching the test data.
*
- * @return SiteList
+ * @return SiteLookup
*/
- public function getSiteList() {
- $list = new SiteList();
+ public function getSiteLookup() {
+ $list = [];
$wiki = new Site();
$wiki->setGlobalId( 'enwiki' );
@@ -202,7 +203,7 @@
$wiki->setLinkPath( 'http://ruwiki.acme.test/$1' );
$list['ruwiki'] = $wiki;
- return $list;
+ return new HashSiteStore( $list );
}
/**
diff --git a/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
b/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
index a3b66fc..e0e59f5 100644
--- a/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
+++ b/repo/tests/phpunit/includes/Rdf/SiteLinksRdfBuilderTest.php
@@ -54,7 +54,7 @@
$builder = new SiteLinksRdfBuilder(
$vocabulary,
$writer,
- $this->getTestData()->getSiteList(),
+ $this->getTestData()->getSiteLookup()->getSites(),
$sites
);
--
To view, visit https://gerrit.wikimedia.org/r/343025
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I5fc25575348ed09562c4c1541765f0ea35b4f812
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Ladsgroup <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[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