Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
WikiLambdaRESTHandler
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 dieRESTfullyWithZError
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
6
 dieRESTfully
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * WikiLambda ZObject simple fetching REST API
4 *
5 * @file
6 * @ingroup Extensions
7 * @copyright 2020– Abstract Wikipedia team; see AUTHORS.txt
8 * @license MIT
9 */
10
11namespace MediaWiki\Extension\WikiLambda\RESTAPI;
12
13use MediaWiki\Extension\WikiLambda\ZErrorException;
14use MediaWiki\Extension\WikiLambda\ZObjects\ZError;
15use MediaWiki\Rest\LocalizedHttpException;
16use MediaWiki\Rest\SimpleHandler;
17use Psr\Log\LoggerInterface;
18use Wikimedia\Message\MessageValue;
19
20/**
21 * Simple REST API to fetch the latest versions of one or more ZObjects
22 * via GET /wikifunctions/v0/fetch/{zids}
23 */
24abstract class WikiLambdaRESTHandler extends SimpleHandler {
25
26    protected LoggerInterface $logger;
27
28    protected function dieRESTfullyWithZError( ZError $zerror, int $code = 500, array $errorData = [] ): never {
29        try {
30            $errorData['errorData'] = $zerror->getErrorData();
31        } catch ( ZErrorException $e ) {
32            // Generating the human-readable error data itself threw. Oh dear.
33
34            $this->logger->warning(
35                __METHOD__ . ' called but an error was thrown when trying to report an error',
36                [
37                    'zerror' => $zerror->getSerialized(),
38                    'error' => $e,
39                ]
40            );
41
42            $errorData['errorData'] = [ 'zerror' => $zerror->getSerialized() ];
43        }
44
45        $this->dieRESTfully( 'wikilambda-zerror', [ $zerror->getZErrorType() ], $code, $errorData );
46    }
47
48    protected function dieRESTfully( string $messageKey, array $spec, int $code, array $errorData = [] ): never {
49        throw new LocalizedHttpException(
50            new MessageValue( $messageKey, $spec ), $code, $errorData
51        );
52    }
53}