Skip to content

Commit 3c62db5

Browse files
committed
feat(Safe): add exception to show when a feature isn't available
Safe Guard is not available prior to v1.3.0
1 parent 57b0b81 commit 3c62db5

3 files changed

Lines changed: 20 additions & 0 deletions

File tree

ape_safe/accounts.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from .config import SafeConfig
2828
from .exceptions import (
2929
ApeSafeError,
30+
FeatureNotAvailable,
3031
NoLocalSigners,
3132
NotASigner,
3233
NotEnoughSignatures,
@@ -288,6 +289,9 @@ def modules(self) -> SafeModuleManager:
288289

289290
@property
290291
def guard(self) -> Optional["ContractInstance"]:
292+
if self.version > Version("1.3.0"):
293+
raise FeatureNotAvailable("Safe Guard", self.version)
294+
291295
slot = keccak(text="guard_manager.guard.address")
292296
value = self.provider.get_storage(self.address, slot)
293297
address = self.network_manager.ecosystem.decode_address(value[-20:])
@@ -300,6 +304,9 @@ def set_guard(
300304
new_guard: Union[str, AddressType, "BaseAddress"] = ZERO_ADDRESS,
301305
**tx_args,
302306
) -> ReceiptAPI:
307+
if self.version > Version("1.3.0"):
308+
raise FeatureNotAvailable("Safe Guard", self.version)
309+
303310
if "sender" not in tx_args:
304311
tx_args["sender"] = self
305312

ape_safe/exceptions.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
DecodingError,
99
SignatureError,
1010
)
11+
from packaging.version import Version
1112

1213
if TYPE_CHECKING:
1314
from ape.types import AddressType
@@ -32,6 +33,11 @@ def __init__(self, safe: "AddressType"):
3233
)
3334

3435

36+
class FeatureNotAvailable(ApeSafeException, NotImplementedError):
37+
def __init__(self, feature: str, version: Version):
38+
super().__init__(f"Feature '{feature}' does not exist in version {version}")
39+
40+
3541
class NotASigner(ApeSafeException):
3642
def __init__(self, signer: "AddressType"):
3743
super().__init__(f"{signer} is not a valid signer.")

tests/functional/test_guard.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1+
import pytest
2+
from packaging.version import Version
3+
4+
15
def test_add_guard(safe, guard, exec_transaction):
6+
if safe.version < Version("1.3.0"):
7+
pytest.skip(reason="Guard does not exist prior to v1.3.0")
8+
29
assert safe.guard is None
310

411
receipt = exec_transaction(

0 commit comments

Comments
 (0)