jenkins-bot has submitted this change and it was merged. Change subject: Update Wikidata - allow disabling data types ......................................................................
Update Wikidata - allow disabling data types e.g. external-identifiers that are not ready yet to deploy Change-Id: Ief437d4bf8054bfd1b27449b0f88e586be215935 --- M composer.lock M extensions/Wikibase/client/config/WikibaseClient.default.php M extensions/Wikibase/client/includes/WikibaseClient.php M extensions/Wikibase/docs/options.wiki M extensions/Wikibase/lib/config/WikibaseLib.default.php M extensions/Wikibase/lib/includes/DataTypeDefinitions.php M extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php M extensions/Wikibase/repo/config/Wikibase.default.php M extensions/Wikibase/repo/includes/WikibaseRepo.php M vendor/composer/installed.json 10 files changed, 106 insertions(+), 39 deletions(-) Approvals: Alex Monk: Looks good to me, approved jenkins-bot: Verified diff --git a/composer.lock b/composer.lock index c538093..6c47d7d 100644 --- a/composer.lock +++ b/composer.lock @@ -668,7 +668,7 @@ "version": "0.15.6", "source": { "type": "git", - "url": "https://github.com/wikimedia/data-values-value-view.git", + "url": "https://gerrit.wikimedia.org/r/data-values/value-view", "reference": "d4620fa54d0506f3319963592f9423473deca9d2" }, "dist": { @@ -1393,12 +1393,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb" + "reference": "0e38d250266d929976ac5b8aec810cda2447a75e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/06ee5284d4e0a378e40caf3498963dc576e836eb", - "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/0e38d250266d929976ac5b8aec810cda2447a75e", + "reference": "0e38d250266d929976ac5b8aec810cda2447a75e", "shasum": "" }, "require": { @@ -1469,7 +1469,7 @@ "wikibaserepo", "wikidata" ], - "time": "2016-01-11 21:20:36" + "time": "2016-01-13 08:06:44" }, { "name": "wikibase/wikimedia-badges", @@ -1511,7 +1511,7 @@ "support": { "irc": "irc://irc.freenode.net/wikidata" }, - "time": "2015-08-12 09:30:01" + "time": "2015-08-04 17:18:47" } ], "packages-dev": [], diff --git a/extensions/Wikibase/client/config/WikibaseClient.default.php b/extensions/Wikibase/client/config/WikibaseClient.default.php index 49c0dde..7c68e48 100644 --- a/extensions/Wikibase/client/config/WikibaseClient.default.php +++ b/extensions/Wikibase/client/config/WikibaseClient.default.php @@ -77,6 +77,18 @@ */ 'sharedCacheDuration' => 60 * 60, + /** + * List of data types (by data type id) not enabled on the wiki. + * This setting is intended to aid with deployment of new data types + * or on new Wikibase installs without items and properties yet. + * + * This setting should be consistent with the corresponding setting on the repo. + * + * WARNING: Disabling a data type after it is in use is dangerous + * and might break items. + */ + 'disabledDataTypes' => array(), + // The type of object cache to use. Use CACHE_XXX constants. // This is both a repo and client setting, and should be set to the same value in // repo and clients for multiwiki setups. diff --git a/extensions/Wikibase/client/includes/WikibaseClient.php b/extensions/Wikibase/client/includes/WikibaseClient.php index c8ec0ab..29eb79f 100644 --- a/extensions/Wikibase/client/includes/WikibaseClient.php +++ b/extensions/Wikibase/client/includes/WikibaseClient.php @@ -485,10 +485,15 @@ $dataTypeDefinitions = $wgWBClientDataTypes; Hooks::run( 'WikibaseClientDataTypes', array( &$dataTypeDefinitions ) ); + $settings = new SettingsArray( $wgWBClientSettings ); + return new self( - new SettingsArray( $wgWBClientSettings ), + $settings, $wgContLang, - new DataTypeDefinitions( $dataTypeDefinitions ) + new DataTypeDefinitions( + $dataTypeDefinitions, + $settings->getSetting( 'disabledDataTypes' ) + ) ); } diff --git a/extensions/Wikibase/docs/options.wiki b/extensions/Wikibase/docs/options.wiki index aacf5d6..f574822 100644 --- a/extensions/Wikibase/docs/options.wiki +++ b/extensions/Wikibase/docs/options.wiki @@ -30,12 +30,10 @@ :'''Warning:''' do not change this if you already have Wikibase entities in your database, since they may become unreadable! ;useChangesTable: Whether to record changes in the database, so they can be pushed to clients. Boolean, defaults to <code>true</code>. May be set to false in situations where there are no clients to notify, to preserve space. '''Note''' that if this is true, the <code>pruneChanges.php</code> script should be run periodically to remove old changes from the database table. ;changeHandlers: Array mapping change type IDs to handler classes. May be used by extensions to register additional change classes. -;dataTypes: Array listing the available data types that can be used in snaks (and thus in claims and statements). The relevant data type identifiers are defined by the DataType extension. Default: +;disabledDataTypes: Array listing of disabled data types on a wiki. This setting is intended to be used a new Wikibase install without items yet, or to control deployment of new data types. This setting should be set the same in the client and repo settings. +Default: <poem> - array( - 'wikibase-item', - 'commonsMedia', - ) + array() </poem> ;maxSerializedEntitySize: The maximum serialized size of entities, in KB. Loading and storing will fail if this size is exceeded. This is intended as a hard limit that prevents very large chunks of data being stored or processed due to abuse or erroneous code. Defaults to MediaWiki core's $wgMaxArticleSize setting. diff --git a/extensions/Wikibase/lib/config/WikibaseLib.default.php b/extensions/Wikibase/lib/config/WikibaseLib.default.php index de19c74..b530ff1 100644 --- a/extensions/Wikibase/lib/config/WikibaseLib.default.php +++ b/extensions/Wikibase/lib/config/WikibaseLib.default.php @@ -60,19 +60,6 @@ 'wikibase-query~restore' => 'Wikibase\EntityChange', ), - 'dataTypes' => array( - 'commonsMedia', - 'globe-coordinate', - 'quantity', - 'monolingualtext', - 'string', - 'time', - 'url', - 'external-id', - 'wikibase-item', - 'wikibase-property', - ), - 'maxSerializedEntitySize' => $GLOBALS['wgMaxArticleSize'], ); diff --git a/extensions/Wikibase/lib/includes/DataTypeDefinitions.php b/extensions/Wikibase/lib/includes/DataTypeDefinitions.php index fa1766c..efa04e5 100644 --- a/extensions/Wikibase/lib/includes/DataTypeDefinitions.php +++ b/extensions/Wikibase/lib/includes/DataTypeDefinitions.php @@ -53,9 +53,16 @@ * (with the prefix "PT:") and value types (with the prefix "VT:") to data type definitions. * Each data type definitions are associative arrays, refer to the class level documentation * for details. + * @param string[] $disabledDataTypes Array of disabled data types. */ - public function __construct( $dataTypeDefinitions = array() ) { - Assert::parameterElementType( 'array', $dataTypeDefinitions, '$dataTypeDefinitions' ); + public function __construct( + array $dataTypeDefinitions = array(), + array $disabledDataTypes = array() + ) { + $dataTypeDefinitions = $this->filterDisabledDataTypes( + $dataTypeDefinitions, + $disabledDataTypes + ); $this->registerDataTypes( $dataTypeDefinitions ); } @@ -74,7 +81,11 @@ Assert::parameterElementType( 'array', $dataTypeDefinitions, '$dataTypeDefinitions' ); foreach ( $dataTypeDefinitions as $id => $def ) { - Assert::parameter( strpos( $id, ':' ), "\$dataTypeDefinitions[$id]", 'Key must start with a prefix like "PT:" or "VT:".' ); + Assert::parameter( + strpos( $id, ':' ), + "\$dataTypeDefinitions[$id]", + 'Key must start with a prefix like "PT:" or "VT:".' + ); if ( isset( $this->dataTypeDefinitions[$id] ) ) { $this->dataTypeDefinitions[$id] = array_merge( @@ -88,6 +99,24 @@ } /** + * @param array[] $dataTypeDefinitions Associative array of data types and definitions. + * @param string[] $disabledTypes List of disabled data types + * + * @return array[] Filtered data type definitions + */ + private function filterDisabledDataTypes( array $dataTypeDefinitions, array $disabledTypes ) { + foreach ( $dataTypeDefinitions as $id => $def ) { + if ( 0 === strpos( $id, 'PT' ) ) { + if ( in_array( substr( $id, 3 ), $disabledTypes ) ) { + unset( $dataTypeDefinitions[$id] ); + } + } + } + + return $dataTypeDefinitions; + } + + /** * @param array $map * @param string $prefix * diff --git a/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php b/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php index 569dfb4..c4aed4e 100644 --- a/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php +++ b/extensions/Wikibase/lib/tests/phpunit/DataTypeDefinitionsTest.php @@ -16,8 +16,8 @@ */ class DataTypeDefinitionsTest extends \MediaWikiTestCase { - private function getDataTypeDefinitions() { - $definitions = array( + private function getDefinitions() { + return array( 'VT:FOO' => array( 'formatter-factory-callback' => 'DataTypeDefinitionsTest::getFooValueFormatter', 'parser-factory-callback' => 'DataTypeDefinitionsTest::getFooValueParser', @@ -34,8 +34,10 @@ 'formatter-factory-callback' => 'DataTypeDefinitionsTest::getBarFormatter', ) ); + } - return new DataTypeDefinitions( $definitions ); + private function getDataTypeDefinitions() { + return new DataTypeDefinitions( $this->getDefinitions() ); } public function testTypeIds() { @@ -129,4 +131,21 @@ ); } + public function testDataTypeDefinitions_onlySomeDataTypesEnabled() { + $definitions = $this->getDefinitions(); + $defs = new DataTypeDefinitions( $definitions, array( 'bar' ) ); + + $this->assertSame( + array( 'foo' ), + $defs->getTypeIds(), + 'data type ids' + ); + + $this->assertSame( + array( 'VT:FOO' => 'DataTypeDefinitionsTest::getFooValueFormatter' ), + $defs->getFormatterFactoryCallbacks( DataTypeDefinitions::PREFIXED_MODE ), + 'formatter factory callbacks, prefixed mode' + ); + } + } diff --git a/extensions/Wikibase/repo/config/Wikibase.default.php b/extensions/Wikibase/repo/config/Wikibase.default.php index 8bc11c5..5fc6239 100644 --- a/extensions/Wikibase/repo/config/Wikibase.default.php +++ b/extensions/Wikibase/repo/config/Wikibase.default.php @@ -123,6 +123,18 @@ // repo and clients for multiwiki setups. 'sharedCacheType' => $GLOBALS['wgMainCacheType'], + /** + * List of data types (by data type id) not enabled on the wiki. + * This setting is intended to aid with deployment of new data types + * or on new Wikibase installs without items and properties yet. + * + * This setting should be consistent with the corresponding setting on the client. + * + * WARNING: Disabling a data type after it is in use is dangerous + * and might break items. + */ + 'disabledDataTypes' => array(), + // Special non-canonical languages and their BCP 47 mappings // Based on: https://meta.wikimedia.org/wiki/Special_language_codes 'canonicalLanguageCodes' => array( diff --git a/extensions/Wikibase/repo/includes/WikibaseRepo.php b/extensions/Wikibase/repo/includes/WikibaseRepo.php index 3297c5f..8441d89 100644 --- a/extensions/Wikibase/repo/includes/WikibaseRepo.php +++ b/extensions/Wikibase/repo/includes/WikibaseRepo.php @@ -241,9 +241,14 @@ Hooks::run( 'WikibaseRepoDataTypes', array( &$dataTypeDefinitions ) ); if ( $instance === null ) { + $settings = new SettingsArray( $wgWBRepoSettings ); + $instance = new self( - new SettingsArray( $wgWBRepoSettings ), - new DataTypeDefinitions( $dataTypeDefinitions ), + $settings, + new DataTypeDefinitions( + $dataTypeDefinitions, + $settings->getSetting( 'disabledDataTypes' ) + ), $wgContLang ); } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 73e1644..d9f25aa 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -772,7 +772,7 @@ "version_normalized": "0.15.6.0", "source": { "type": "git", - "url": "https://github.com/wikimedia/data-values-value-view.git", + "url": "https://gerrit.wikimedia.org/r/data-values/value-view", "reference": "d4620fa54d0506f3319963592f9423473deca9d2" }, "dist": { @@ -1480,12 +1480,12 @@ "source": { "type": "git", "url": "https://github.com/wikimedia/mediawiki-extensions-Wikibase.git", - "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb" + "reference": "0e38d250266d929976ac5b8aec810cda2447a75e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/06ee5284d4e0a378e40caf3498963dc576e836eb", - "reference": "06ee5284d4e0a378e40caf3498963dc576e836eb", + "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/0e38d250266d929976ac5b8aec810cda2447a75e", + "reference": "0e38d250266d929976ac5b8aec810cda2447a75e", "shasum": "" }, "require": { @@ -1517,7 +1517,7 @@ "jakub-onderka/php-parallel-lint": "0.9.2", "mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0" }, - "time": "2016-01-11 21:20:36", + "time": "2016-01-13 08:06:44", "type": "mediawiki-extension", "installation-source": "dist", "autoload": { -- To view, visit https://gerrit.wikimedia.org/r/263857 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ief437d4bf8054bfd1b27449b0f88e586be215935 Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/extensions/Wikidata Gerrit-Branch: wmf/1.27.0-wmf.10 Gerrit-Owner: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Alex Monk <kren...@gmail.com> Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits