Hiong3-eng5 has uploaded a new change for review.
https://gerrit.wikimedia.org/r/117393
Change subject: API cache output for owDefine
......................................................................
API cache output for owDefine
Change-Id: Ie254b4369a84f3cea54c2ddef997452899f15ba8
---
M includes/api/owDefine.php
1 file changed, 106 insertions(+), 60 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikiLexicalData
refs/changes/93/117393/1
diff --git a/includes/api/owDefine.php b/includes/api/owDefine.php
index 3d5bbc8..94cfff9 100644
--- a/includes/api/owDefine.php
+++ b/includes/api/owDefine.php
@@ -3,6 +3,7 @@
/** O m e g a W i k i A P I ' s D e f i n e c l a s s
*
* HISTORY
+ * - 2014-03-07: Cache output
* - 2013-06-12: Add optional translation list option. &syntrans= (syn, trans
or all)
* added ability to add syntrans.
* - 2013-06-05: Readjusted defining and definingByAnyLanguage functions into
@@ -42,71 +43,116 @@
// Get the parameters
$params = $this->extractRequestParams();
+ $defined = $this->cacheDefine( $params );
- // Required parameter
- // Check if dm is valid
- if ( !isset( $params['dm'] ) ) {
- $this->dieUsage( 'parameter dm for adding syntrans is
missing', 'param dm is missing' );
- } else {
- // check that defined_meaning_id exists
- if ( !verifyDefinedMeaningId( $params['dm'] ) ) {
- $this->dieUsage( 'Non existent dm id (' .
$params['dm'] . ').', "dm not found." );
- }
- }
-
- // Optional parameter
- $options = array();
- $part = 'off';
-
- if ( isset( $params['syntrans'] ) ) {
- $part = $params['syntrans'];
- }
-
- // error if $params['part'] is empty
- if ( $part == '' ) {
- $this->dieUsage( 'parameter part for adding syntrans is
empty', 'param part is empty' );
- }
-
- // get syntrans
- // When returning synonyms or translation only
- if ( $part == 'syn' or $part == 'trans' or $part == 'all' ) {
- if ( !isset( $params['lang'] ) ) {
- $this->dieUsage( 'parameter lang for adding
syntrans is missing', 'param lang is missing' );
- }
- $options['part'] = $part;
- }
-
- if ( $params['e'] ) {
- $trueOrFalse = getExpressionId( $params['e'],
$params['lang']);
- if ( $trueOrFalse == true ) {
- $options['e'] = $params['e'];
- }
- }
-
- if ( $params['e'] && !isset( $options['e'] ) ) {
- $this->dieUsage( 'parameter e for adding syntrans does
not exist', 'param e does not exist' );
- }
-
- if ( $params['lang'] ) {
- $trueOrFalse = LanguageIdExist( $params['lang']);
- if ( $trueOrFalse == true ) {
- $options['lang'] = $params['lang'];
- $defined = $this->defining( $params['dm'],
$params['lang'], $options, $this->getModuleName() );
- } else {
- $this->dieUsage( 'parameter lang for adding
syntrans does not exist', 'param lang does not exist' );
- }
- } else {
- if ( $part == 'syn' or $part == 'trans' or $part ==
'all' ) {
- $this->dieUsage( 'parameter lang for adding
syntrans is empty', 'param lang empty' );
- }
- $defined = $this->definingForAnyLanguage(
$params['dm'], $options, $this->getModuleName() );
- }
-
- $defined = $defined[ $this->getModuleName() ];
$this->getResult()->addValue( null, $this->getModuleName(),
$defined );
return true;
}
+ /** Cache the function
+ * Note: dieUsage must be used outside the cache lest the cache will
return empty the
+ * next time it is accessed.
+ */
+ protected function cacheDefine( $params ) {
+ $defineCacheKey = 'API:ow_define:dm=' . $params['dm'];
+ if ( isset( $params['lang'] ) ) $defineCacheKey .=
":ver={$params['lang']}";
+ if ( isset( $params['syntrans'] ) ) $defineCacheKey .=
":ver={$params['syntrans']}";
+ if ( isset( $params['e'] ) ) $defineCacheKey .=
":ver={$params['e']}";
+ if ( isset( $params['ver'] ) ) $defineCacheKey .=
":ver={$params['ver']}";
+
+ $cache = new CacheHelper();
+
+ $cache->setCacheKey( array( $defineCacheKey ) );
+ $define = $cache->getCachedValue(
+ function ( $params ) {
+ // Required parameter
+ // Check if dm is valid
+ if ( isset( $params['dm'] ) ) {
+ // check that defined_meaning_id exists
+ if ( !verifyDefinedMeaningId(
$params['dm'] ) ) {
+ return array( 'error' => 'dm
not found' );
+ }
+ }
+
+ // Optional parameter
+ $options = array();
+ $partIsValid = false;
+
+ if ( isset( $params['syntrans'] ) ) {
+ $options['part'] = $params['syntrans'];
+ } else {
+ $options['part'] = 'off';
+ $partIsValid = true;
+ }
+
+ // error if $params['part'] is empty
+ if ( $options['part'] == '' ) {
+ return array( 'error' => 'nullsyntrans'
);
+ }
+
+ // get syntrans
+ // When returning synonyms or translation only
+ if ( $options['part'] == 'syn' or
$options['part'] == 'trans' or $options['part'] == 'all' ) {
+ $partIsValid = true;
+ if ( !isset( $params['lang'] ) ) {
+ return array( 'error' =>
'nolang' );
+ }
+ }
+
+ if ( !$partIsValid ) {
+ return array( 'error' =>
'invalidsyntrans' );
+ }
+
+ if ( $params['e'] ) {
+ $trueOrFalse = getExpressionId(
$params['e'], $params['lang']);
+ if ( $trueOrFalse == true ) {
+ $options['e'] = $params['e'];
+ }
+ }
+
+ if ( $params['e'] && !isset( $options['e'] ) ) {
+ return array( 'error' => 'e not found'
);
+ }
+
+ if ( $params['lang'] ) {
+ $trueOrFalse = LanguageIdExist(
$params['lang']);
+ if ( $trueOrFalse == true ) {
+ $options['lang'] =
$params['lang'];
+ $defined = $this->defining(
$params['dm'], $params['lang'], $options, $this->getModuleName() );
+ } else {
+ return array( 'error' => 'lang
not found' );
+ }
+ } else {
+ if ( $options['part'] == 'syn' or
$options['part'] == 'trans' or $options['part'] == 'all' ) {
+ return array( 'error' =>
'nulllang' );
+ }
+ $defined =
$this->definingForAnyLanguage( $params['dm'], $options, $this->getModuleName()
);
+ }
+
+ return $defined[ $this->getModuleName() ];
+ }, array( $params )
+ );
+ $cache->setExpiry( 10800 ); // 3 hours
+ $cache->saveCache();
+
+ // catch errors here
+ if ( isset ( $define['error'] ) ) {
+ $defineErrCode = array(
+ 'nolang' => 'The lang parameter must be set',
+ 'dm not found' => 'Non existent dm id (' .
$params['dm'] . ')',
+ 'e not found' => 'Non existent e id (' .
$params['e'] . ')',
+ 'lang not found' => 'Non existent lang id (' .
$params['lang'] . ')',
+ 'nullsyntrans' => 'parameter syntrans for
adding syntrans is empty',
+ 'nulllang' => 'parameter lang for adding
syntrans is empty',
+ 'invalidsyntrans' => 'parameter syntrans is
neither syn, trans nor all',
+ );
+ $this->dieUsage( $defineErrCode["{$define['error']}"],
$define['error'] );
+ }
+
+ // if no error was found, return the result
+ return $define;
+ }
+
// Version
public function getVersion() {
return __CLASS__ . ': $Id$';
--
To view, visit https://gerrit.wikimedia.org/r/117393
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie254b4369a84f3cea54c2ddef997452899f15ba8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikiLexicalData
Gerrit-Branch: master
Gerrit-Owner: Hiong3-eng5 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits