jenkins-bot has submitted this change and it was merged. Change subject: Use DM Serialization in RB for addClaims method ......................................................................
Use DM Serialization in RB for addClaims method Bug: T104180 Change-Id: Iefdff5866678b3ffc8baab5628b0252b9f9124c0 --- M lib/includes/serializers/LibSerializerFactory.php M lib/tests/phpunit/serializers/LibSerializerFactoryTest.php M repo/includes/api/ResultBuilder.php M repo/tests/phpunit/data/api/getclaims.xml 4 files changed, 83 insertions(+), 39 deletions(-) Approvals: Jonas Kress (WMDE): Looks good to me, but someone else must approve Jeroen De Dauw: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/includes/serializers/LibSerializerFactory.php b/lib/includes/serializers/LibSerializerFactory.php index 29208f1..372e43e 100644 --- a/lib/includes/serializers/LibSerializerFactory.php +++ b/lib/includes/serializers/LibSerializerFactory.php @@ -122,15 +122,6 @@ * * @return Serializer */ - public function newClaimsSerializer( SerializationOptions $options ) { - return new ClaimsSerializer( $this->newClaimSerializer( $options ), $options ); - } - - /** - * @param SerializationOptions $options - * - * @return Serializer - */ private function newItemSerializer( SerializationOptions $options ) { return new ItemSerializer( $this->newClaimSerializer( $options ), $this->siteStore, $options, $this->entityFactory ); } diff --git a/lib/tests/phpunit/serializers/LibSerializerFactoryTest.php b/lib/tests/phpunit/serializers/LibSerializerFactoryTest.php index 6b049fa..d0cc992 100644 --- a/lib/tests/phpunit/serializers/LibSerializerFactoryTest.php +++ b/lib/tests/phpunit/serializers/LibSerializerFactoryTest.php @@ -99,7 +99,6 @@ $names = array( 'SnakSerializer', 'ClaimSerializer', - 'ClaimsSerializer', ); return array_map( function( $name ) { diff --git a/repo/includes/api/ResultBuilder.php b/repo/includes/api/ResultBuilder.php index b301b4f..cde01dd 100644 --- a/repo/includes/api/ResultBuilder.php +++ b/repo/includes/api/ResultBuilder.php @@ -8,12 +8,12 @@ use SiteStore; use Status; use Wikibase\DataModel\Claim\Claim; -use Wikibase\DataModel\Claim\Claims; use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Entity\PropertyDataTypeLookup; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Reference; use Wikibase\DataModel\SerializerFactory; +use Wikibase\DataModel\Statement\StatementList; use Wikibase\DataModel\Term\AliasGroup; use Wikibase\DataModel\Term\AliasGroupList; use Wikibase\DataModel\Term\Term; @@ -585,9 +585,9 @@ * @param array|string $props a list of fields to include, or "all" */ public function addClaims( array $claims, $path, $props = 'all' ) { - $claimsSerializer = $this->libSerializerFactory->newClaimsSerializer( $this->getOptions() ); + $serializer = $this->serializerFactory->newStatementListSerializer(); - $values = $claimsSerializer->getSerialized( new Claims( $claims ) ); + $values = $serializer->serialize( new StatementList( $claims ) ); if ( is_array( $props ) && !in_array( 'references', $props ) ) { $values = $this->modifier->modifyUsingCallback( @@ -600,9 +600,24 @@ ); } - // HACK: comply with ApiResult::setIndexedTagName - $tag = isset( $values['_element'] ) ? $values['_element'] : 'claim'; - $this->setList( $path, 'claims', $values, $tag ); + if ( !$this->isRawMode ) { + $values = $this->getArrayWithAlteredClaims( $values, false, '*/*/' ); + } else { + $values = $this->getArrayWithAlteredClaims( $values, true, '*/*/' ); + $values = $this->getArrayWithRawModeClaims( $values, '*/*/' ); + $values = $this->modifier->modifyUsingCallback( + $values, + null, + $this->getModCallbackToRemoveKeys( 'id' ) + ); + $values = $this->modifier->modifyUsingCallback( + $values, + '*', + $this->getModCallbackToIndexTags( 'claim' ) + ); + } + + $this->setList( $path, 'claims', $values, 'property' ); } /** @@ -621,34 +636,73 @@ $value = $serializer->serialize( $claim ); - /** - * Below we force an empty qualifiers and qualifiers-order element in the output. - * This is to make sure we dont break anything that assumes this is always here. - * This hack was added when moving away from the Lib serializers - */ - if ( !isset( $value['qualifiers'] ) ) { - $value['qualifiers'] = array(); - } - if ( !isset( $value['qualifiers-order'] ) ) { - $value['qualifiers-order'] = array(); - } - - $value = $this->getArrayWithDataTypesInGroupedSnakListAtPath( $value, 'references/*/snaks' ); - $value = $this->getArrayWithDataTypesInGroupedSnakListAtPath( $value, 'qualifiers' ); - $value = $this->modifier->modifyUsingCallback( - $value, - 'mainsnak', - $this->getModCallbackToAddDataTypeToSnak() - ); + $value = $this->getArrayWithAlteredClaims( $value ); if ( $this->isRawMode ) { - $value = $this->getRawModeClaimArray( $value ); + $value = $this->getArrayWithRawModeClaims( $value ); } $this->setValue( null, 'claim', $value ); } - private function getRawModeClaimArray( $array ) { + /** + * @param array $array + * @param bool $allowEmptyQualifiers + * @param string $claimPath to the claim array/arrays with trailing / + * + * @return array + */ + private function getArrayWithAlteredClaims( + array $array, + $allowEmptyQualifiers = true, + $claimPath = '' + ) { + if ( $allowEmptyQualifiers ) { + /** + * Below we force an empty qualifiers and qualifiers-order element in the output. + * This is to make sure we dont break anything that assumes this is always here. + * This hack was added when moving away from the Lib serializers + * TODO: remove this hack when we make other 'breaking changes' to the api output + */ + $array = $this->modifier->modifyUsingCallback( + $array, + trim( $claimPath, '/' ), + function ( $array ) { + if ( !isset( $array['qualifiers'] ) ) { + $array['qualifiers'] = array(); + } + if ( !isset( $array['qualifiers-order'] ) ) { + $array['qualifiers-order'] = array(); + } + + return $array; + } + ); + } + + $array = $this->getArrayWithDataTypesInGroupedSnakListAtPath( + $array, + $claimPath . 'references/*/snaks' + ); + $array = $this->getArrayWithDataTypesInGroupedSnakListAtPath( + $array, + $claimPath . 'qualifiers' + ); + $array = $this->modifier->modifyUsingCallback( + $array, + $claimPath . 'mainsnak', + $this->getModCallbackToAddDataTypeToSnak() + ); + return $array; + } + + /** + * @param array $array + * @param string $claimPath to the claim array/arrays with trailing / + * + * @return array + */ + private function getArrayWithRawModeClaims( array $array, $claimPath = '' ) { $rawModeModifications = array( 'references/*/snaks/*' => array( $this->getModCallbackToIndexTags( 'snak' ), @@ -680,7 +734,7 @@ foreach ( $rawModeModifications as $path => $callbacks ) { foreach ( $callbacks as $callback ) { - $array = $this->modifier->modifyUsingCallback( $array, $path, $callback ); + $array = $this->modifier->modifyUsingCallback( $array, $claimPath . $path, $callback ); } } diff --git a/repo/tests/phpunit/data/api/getclaims.xml b/repo/tests/phpunit/data/api/getclaims.xml index a261a3e..4244e41 100644 --- a/repo/tests/phpunit/data/api/getclaims.xml +++ b/repo/tests/phpunit/data/api/getclaims.xml @@ -2,7 +2,7 @@ <api> <claims> <property id="$propertyIdUnderTest"> - <claim _idx="0" id="$itemIdUnderTest$1111AAAA-43cb-ed6d-3adb-760e85bd17ee" type="statement" rank="normal"> + <claim _idx="0" type="statement" id="$itemIdUnderTest$1111AAAA-43cb-ed6d-3adb-760e85bd17ee" rank="normal"> <mainsnak snaktype="novalue" property="$propertyIdUnderTest"/> <qualifiers/> <qualifiers-order/> -- To view, visit https://gerrit.wikimedia.org/r/225897 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Iefdff5866678b3ffc8baab5628b0252b9f9124c0 Gerrit-PatchSet: 12 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Bene <benestar.wikime...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: JanZerebecki <jan.wikime...@zerebecki.de> Gerrit-Reviewer: Jeroen De Dauw <jeroended...@gmail.com> Gerrit-Reviewer: Jonas Kress (WMDE) <jonas.kr...@wikimedia.de> 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