Jeroen De Dauw has uploaded a new change for review. https://gerrit.wikimedia.org/r/153714
Change subject: [DNM] DM 1.0 compat ...................................................................... [DNM] DM 1.0 compat Change-Id: I1ec5ac5c8f7b4a6793edd058882685ad0818d26c --- M composer.json M lib/includes/serializers/LegacyInternalClaimSerializer.php D lib/includes/serializers/LegacyInternalEntitySerializer.php D lib/tests/phpunit/serializers/LegacyInternalEntitySerializerTest.php M repo/config/Wikibase.default.php M repo/tests/phpunit/includes/WikibaseRepoTest.php 6 files changed, 4 insertions(+), 172 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/14/153714/1 diff --git a/composer.json b/composer.json index bdcdcbd..ca670a6 100644 --- a/composer.json +++ b/composer.json @@ -35,7 +35,7 @@ "data-values/javascript": "~0.5.1", "data-values/value-view": "~0.6.5", - "wikibase/data-model": "~0.8.2", + "wikibase/data-model": "~1.0@dev", "wikibase/data-model-javascript": "~0.3.0", "wikibase/data-model-serialization": "~1.0.1", "wikibase/internal-serialization": "~1.1", diff --git a/lib/includes/serializers/LegacyInternalClaimSerializer.php b/lib/includes/serializers/LegacyInternalClaimSerializer.php index d3fe17b..9bdcdf7 100644 --- a/lib/includes/serializers/LegacyInternalClaimSerializer.php +++ b/lib/includes/serializers/LegacyInternalClaimSerializer.php @@ -4,6 +4,7 @@ use InvalidArgumentException; use Wikibase\DataModel\Claim\Claim; +use Wikibase\Repo\WikibaseRepo; class LegacyInternalClaimSerializer implements \Serializers\Serializer { @@ -20,7 +21,7 @@ throw new InvalidArgumentException( '$claim must be an Claim' ); } - return $claim->toArray(); + return WikibaseRepo::getDefaultInstance()->getInternalClaimSerializer()->serialize( $claim ); } } diff --git a/lib/includes/serializers/LegacyInternalEntitySerializer.php b/lib/includes/serializers/LegacyInternalEntitySerializer.php deleted file mode 100644 index 062bbf3..0000000 --- a/lib/includes/serializers/LegacyInternalEntitySerializer.php +++ /dev/null @@ -1,61 +0,0 @@ -<?php - -namespace Wikibase\Lib\Serializers; - -use InvalidArgumentException; -use Serializers\Serializer as NewStyleSerializer; -use Wikibase\DataModel\Entity\Entity; - -/** - * Serializer for generating the legacy serialization of an Entity. - * - * @since 0.5 - * @licence GNU GPL v2+ - * @author Daniel Kinzler - */ -class LegacyInternalEntitySerializer implements NewStyleSerializer { - - /** - * Returns an array structure representing the given entity, - * by calling $entity->toArray(). - * - * @see Serializer::getSerialized() - * - * @param Entity $entity - * - * @throws InvalidArgumentException - * @return array - */ - public function serialize( $entity ) { - if ( !( $entity ) ) { - throw new InvalidArgumentException( '$entity must be an Entity' ); - } - - return $entity->toArray(); - } - - /** - * Detects blobs that may be using a legacy serialization format. - * WikibaseRepo uses this for the $legacyExportFormatDetector parameter - * when constructing EntityHandlers. - * - * @see WikibaseRepo::newItemHandler - * @see WikibaseRepo::newPropertyHandler - * @see EntityHandler::__construct - * - * @note: False positives (detecting a legacy format when really no legacy format was used) - * are acceptable, false negatives (failing to detect a legacy format when one was used) - * are not acceptable. - * - * @param string $blob - * @param string $format - * - * @return bool True if $blob seems to be using a legacy serialization format. - */ - public static function isBlobUsingLegacyFormat( $blob, $format ) { - // The legacy serialization uses something like "entity":["item",21] or - // even "entity":"p21" for the entity ID. - return preg_match( '/"entity"\s*:/', $blob ) > 0; - } - -} diff --git a/lib/tests/phpunit/serializers/LegacyInternalEntitySerializerTest.php b/lib/tests/phpunit/serializers/LegacyInternalEntitySerializerTest.php deleted file mode 100644 index c2eb039..0000000 --- a/lib/tests/phpunit/serializers/LegacyInternalEntitySerializerTest.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php - -namespace Wikibase\Test; - -use DataValues\Serializers\DataValueSerializer; -use RuntimeException; -use Wikibase\DataModel\Entity\Item; -use Wikibase\DataModel\Entity\ItemId; -use Wikibase\InternalSerialization\SerializerFactory; -use Wikibase\Lib\Serializers\LegacyInternalEntitySerializer; - -/** - * @covers Wikibase\Lib\Serializers\LegacyInternalEntitySerializer - * - * @group WikibaseLib - * @group Wikibase - * @group WikibaseSerialization - * - * @licence GNU GPL v2+ - * @author Daniel Kinzler - */ -class LegacyInternalEntitySerializerTest extends \PHPUnit_Framework_TestCase { - - public function legacyFormatBlobProvider() { - $entity = Item::newEmpty(); - $entity->setId( new ItemId( 'Q12' ) ); - $entity->setLabel( 'en', 'Test' ); - - // make legacy blob - $legacySerializer = new LegacyInternalEntitySerializer(); - $oldBlob = json_encode( $legacySerializer->serialize( $entity ) ); - - // fake ancient legacy blob: - // replace "entity":["item",7] with "entity":"q7" - $id = $entity->getId()->getSerialization(); - $veryOldBlob = preg_replace( '/"entity":\["\w+",\d+\]/', '"entity":"' . strtolower( $id ) . '"', $oldBlob ); - - // sanity - if ( $oldBlob == $veryOldBlob ) { - throw new RuntimeException( 'Failed to fake very old serialization format based on oldish serialization format.' ); - } - - // make new style blob - $newSerializerFactory = new SerializerFactory( new DataValueSerializer() ); - $newSerializer = $newSerializerFactory->newEntitySerializer(); - $newBlob = json_encode( $newSerializer->serialize( $entity ) ); - - return array( - 'old serialization / ancient id format' => array( $veryOldBlob, CONTENT_FORMAT_JSON, true ), - 'old serialization / new silly id format' => array( $oldBlob, CONTENT_FORMAT_JSON, true ), - 'new serialization format' => array( $newBlob, CONTENT_FORMAT_JSON, false ), - ); - } - - /** - * @dataProvider legacyFormatBlobProvider - */ - public function testIsBlobUsingLegacyFormat( $blob, $format, $expected ) { - $actual = LegacyInternalEntitySerializer::isBlobUsingLegacyFormat( $blob, $format ); - $this->assertEquals( $expected, $actual ); - } - -} diff --git a/repo/config/Wikibase.default.php b/repo/config/Wikibase.default.php index 012b681..f9880d9 100644 --- a/repo/config/Wikibase.default.php +++ b/repo/config/Wikibase.default.php @@ -85,7 +85,7 @@ // Can be used to override the serialization used for storage. // Typical value: Wikibase\Lib\Serializers\LegacyInternalClaimSerializer - 'internalClaimSerializerClass' => 'Wikibase\Lib\Serializers\LegacyInternalClaimSerializer', + 'internalClaimSerializerClass' => null, 'transformLegacyFormatOnExport' => function( SettingsArray $settings ) { // Enabled, unless internalEntitySerializerClass is set. diff --git a/repo/tests/phpunit/includes/WikibaseRepoTest.php b/repo/tests/phpunit/includes/WikibaseRepoTest.php index add8699..3a3f3df 100644 --- a/repo/tests/phpunit/includes/WikibaseRepoTest.php +++ b/repo/tests/phpunit/includes/WikibaseRepoTest.php @@ -159,51 +159,6 @@ $this->assertInstanceOf( 'Wikibase\Lib\Changes\EntityChangeFactory', $factory ); } - // TODO: DM 1.0 blocker, this uses Entity::toArray - public function testGetEntityContentDataCodec_legacy() { - $item = Item::newEmpty(); - $item->setLabel( 'en', 'Hello' ); - $item->setLabel( 'es', 'Holla' ); - - $repo = $this->getDefaultInstance(); - $repo->getSettings()->setSetting( 'internalEntitySerializerClass', 'Wikibase\Lib\Serializers\LegacyInternalEntitySerializer' ); - - $codec = $repo->getEntityContentDataCodec(); - $json = $codec->encodeEntity( $item, CONTENT_FORMAT_JSON ); - $data = json_decode( $json, true ); - - $this->assertEquals( $item->toArray(), $data ); - } - - // TODO: DM 1.0 blocker, this uses Entity::toArray - public function testGetInternalEntitySerializer_legacy() { - $item = Item::newEmpty(); - $item->setLabel( 'en', 'Hello' ); - $item->setLabel( 'es', 'Holla' ); - - $repo = $this->getDefaultInstance(); - $repo->getSettings()->setSetting( 'internalEntitySerializerClass', 'Wikibase\Lib\Serializers\LegacyInternalEntitySerializer' ); - - $serializer = $repo->getInternalEntitySerializer(); - $data = $serializer->serialize( $item ); - - $this->assertEquals( $item->toArray(), $data ); - } - - // TODO: DM 1.0 blocker, this uses Claim::toArray - public function testGetInternalClaimSerializer_legacy() { - $claim = new Statement( new PropertyNoValueSnak( 42 ) ); - $claim->setGuid( 'kittens' ); - - $repo = $this->getDefaultInstance(); - $repo->getSettings()->setSetting( 'internalClaimSerializerClass', 'Wikibase\Lib\Serializers\LegacyInternalClaimSerializer' ); - - $serializer = $repo->getInternalClaimSerializer(); - $data = $serializer->serialize( $claim ); - - $this->assertEquals( $claim->toArray(), $data ); - } - public function testNewItemHandler() { $repo = $this->getDefaultInstance(); $handler = $repo->newItemHandler(); -- To view, visit https://gerrit.wikimedia.org/r/153714 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1ec5ac5c8f7b4a6793edd058882685ad0818d26c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits