Addshore has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/108519


Change subject: Add hashes to qualifier serilization output
......................................................................

Add hashes to qualifier serilization output

- Adds new option for serilizing snaks with hashes
- Makes SnakSerilizer check for the option
- Makes claim serializer use said option
- Updates json.doc
- Expand Result builder test to test output
  with qualifiers

- All other tests to do with this change already
  seem to account for and check the hash

Bug: 50570
Change-Id: I3e00aa72bfd64434ecffd597cb6cad542d85a68c
---
M docs/json.wiki
M lib/includes/serializers/ClaimSerializer.php
M lib/includes/serializers/SerializationOptions.php
M lib/includes/serializers/SnakSerializer.php
M repo/tests/phpunit/includes/api/ResultBuilderTest.php
5 files changed, 50 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/19/108519/1

diff --git a/docs/json.wiki b/docs/json.wiki
index c684ad5..371e515 100644
--- a/docs/json.wiki
+++ b/docs/json.wiki
@@ -399,6 +399,7 @@
         "qualifiers": {
           "P580": [
             {
+              "hash": "sssde3541cc531fa54adcaffebde6bef28g6hgjd",
               "snaktype": "value",
               "property": "P580",
               "datavalue": {
@@ -416,6 +417,7 @@
           ],
           "P582": [
             {
+              "hash": "f803e3541cc531fa54n7a9ffebde6bef28d87ddv",
               "snaktype": "value",
               "property": "P582",
               "datavalue": {
@@ -799,6 +801,7 @@
         "qualifiers": {
           "P580": [
             {
+              "hash": "rrrrww541cc531fa54adcaffebde6bef28d7uu7f",
               "snaktype": "value",
               "property": "P580",
               "datavalue": {
@@ -816,6 +819,7 @@
           ],
           "P582": [
             {
+              "hash": "qwerqwrqwrqwq1fa54adcaffebde6bef28d87d32",
               "snaktype": "value",
               "property": "P582",
               "datavalue": {
@@ -851,6 +855,7 @@
         "qualifiers": {
           "P580": [
             {
+              "hash": "d103e3541cc531fa54adcaffebdeqweqweqeqweq",
               "snaktype": "value",
               "property": "P580",
               "datavalue": {
@@ -868,6 +873,7 @@
           ],
           "P582": [
             {
+              "hash": "d103e3541ccasdasdsadasdasdas6bef28d87d32",
               "snaktype": "value",
               "property": "P582",
               "datavalue": {
diff --git a/lib/includes/serializers/ClaimSerializer.php 
b/lib/includes/serializers/ClaimSerializer.php
index b080431..cede938 100644
--- a/lib/includes/serializers/ClaimSerializer.php
+++ b/lib/includes/serializers/ClaimSerializer.php
@@ -110,10 +110,23 @@
 
                $serialization['mainsnak'] = 
$this->snakSerializer->getSerialized( $claim->getMainSnak() );
 
+               //NOTE: the two clones below must remain to avoid changing 
options for other serilizations
+               $qualifierSerializer = clone $this->snakSerializer;
+               $qualifierSerializer->setOptions( clone 
$this->snakSerializer->getOptions() );
+               $qualifierSerializer->getOptions()->setOption( 
SerializationOptions::OPT_SERIALIZE_SNAKS_WITH_HASH, true );
+
                if( in_array( 'qualifiers', $this->options->getOption( 
SerializationOptions::OPT_GROUP_BY_PROPERTIES ) ) ){
-                       $listSerializer = new ByPropertyListSerializer( 
'qualifiers', $this->snakSerializer, $this->options );
+                       $listSerializer = new ByPropertyListSerializer(
+                               'qualifiers',
+                               $qualifierSerializer,
+                               $this->options
+                       );
                } else {
-                       $listSerializer = new ListSerializer( 'qualifiers', 
$this->snakSerializer, $this->options );
+                       $listSerializer = new ListSerializer(
+                               'qualifiers',
+                               $qualifierSerializer,
+                               $this->options
+                       );
                }
 
                $qualifiers = $listSerializer->getSerialized( 
$claim->getQualifiers() );
diff --git a/lib/includes/serializers/SerializationOptions.php 
b/lib/includes/serializers/SerializationOptions.php
index 41cffa2..517cf60 100644
--- a/lib/includes/serializers/SerializationOptions.php
+++ b/lib/includes/serializers/SerializationOptions.php
@@ -63,6 +63,12 @@
        const OPT_GROUP_BY_PROPERTIES = 'groupByProperties';
 
        /**
+        * @since 0.5
+        * @const key for serializing snaks with a hash if possible
+        */
+       const OPT_SERIALIZE_SNAKS_WITH_HASH = 'serializeSnaksWithHash';
+
+       /**
         * @var array
         */
        protected $options = array();
diff --git a/lib/includes/serializers/SnakSerializer.php 
b/lib/includes/serializers/SnakSerializer.php
index 91d65a9..2dd44cb 100644
--- a/lib/includes/serializers/SnakSerializer.php
+++ b/lib/includes/serializers/SnakSerializer.php
@@ -65,6 +65,13 @@
 
                $serialization = array();
 
+               if( $this->options->hasOption( 
SerializationOptions::OPT_SERIALIZE_SNAKS_WITH_HASH )
+                       && $this->options->getOption( 
SerializationOptions::OPT_SERIALIZE_SNAKS_WITH_HASH )
+                       && method_exists( $snak, 'getHash' )
+               ) {
+                       $serialization['hash'] = $snak->getHash();
+               }
+
                $serialization['snaktype'] = $snak->getType();
 
                $serialization['property'] = 
$snak->getPropertyId()->getPrefixedId();
diff --git a/repo/tests/phpunit/includes/api/ResultBuilderTest.php 
b/repo/tests/phpunit/includes/api/ResultBuilderTest.php
index 0569fb5..018da38 100644
--- a/repo/tests/phpunit/includes/api/ResultBuilderTest.php
+++ b/repo/tests/phpunit/includes/api/ResultBuilderTest.php
@@ -141,6 +141,9 @@
                $item->addSiteLink( new SimpleSiteLink( 'enwiki', 'Berlin', 
array( new ItemId( 'Q333' ) ) ) );
                $claim = new Claim( new PropertySomeValueSnak( new PropertyId( 
'P65' ) ) );
                $claim->setGuid( 'imaguid' );
+               $qualifiers = new SnakList();
+               $qualifiers->addSnak( new PropertySomeValueSnak( new 
PropertyId( 'P65' ) ) );
+               $claim->setQualifiers( $qualifiers );
                $item->addClaim( $claim );
 
                //todo
@@ -190,7 +193,19 @@
                                                        'snaktype' => 
'somevalue',
                                                        'property' => 'P65'
                                                ),
-                                               'type' => 'claim'
+                                               'type' => 'claim',
+                                               'qualifiers' => array(
+                                                       'P65' => array(
+                                                               array(
+                                                                       'hash' 
=> '210b00274bf03247a89de918f15b12142ebf9e56',
+                                                                       
'snaktype' => 'somevalue',
+                                                                       
'property' => 'P65',
+                                                               )
+                                                       ),
+                                               ),
+                                               'qualifiers-order' => array(
+                                                       'P65'
+                                               ),
                                        )
                                ),
                        ),

-- 
To view, visit https://gerrit.wikimedia.org/r/108519
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3e00aa72bfd64434ecffd597cb6cad542d85a68c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Addshore <addshorew...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to