Jforrester has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/349368 )
Change subject: API: Identify missing and no-TemplateData pages in the response
......................................................................
API: Identify missing and no-TemplateData pages in the response
Change-Id: I7905502d0c419a04e4487095214634f1513b461c
---
M api/ApiTemplateData.php
1 file changed, 50 insertions(+), 45 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/TemplateData
refs/changes/68/349368/1
diff --git a/api/ApiTemplateData.php b/api/ApiTemplateData.php
index d66ae1f..ce04bc9 100644
--- a/api/ApiTemplateData.php
+++ b/api/ApiTemplateData.php
@@ -52,56 +52,61 @@
$pageSet = $this->getPageSet();
$pageSet->execute();
$titles = $pageSet->getGoodTitles(); // page_id => Title object
-
- if ( !count( $titles ) ) {
- $result->addValue( null, 'pages', (object) [] );
- return;
- }
-
- $db = $this->getDB();
- $res = $db->select( 'page_props',
- [ 'pp_page', 'pp_value' ], [
- 'pp_page' => array_keys( $titles ),
- 'pp_propname' => 'templatedata'
- ],
- __METHOD__,
- [ 'ORDER BY', 'pp_page' ]
- );
+ $missingTitles = $pageSet->getMissingTitles(); // page_id =>
Title object
$resp = [];
- foreach ( $res as $row ) {
- $rawData = $row->pp_value;
- $tdb = TemplateDataBlob::newFromDatabase( $rawData );
- $status = $tdb->getStatus();
+ foreach ( $missingTitles as $missingTitleId => $missingTitle) {
+ $resp[ $missingTitleId ] = [ 'title' => $missingTitle,
'missing' => true ];
+ }
- if ( !$status->isOK() ) {
- $this->dieWithError(
- [ 'apierror-templatedata-corrupt',
intval( $row->pp_page ), $status->getMessage() ]
- );
+ foreach ( $titles as $titleId => $title) {
+ $resp[ $titleId ] = [ 'title' => $title,
'notemplatedata' => true ];
+ }
+
+ if ( count( $titles ) ) {
+ $db = $this->getDB();
+ $res = $db->select( 'page_props',
+ [ 'pp_page', 'pp_value' ], [
+ 'pp_page' => array_keys( $titles ),
+ 'pp_propname' => 'templatedata'
+ ],
+ __METHOD__,
+ [ 'ORDER BY', 'pp_page' ]
+ );
+
+ foreach ( $res as $row ) {
+ $rawData = $row->pp_value;
+ $tdb = TemplateDataBlob::newFromDatabase(
$rawData );
+ $status = $tdb->getStatus();
+
+ if ( !$status->isOK() ) {
+ $this->dieWithError(
+ [
'apierror-templatedata-corrupt', intval( $row->pp_page ), $status->getMessage()
]
+ );
+ }
+
+ if ( $langCode ) {
+ $data = $tdb->getDataInLanguage(
$langCode );
+ } else {
+ $data = $tdb->getData();
+ }
+
+ // HACK: don't let ApiResult's formatversion=1
compatibility layer mangle our booleans
+ // to empty strings / absent properties
+ foreach ( $data->params as &$param ) {
+ $param->{ApiResult::META_BC_BOOLS} = [
'required', 'suggested', 'deprecated' ];
+ }
+ unset( $param );
+
+ $data->params->{ApiResult::META_TYPE} = 'kvp';
+ $data->params->{ApiResult::META_KVP_KEY_NAME} =
'key';
+
$data->params->{ApiResult::META_INDEXED_TAG_NAME} = 'param';
+ ApiResult::setIndexedTagName(
$data->paramOrder, 'p' );
+
+ unset ( $resp[$row->pp_page]['notemplatedata']
);
+ $resp[$row->pp_page] += (array) $data;
}
-
- if ( $langCode ) {
- $data = $tdb->getDataInLanguage( $langCode );
- } else {
- $data = $tdb->getData();
- }
-
- // HACK: don't let ApiResult's formatversion=1
compatibility layer mangle our booleans
- // to empty strings / absent properties
- foreach ( $data->params as &$param ) {
- $param->{ApiResult::META_BC_BOOLS} = [
'required', 'suggested', 'deprecated' ];
- }
- unset( $param );
-
- $data->params->{ApiResult::META_TYPE} = 'kvp';
- $data->params->{ApiResult::META_KVP_KEY_NAME} = 'key';
- $data->params->{ApiResult::META_INDEXED_TAG_NAME} =
'param';
- ApiResult::setIndexedTagName( $data->paramOrder, 'p' );
-
- $resp[$row->pp_page] = [
- 'title' => strval( $titles[$row->pp_page] ),
- ] + (array) $data;
}
ApiResult::setArrayType( $resp, 'kvp', 'id' );
--
To view, visit https://gerrit.wikimedia.org/r/349368
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7905502d0c419a04e4487095214634f1513b461c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TemplateData
Gerrit-Branch: master
Gerrit-Owner: Jforrester <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits