From a43e268313a3b2e01942c809504ba5809070fff6 Mon Sep 17 00:00:00 2001 From: Julius Frost <33183774+juliusfrost@users.noreply.github.com> Date: Wed, 26 Apr 2023 23:52:32 -0400 Subject: [PATCH] implement no type checking flag --- pycardano/backend/base.py | 3 +-- pycardano/serialization.py | 2 +- pycardano/transaction.py | 2 +- pycardano/types.py | 18 ++++++++++++++++++ test/pycardano/test_types.py | 20 ++++++++++++++++++++ 5 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 test/pycardano/test_types.py diff --git a/pycardano/backend/base.py b/pycardano/backend/base.py index 776126d6..e123babc 100644 --- a/pycardano/backend/base.py +++ b/pycardano/backend/base.py @@ -3,12 +3,11 @@ from dataclasses import dataclass from typing import Dict, List, Union -from typeguard import typechecked - from pycardano.address import Address from pycardano.network import Network from pycardano.plutus import ExecutionUnits from pycardano.transaction import Transaction, UTxO +from pycardano.types import typechecked __all__ = [ "GenesisParameters", diff --git a/pycardano/serialization.py b/pycardano/serialization.py index 9aa9bff0..e39c4581 100644 --- a/pycardano/serialization.py +++ b/pycardano/serialization.py @@ -26,13 +26,13 @@ from cbor2 import CBOREncoder, CBORSimpleValue, CBORTag, dumps, loads, undefined from pprintpp import pformat -from typeguard import check_type, typechecked from pycardano.exception import ( DeserializeException, InvalidArgumentException, SerializeException, ) +from pycardano.types import typechecked, check_type __all__ = [ "default_encoder", diff --git a/pycardano/transaction.py b/pycardano/transaction.py index 56eacbe1..eed7e1c2 100644 --- a/pycardano/transaction.py +++ b/pycardano/transaction.py @@ -11,7 +11,6 @@ from cbor2 import CBORTag from nacl.encoding import RawEncoder from nacl.hash import blake2b -from typeguard import typechecked from pycardano.address import Address from pycardano.certificate import Certificate @@ -39,6 +38,7 @@ default_encoder, list_hook, ) +from pycardano.types import typechecked from pycardano.witness import TransactionWitnessSet __all__ = [ diff --git a/pycardano/types.py b/pycardano/types.py index 55b7ef12..cbf97cdc 100644 --- a/pycardano/types.py +++ b/pycardano/types.py @@ -1,4 +1,22 @@ +import os +from functools import partial from typing import Any, Dict +import typeguard + # https://github.com/python/typing/issues/182#issuecomment-199532520 JsonDict = Dict[str, Any] + + +def typechecked(func=None, *args, **kwargs): + if os.getenv("PYCARDANO_NO_TYPE_CHECK", "False").lower() in ("true", "1"): + if func is None: + return partial(typechecked, *args, **kwargs) + return func + return typeguard.typechecked(func, *args, **kwargs) + + +def check_type(*args, **kwargs): + if os.getenv("PYCARDANO_NO_TYPE_CHECK", "False").lower() in ("true", "1"): + return None + return typeguard.check_type(*args, **kwargs) diff --git a/test/pycardano/test_types.py b/test/pycardano/test_types.py new file mode 100644 index 00000000..c936a89e --- /dev/null +++ b/test/pycardano/test_types.py @@ -0,0 +1,20 @@ +import typeguard + +from pycardano.types import typechecked, check_type + + +def test_types(monkeypatch): + monkeypatch.setenv("PYCARDANO_NO_TYPE_CHECK", "true") + + assert typeguard.typechecked != typechecked + assert typeguard.check_type != check_type + + @typechecked + def func1(): + pass + + @typechecked() + def func2(): + pass + + check_type()