Page MenuHomePhabricator

Using rest.php seems to show Math has a hard dependancy on WikibaseClient due to use of 'Math.WikibaseConnector' service
Closed, ResolvedPublic

Description

Visiting /w/rest.php/

{
  "message": "Error: exception of type Error: Class \"Wikibase\\Client\\WikibaseClient\" not found",
  "exception": {
    "id": "685519f1e3ffd7e668ab1193",
    "type": "Error",
    "file": "/var/www/wiki/mediawiki/extensions/Math/ServiceWiring.php",
    "line": 48,
    "message": "Class \"Wikibase\\Client\\WikibaseClient\" not found",
    "code": 0,
    "url": "/w/rest.php/",
    "caught_by": "other",
    "backtrace": [
      {
        "file": "/var/www/wiki/mediawiki/core/vendor/wikimedia/services/src/ServiceContainer.php",
        "line": 445,
        "function": "{closure}",
        "class": "Wikimedia\\Services\\ServiceContainer",
        "type": "::"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/vendor/wikimedia/services/src/ServiceContainer.php",
        "line": 411,
        "function": "createService",
        "class": "Wikimedia\\Services\\ServiceContainer",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/MediaWikiServices.php",
        "line": 356,
        "function": "getService",
        "class": "Wikimedia\\Services\\ServiceContainer",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/vendor/wikimedia/services/src/ServiceContainer.php",
        "line": 419,
        "function": "getService",
        "class": "MediaWiki\\MediaWikiServices",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/vendor/wikimedia/object-factory/src/ObjectFactory.php",
        "line": 204,
        "function": "get",
        "class": "Wikimedia\\Services\\ServiceContainer",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/vendor/wikimedia/object-factory/src/ObjectFactory.php",
        "line": 149,
        "function": "getObjectFromSpec",
        "class": "Wikimedia\\ObjectFactory\\ObjectFactory",
        "type": "::"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/Router.php",
        "line": 532,
        "function": "createObject",
        "class": "Wikimedia\\ObjectFactory\\ObjectFactory",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/Handler/RootSpecHandler.php",
        "line": 97,
        "function": "instantiateHandlerObject",
        "class": "MediaWiki\\Rest\\Router",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/Handler/RootSpecHandler.php",
        "line": 89,
        "function": "getRouteSpec",
        "class": "MediaWiki\\Rest\\Handler\\RootSpecHandler",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/Handler/RootSpecHandler.php",
        "line": 45,
        "function": "getPathsSpec",
        "class": "MediaWiki\\Rest\\Handler\\RootSpecHandler",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/SimpleHandler.php",
        "line": 40,
        "function": "run",
        "class": "MediaWiki\\Rest\\Handler\\RootSpecHandler",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/Router.php",
        "line": 565,
        "function": "execute",
        "class": "MediaWiki\\Rest\\SimpleHandler",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/Router.php",
        "line": 455,
        "function": "executeHandler",
        "class": "MediaWiki\\Rest\\Router",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/Rest/EntryPoint.php",
        "line": 216,
        "function": "execute",
        "class": "MediaWiki\\Rest\\Router",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/includes/MediaWikiEntryPoint.php",
        "line": 199,
        "function": "execute",
        "class": "MediaWiki\\Rest\\EntryPoint",
        "type": "->"
      },
      {
        "file": "/var/www/wiki/mediawiki/core/rest.php",
        "line": 38,
        "function": "run",
        "class": "MediaWiki\\MediaWikiEntryPoint",
        "type": "->"
      }
    ]
  },
  "httpCode": 500,
  "httpReason": "Internal Server Error"
}

I'm guessing due to:

	"RestRoutes": [
		{
			"path": "/math/v0/popup/html/{qid}",
			"method": "GET",
			"class": "MediaWiki\\Extension\\Math\\Rest\\Popup",
			"services": [
				"Math.WikibaseConnector",
				"LanguageFactory",
				"LanguageNameUtils",
				"TitleFactory"
			]
		}
	],

And then instantiating the Math.WikibaseConnector service:

	'Math.WikibaseConnector' => static function ( MediaWikiServices $services ): MathWikibaseConnector {
		return new MathWikibaseConnector(
			new ServiceOptions( MathWikibaseConnector::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ),
			WikibaseClient::getRepoLinker( $services ),
			$services->getLanguageFactory(),
			$services->getLanguageNameUtils(),
			WikibaseClient::getEntityRevisionLookup( $services ),
			WikibaseClient::getFallbackLabelDescriptionLookupFactory( $services ),
			WikibaseClient::getSite( $services ),
			WikibaseClient::getEntityIdParser( $services ),
			new MathFormatter( SnakFormatter::FORMAT_HTML ),
			LoggerFactory::getInstance( 'Math' )
		);
	}

There is seemingly no way to gracefully abort creating the service (if the extension registry said WikibaseClient wasn't loaded for example), that would allow things to otherwise continue.

Should this only be enabled conditionally?

Event Timeline

Yes, it should. I don't know how. Maybe this is not even possible within extension.json and needs a special hook.

Reedy renamed this task from Using rest.php seems to show Math has a hard dependancy on WikibaseClient to Using rest.php seems to show Math has a hard dependancy on WikibaseClient due to use of 'Math.WikibaseConnector' service.Apr 7 2024, 8:00 PM

Change #1017448 had a related patch set uploaded (by Reedy; author: Reedy):

[mediawiki/extensions/Math@master] Conditionally register popup RestRoute

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

Change #1017449 had a related patch set uploaded (by Reedy; author: Reedy):

[mediawiki/extensions/Math@master] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017448 abandoned by Reedy:

[mediawiki/extensions/Math@master] Conditionally register popup RestRoute using callback

Reason:

https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Math/+/1017449

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

Change #1017449 merged by jenkins-bot:

[mediawiki/extensions/Math@master] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017846 had a related patch set uploaded (by Physikerwelt; author: Physikerwelt):

[mediawiki/extensions/Math@master] Conditionally skip tests that depend on Wikibase

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

Change #1017790 had a related patch set uploaded (by Reedy; author: Reedy):

[mediawiki/extensions/Math@REL1_41] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017791 had a related patch set uploaded (by Reedy; author: Reedy):

[mediawiki/extensions/Math@REL1_40] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017792 had a related patch set uploaded (by Reedy; author: Reedy):

[mediawiki/extensions/Math@REL1_39] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017790 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_41] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017791 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_40] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017846 merged by jenkins-bot:

[mediawiki/extensions/Math@master] Conditionally skip tests that depend on Wikibase

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

Change #1017795 had a related patch set uploaded (by Reedy; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_41] Conditionally skip tests that depend on Wikibase

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

Change #1017796 had a related patch set uploaded (by Reedy; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_40] Conditionally skip tests that depend on Wikibase

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

Change #1017797 had a related patch set uploaded (by Reedy; author: Physikerwelt):

[mediawiki/extensions/Math@REL1_39] Conditionally skip tests that depend on Wikibase

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

Change #1017795 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_41] Conditionally skip tests that depend on Wikibase

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

Change #1017796 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_40] Conditionally skip tests that depend on Wikibase

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

Change #1017792 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_39] Conditionally register popup RestRoute using ExtensionFunctions

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

Change #1017797 merged by jenkins-bot:

[mediawiki/extensions/Math@REL1_39] Conditionally skip tests that depend on Wikibase

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

Reedy claimed this task.
Reedy removed a project: Patch-For-Review.