Introduced common exception superclass

This commit is contained in:
lukas committed 2026-10-15 13:39:44 +00:00
1 parent f749d4a05e
commit afafb1ac3d
12 files changed
+48 -28

No files matched your search

@@ -13,6 +13,7 @@ use Nyholm\Psr7\Factory\Psr17Factory;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
use GuzzleHttp\Client, GuzzleHttp\HandlerStack, GuzzleHttp\Middleware;
use Psr\Http\Message\RequestInterface, Psr\Http\Message\ResponseInterface;
use CloudObjects\SDK\Exceptions\SDKException;
/**
* The context of an request for an account.
@@ -42,7 +43,7 @@ class AccountContext {
*/
public function __construct(IRI $aauid, $accessToken, ?DataLoader $dataLoader = null) {
if (AAUIDParser::getType($aauid) != AAUIDParser::AAUID_ACCOUNT)
throw new \Exception("Not a valid AAUID");
throw new SDKException("Not a valid AAUID");
$this->aauid = $aauid;
$this->accessToken = $accessToken;
@@ -324,7 +325,7 @@ class AccountContext {
*/
public function setLogCode($logCode) {
if (!$this->request) {
throw new \Exception('Not in a request context.');
throw new SDKException('Not in a request context.');
}
$this->logCode = $logCode;
}
+2 -2
View File
@@ -6,7 +6,7 @@
namespace CloudObjects\SDK\Common;
use Exception;
use CloudObjects\SDK\Exceptions\SDKException;
use ML\IRI\IRI;
use CloudObjects\SDK\NodeReader;
use Defuse\Crypto\Key, Defuse\Crypto\Crypto;
@@ -55,7 +55,7 @@ class CryptoHelper {
*/
public function __construct(ObjectRetriever $objectRetriever, ?IRI $namespaceCoid = null) {
if (!class_exists('Defuse\Crypto\Crypto'))
throw new Exception("Run composer require defuse/php-encryption before using CryptoHelper.");
throw new SDKException("Run composer require defuse/php-encryption before using CryptoHelper.");
$this->objectRetriever = $objectRetriever;
$this->namespace = isset($namespaceCoid)
@@ -9,6 +9,6 @@ namespace CloudObjects\SDK\Exceptions;
/**
* An Exception that is thrown when the Core API returned an error.
*/
class CoreAPIException extends \Exception {
class CoreAPIException extends SDKException {
}
@@ -10,6 +10,6 @@ namespace CloudObjects\SDK\Exceptions;
* An Exception that is thrown when an object's configuration
* doesn't match the client's expectations.
*/
class InvalidObjectConfigurationException extends \Exception {
class InvalidObjectConfigurationException extends SDKException {
}
@@ -9,6 +9,6 @@ namespace CloudObjects\SDK\Exceptions;
/**
* An Exception that is thrown when the SDK's configuration isn't valid.
*/
class InvalidSDKConfigurationException extends \Exception {
class InvalidSDKConfigurationException extends SDKException {
}
@@ -0,0 +1,15 @@
<?php
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
namespace CloudObjects\SDK\Exceptions;
/**
* The common superclass for all Exceptions thrown by the SDK.
* It is also thrown directly for errors that have no more specific Exception.
*/
class SDKException extends \Exception {
}
+7 -7
View File
@@ -6,7 +6,7 @@
namespace CloudObjects\SDK\Helpers;
use Exception;
use CloudObjects\SDK\Exceptions\SDKException;
use CloudObjects\SDK\Exceptions\InvalidSDKConfigurationException;
use CloudObjects\SDK\NodeReader, CloudObjects\SDK\ObjectRetriever;
@@ -35,7 +35,7 @@ class SDKLoader {
* @param string $sdkName The name of the SDK to initialize.
* @param array $options Additional options for the SDK (if necessary).
* @return mixed The return value of the SDK initialization, which may vary depending on the SDK.
* @throws Exception If the SDK is not supported or cannot be initialized.
* @throws SDKException If the SDK is not supported or cannot be initialized.
*/
public function init(string $sdkName, array $options = []) : mixed {
$namespace = $this->objectRetriever->getAuthenticatingNamespaceCloudObject();
@@ -52,22 +52,22 @@ class SDKLoader {
], $options));
default:
throw new Exception("No rules defined to initialize SDK with name <".$sdkName.">.");
throw new SDKException("No rules defined to initialize SDK with name <".$sdkName.">.");
}
}
/**
* Initialize and return the SDK with the given classname.
* Throws Exception if the SDK is not supported.
* Throws SDKException if the SDK is not supported.
*
* @param string $classname Classname for the SDK's main class.
* @param array $options Additional options for the SDK (if necessary).
* @return mixed The initialized SDK instance.
* @throws Exception If the SDK is not supported or cannot be initialized.
* @throws SDKException If the SDK is not supported or cannot be initialized.
*/
public function get(string $classname, array $options) : mixed {
if (!class_exists($classname))
throw new Exception("<".$classname."> is not a valid classname.");
throw new SDKException("<".$classname."> is not a valid classname.");
$hashkey = md5($classname.serialize($options));
if (!isset($this->classes[$hashkey])) {
@@ -110,7 +110,7 @@ class SDKLoader {
}
if (!isset($class))
throw new Exception("No rules defined to initialize <".$classname.">.");
throw new SDKException("No rules defined to initialize <".$classname.">.");
$this->classes[$hashkey] = $class;
return $this->classes[$hashkey];
+8 -7
View File
@@ -23,7 +23,8 @@ use Kevinrob\GuzzleCache\Storage\CacheStorageInterface,
use Psr\Cache\CacheItemPoolInterface;
use Psr\SimpleCache\CacheInterface;
use CloudObjects\SDK\Exceptions\CoreAPIException,
CloudObjects\SDK\Exceptions\InvalidSDKConfigurationException;
CloudObjects\SDK\Exceptions\InvalidSDKConfigurationException,
CloudObjects\SDK\Exceptions\SDKException;
use CloudObjects\SDK\AccountGateway\AccountContext;
/**
@@ -241,7 +242,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
*/
public function getObjectNode(IRI $coid) : ?Node {
if (!COIDParser::isValidCOID($coid))
throw new Exception("Not a valid COID.");
throw new SDKException("Not a valid COID.");
$uriString = (string)$coid;
@@ -308,7 +309,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
*/
public function fetchObjectsInNamespaceWithType(IRI $namespaceCoid, $type) {
if (COIDParser::getType($namespaceCoid) != COIDParser::COID_ROOT)
throw new Exception("Not a valid namespace COID.");
throw new SDKException("Not a valid namespace COID.");
$ts = microtime(true);
$type = (string)$type;
@@ -353,7 +354,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
*/
public function fetchAllObjectsInNamespace(IRI $namespaceCoid) {
if (COIDParser::getType($namespaceCoid) != COIDParser::COID_ROOT)
throw new Exception("Not a valid namespace COID.");
throw new SDKException("Not a valid namespace COID.");
$ts = microtime(true);
@@ -394,7 +395,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
*/
public function getCOIDListForNamespace(IRI $namespaceCoid) {
if (COIDParser::getType($namespaceCoid) != COIDParser::COID_ROOT)
throw new Exception("Not a valid namespace COID.");
throw new SDKException("Not a valid namespace COID.");
$ts = microtime(true);
@@ -429,7 +430,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
*/
public function getCOIDListForNamespaceWithType(IRI $namespaceCoid, $type) {
if (COIDParser::getType($namespaceCoid) != COIDParser::COID_ROOT)
throw new Exception("Not a valid namespace COID.");
throw new SDKException("Not a valid namespace COID.");
$ts = microtime(true);
$type = (string)$type;
@@ -472,7 +473,7 @@ class ObjectRetriever implements CustomCacheAndLogInterface {
if (is_object($coid) && get_class($coid)=='ML\IRI\IRI')
return $this->getObject($coid);
throw new Exception('COID must be passed as a string or an IRI object.');
throw new SDKException('COID must be passed as a string or an IRI object.');
}
/**
+2 -2
View File
@@ -6,7 +6,7 @@
namespace CloudObjects\SDK;
use Exception;
use CloudObjects\SDK\Exceptions\SDKException;
use ML\IRI\IRI;
use ML\JsonLD\Node;
@@ -24,7 +24,7 @@ class ObjectRetrieverFacade {
private static function getInstance() : ObjectRetriever {
if (self::$instance === null)
throw new Exception('ObjectRetrieverFacade has not been initialized. Call setObjectRetriever() first.');
throw new SDKException('ObjectRetrieverFacade has not been initialized. Call setObjectRetriever() first.');
return self::$instance;
}
+3 -2
View File
@@ -14,7 +14,8 @@ use GuzzleHttp\Client, GuzzleHttp\HandlerStack, GuzzleHttp\Middleware;
use Psr\Http\Message\RequestInterface;
use CloudObjects\SDK\COIDParser, CloudObjects\SDK\ObjectRetriever;
use CloudObjects\SDK\Exceptions\InvalidObjectConfigurationException,
CloudObjects\SDK\Exceptions\CoreAPIException;
CloudObjects\SDK\Exceptions\CoreAPIException,
CloudObjects\SDK\Exceptions\SDKException;
/**
* The APIClientFactory can be used to create a preconfigured Guzzle HTTP API client
@@ -205,7 +206,7 @@ class APIClientFactory {
if ($this->reader->hasType($api, 'wa:GraphQLEndpoint')) {
if (!class_exists('GraphQL\Client'))
throw new Exception("Install the gmostafa/php-graphql-client package to retrieve a specific client for wa:GraphQLEndpoint objects.");
throw new SDKException("Install the gmostafa/php-graphql-client package to retrieve a specific client for wa:GraphQLEndpoint objects.");
return new \GraphQL\Client($clientConfig['base_uri'],
isset($clientConfig['headers']) ? $clientConfig['headers'] : []);
@@ -6,9 +6,11 @@
namespace CloudObjects\SDK\WebAPI\Exceptions;
use CloudObjects\SDK\Exceptions\SDKException;
/**
* An Exception that is thrown when an an OAuth flow failed.
*/
class OAuthFlowException extends \Exception {
class OAuthFlowException extends SDKException {
}
+2 -2
View File
@@ -6,7 +6,7 @@
namespace CloudObjects\SDK\WebAPI;
use Exception;
use CloudObjects\SDK\Exceptions\SDKException;
use ML\JsonLD\Node;
use GuzzleHttp\Client;
use Webmozart\Assert\Assert,
@@ -114,7 +114,7 @@ class OAuth2AuthServer {
// no additional params needed
break;
default:
throw new Exception("No flow/grant_type found.");
throw new SDKException("No flow/grant_type found.");
}
$grantCacheKey = sha1(json_encode($params));