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

Reply via email to