jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/348234 )
Change subject: Track label usage when referencing properties by label ...................................................................... Track label usage when referencing properties by label Bug: T151925 Change-Id: Id5e4072cbad21e77af694afb9352fcf7bc4f9dd0 --- M client/includes/DataAccess/PropertyIdResolver.php M client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php M client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php M client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php M client/includes/WikibaseClient.php M client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php M client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php 7 files changed, 72 insertions(+), 59 deletions(-) Approvals: Hoo man: Checked; Looks good to me, approved jenkins-bot: Verified diff --git a/client/includes/DataAccess/PropertyIdResolver.php b/client/includes/DataAccess/PropertyIdResolver.php index 03596b1..5ced2ca 100644 --- a/client/includes/DataAccess/PropertyIdResolver.php +++ b/client/includes/DataAccess/PropertyIdResolver.php @@ -4,6 +4,7 @@ use InvalidArgumentException; use Wikibase\Client\PropertyLabelNotResolvedException; +use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Services\Lookup\EntityLookup; use Wikibase\DataModel\Services\Term\PropertyLabelResolver; @@ -26,15 +27,23 @@ private $propertyLabelResolver; /** + * @var UsageAccumulator + */ + private $usageAccumulator; + + /** * @param EntityLookup $entityLookup * @param PropertyLabelResolver $propertyLabelResolver + * @param UsageAccumulator $usageAccumulator */ public function __construct( EntityLookup $entityLookup, - PropertyLabelResolver $propertyLabelResolver + PropertyLabelResolver $propertyLabelResolver, + UsageAccumulator $usageAccumulator ) { $this->entityLookup = $entityLookup; $this->propertyLabelResolver = $propertyLabelResolver; + $this->usageAccumulator = $usageAccumulator; } /** @@ -82,6 +91,7 @@ } $propertyId = $propertyIds[$propertyLabel]; + $this->usageAccumulator->addLabelUsage( $propertyId, $languageCode ); return $propertyId; } diff --git a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php index 3e519e9..f322495 100644 --- a/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php +++ b/client/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactory.php @@ -13,6 +13,7 @@ use Wikibase\Client\Usage\ParserOutputUsageAccumulator; use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataModel\Services\Lookup\EntityLookup; +use Wikibase\DataModel\Services\Term\PropertyLabelResolver; /** * @license GPL-2.0+ @@ -22,9 +23,9 @@ class StatementGroupRendererFactory { /** - * @var PropertyIdResolver + * @var PropertyLabelResolver */ - private $propertyIdResolver; + private $propertyLabelResolver; /** * @var SnaksFinder @@ -52,20 +53,20 @@ private $allowDataAccessInUserLanguage; /** - * @param PropertyIdResolver $propertyIdResolver + * @param PropertyLabelResolver $propertyLabelResolver * @param SnaksFinder $snaksFinder * @param EntityLookup $entityLookup * @param DataAccessSnakFormatterFactory $dataAccessSnakFormatterFactory * @param bool $allowDataAccessInUserLanguage */ public function __construct( - PropertyIdResolver $propertyIdResolver, + PropertyLabelResolver $propertyLabelResolver, SnaksFinder $snaksFinder, EntityLookup $entityLookup, DataAccessSnakFormatterFactory $dataAccessSnakFormatterFactory, $allowDataAccessInUserLanguage ) { - $this->propertyIdResolver = $propertyIdResolver; + $this->propertyLabelResolver = $propertyLabelResolver; $this->snaksFinder = $snaksFinder; $this->entityLookup = $entityLookup; $this->dataAccessSnakFormatterFactory = $dataAccessSnakFormatterFactory; @@ -135,9 +136,15 @@ $type ); + $propertyIdResolver = new PropertyIdResolver( + $this->entityLookup, + $this->propertyLabelResolver, + $usageAccumulator + ); + $entityStatementsRenderer = new StatementTransclusionInteractor( $language, - $this->propertyIdResolver, + $propertyIdResolver, $this->snaksFinder, $snakFormatter, $this->entityLookup diff --git a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php index b7c8af6..92f2423 100644 --- a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php +++ b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseEntityLibrary.php @@ -53,7 +53,8 @@ $propertyIdResolver = new PropertyIdResolver( $entityLookup, - $wikibaseClient->getStore()->getPropertyLabelResolver() + $wikibaseClient->getStore()->getPropertyLabelResolver(), + $this->getUsageAccumulator() ); $plainTextTransclusionInteractor = new StatementTransclusionInteractor( diff --git a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php index 66e4248..94a876f 100644 --- a/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php +++ b/client/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibrary.php @@ -157,7 +157,11 @@ $entityLookup = $wikibaseClient->getStore()->getEntityLookup(); $propertyLabelResolver = $wikibaseClient->getStore()->getPropertyLabelResolver(); - $this->propertyIdResolver = new PropertyIdResolver( $entityLookup, $propertyLabelResolver ); + $this->propertyIdResolver = new PropertyIdResolver( + $entityLookup, + $propertyLabelResolver, + $this->getUsageAccumulator() + ); } return $this->propertyIdResolver; diff --git a/client/includes/WikibaseClient.php b/client/includes/WikibaseClient.php index 698fee2..2666f5a 100644 --- a/client/includes/WikibaseClient.php +++ b/client/includes/WikibaseClient.php @@ -34,33 +34,32 @@ use Wikibase\Client\Changes\WikiPageUpdater; use Wikibase\Client\DataAccess\DataAccessSnakFormatterFactory; use Wikibase\Client\DataAccess\ClientSiteLinkTitleLookup; -use Wikibase\Client\DataAccess\PropertyIdResolver; use Wikibase\Client\DataAccess\PropertyParserFunction\StatementGroupRendererFactory; use Wikibase\Client\DataAccess\PropertyParserFunction\Runner; -use Wikibase\Client\ParserOutput\ClientParserOutputDataUpdater; -use Wikibase\Client\RecentChanges\RecentChangeFactory; -use Wikibase\Client\Serializer\ForbiddenSerializer; -use Wikibase\Client\Store\RepositoryServiceContainerFactory; -use Wikibase\DataModel\Entity\EntityIdValue; -use Wikibase\DataModel\SerializerFactory; -use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory; -use Wikibase\DataModel\Services\Lookup\RestrictedEntityLookup; use Wikibase\Client\DataAccess\SnaksFinder; use Wikibase\Client\Hooks\LanguageLinkBadgeDisplay; use Wikibase\Client\Hooks\OtherProjectsSidebarGeneratorFactory; use Wikibase\Client\Hooks\ParserFunctionRegistrant; +use Wikibase\Client\ParserOutput\ClientParserOutputDataUpdater; +use Wikibase\Client\RecentChanges\RecentChangeFactory; +use Wikibase\Client\Serializer\ForbiddenSerializer; +use Wikibase\Client\Store\RepositoryServiceContainerFactory; use Wikibase\Client\Store\TitleFactory; use Wikibase\ClientStore; use Wikibase\DataModel\DeserializerFactory; -use Wikibase\DataModel\Entity\Item; -use Wikibase\DataModel\Entity\ItemIdParser; -use Wikibase\DataModel\Services\Diff\EntityDiffer; use Wikibase\DataModel\Entity\DispatchingEntityIdParser; use Wikibase\DataModel\Entity\EntityIdParser; +use Wikibase\DataModel\Entity\EntityIdValue; +use Wikibase\DataModel\Entity\Item; +use Wikibase\DataModel\Entity\ItemIdParser; +use Wikibase\DataModel\SerializerFactory; +use Wikibase\DataModel\Services\Diff\EntityDiffer; +use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory; use Wikibase\DataModel\Services\EntityId\SuffixEntityIdParser; use Wikibase\DataModel\Services\Lookup\EntityLookup; use Wikibase\DataModel\Services\Lookup\EntityRetrievingDataTypeLookup; use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup; +use Wikibase\DataModel\Services\Lookup\RestrictedEntityLookup; use Wikibase\DataModel\Services\Lookup\TermLookup; use Wikibase\DataModel\Services\Term\TermBuffer; use Wikibase\DirectSqlStore; @@ -75,19 +74,19 @@ use Wikibase\Lib\EntityTypeDefinitions; use Wikibase\Lib\FormatterLabelDescriptionLookupFactory; use Wikibase\Lib\Interactors\TermSearchInteractor; -use Wikibase\Lib\RepositoryDefinitions; -use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory; -use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory; use Wikibase\Lib\LanguageNameLookup; use Wikibase\Lib\MediaWikiContentLanguages; use Wikibase\Lib\OutputFormatSnakFormatterFactory; use Wikibase\Lib\OutputFormatValueFormatterFactory; use Wikibase\Lib\PropertyInfoDataTypeLookup; +use Wikibase\Lib\RepositoryDefinitions; +use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory; use Wikibase\Lib\Store\CachingPropertyOrderProvider; use Wikibase\Lib\Store\EntityContentDataCodec; use Wikibase\Lib\Store\EntityNamespaceLookup; use Wikibase\Lib\Store\FallbackPropertyOrderProvider; use Wikibase\Lib\Store\HttpUrlPropertyOrderProvider; +use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory; use Wikibase\Lib\Store\PrefetchingTermLookup; use Wikibase\Lib\Store\PropertyOrderProvider; use Wikibase\Lib\Store\WikiPagePropertyOrderProvider; @@ -1093,17 +1092,10 @@ * @return StatementGroupRendererFactory */ private function getStatementGroupRendererFactory() { - $entityLookup = $this->getRestrictedEntityLookup(); - - $propertyIdResolver = new PropertyIdResolver( - $entityLookup, - $this->getStore()->getPropertyLabelResolver() - ); - return new StatementGroupRendererFactory( - $propertyIdResolver, + $this->getStore()->getPropertyLabelResolver(), new SnaksFinder(), - $entityLookup, + $this->getRestrictedEntityLookup(), $this->getDataAccessSnakFormatterFactory(), $this->getSettings()->getSetting( 'allowDataAccessInUserLanguage' ) ); diff --git a/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php b/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php index 7461e62..2c4151e 100644 --- a/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php +++ b/client/tests/phpunit/includes/DataAccess/PropertyIdResolverTest.php @@ -4,6 +4,7 @@ use Wikibase\Client\DataAccess\PropertyIdResolver; use Wikibase\Client\PropertyLabelNotResolvedException; +use Wikibase\Client\Usage\UsageAccumulator; use Wikibase\DataModel\Entity\Property; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\Lib\Tests\MockPropertyLabelResolver; @@ -21,11 +22,18 @@ */ class PropertyIdResolverTest extends \PHPUnit_Framework_TestCase { - private function getPropertyIdResolver() { + private function getPropertyIdResolver( $times = 0 ) { $mockRepository = $this->getMockRepository(); $propertyLabelResolver = new MockPropertyLabelResolver( 'en', $mockRepository ); + $usageAccumulator = $this->getMock( UsageAccumulator::class ); + $usageAccumulator->expects( $this->exactly( $times ) ) + ->method( 'addLabelUsage' ); - return new PropertyIdResolver( $mockRepository, $propertyLabelResolver ); + return new PropertyIdResolver( + $mockRepository, + $propertyLabelResolver, + $usageAccumulator + ); } private function getMockRepository() { @@ -44,8 +52,8 @@ /** * @dataProvider resolvePropertyIdProvider */ - public function testResolvePropertyId( PropertyId $expected, $propertyLabelOrId ) { - $propertyIdResolver = $this->getPropertyIdResolver(); + public function testResolvePropertyId( PropertyId $expected, $propertyLabelOrId, $times = 0 ) { + $propertyIdResolver = $this->getPropertyIdResolver( $times ); $propertyId = $propertyIdResolver->resolvePropertyId( $propertyLabelOrId, 'en' ); $this->assertEquals( $expected, $propertyId ); @@ -53,7 +61,7 @@ public function resolvePropertyIdProvider() { return array( - array( new PropertyId( 'P1337' ), 'a kitten!' ), + array( new PropertyId( 'P1337' ), 'a kitten!', 1 ), array( new PropertyId( 'P1337' ), 'p1337' ), array( new PropertyId( 'P1337' ), 'P1337' ), ); diff --git a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php index 66cbb2c..86951fe 100644 --- a/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php +++ b/client/tests/phpunit/includes/DataAccess/PropertyParserFunction/StatementGroupRendererFactoryTest.php @@ -10,7 +10,6 @@ use ValueFormatters\FormatterOptions; use ValueFormatters\ValueFormatter; use Wikibase\Client\DataAccess\DataAccessSnakFormatterFactory; -use Wikibase\Client\DataAccess\PropertyIdResolver; use Wikibase\Client\DataAccess\PropertyParserFunction\LanguageAwareRenderer; use Wikibase\Client\DataAccess\PropertyParserFunction\StatementGroupRendererFactory; use Wikibase\Client\DataAccess\PropertyParserFunction\VariantsAwareRenderer; @@ -23,6 +22,7 @@ use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Services\Lookup\EntityLookup; use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup; +use Wikibase\DataModel\Services\Term\PropertyLabelResolver; use Wikibase\DataModel\Snak\PropertyValueSnak; use Wikibase\DataModel\Statement\StatementListProvider; use Wikibase\LanguageFallbackChainFactory; @@ -141,7 +141,7 @@ * @dataProvider allowDataAccessInUserLanguageProvider */ public function testNewRendererFromParser_languageOption( $allowDataAccessInUserLanguage ) { - $idResolver = $this->getMockBuilder( PropertyIdResolver::class ) + $labelResolver = $this->getMockBuilder( PropertyLabelResolver::class ) ->disableOriginalConstructor() ->getMock(); @@ -161,7 +161,7 @@ ) ); $factory = new StatementGroupRendererFactory( - $idResolver, + $labelResolver, new SnaksFinder(), $this->getMock( EntityLookup::class ), new DataAccessSnakFormatterFactory( @@ -182,8 +182,12 @@ } private function getStatementGroupRendererFactory( $allowDataAccessInUserLanguage = false ) { + $labelResolver = $this->getMockBuilder( PropertyLabelResolver::class ) + ->disableOriginalConstructor() + ->getMock(); + return new StatementGroupRendererFactory( - $this->getPropertyIdResolver(), + $labelResolver, $this->getSnaksFinder(), $this->getEntityLookup(), new DataAccessSnakFormatterFactory( @@ -193,23 +197,6 @@ ), $allowDataAccessInUserLanguage ); - } - - /** - * @return PropertyIdResolver - */ - private function getPropertyIdResolver() { - $propertyIdResolver = $this->getMockBuilder( PropertyIdResolver::class ) - ->disableOriginalConstructor() - ->getMock(); - - $propertyIdResolver->expects( $this->any() ) - ->method( 'resolvePropertyId' ) - ->will( $this->returnCallback( function ( $name, $lang ) { - return new PropertyId( $name ); - } ) ); - - return $propertyIdResolver; } /** @@ -270,6 +257,10 @@ return new Item( $id ); } ) ); + $entityLookup->expects( $this->any() ) + ->method( 'hasEntity' ) + ->will( $this->returnValue( true ) ); + return $entityLookup; } -- To view, visit https://gerrit.wikimedia.org/r/348234 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Id5e4072cbad21e77af694afb9352fcf7bc4f9dd0 Gerrit-PatchSet: 4 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Matěj Suchánek <matejsuchane...@gmail.com> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Hoo man <h...@online.de> Gerrit-Reviewer: Ladsgroup <ladsgr...@gmail.com> Gerrit-Reviewer: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits