Skip to content

Commit 76c18c4

Browse files
committed
Fix static typing
Fixed the following files: pycardano/plutus.py pycardano/serialization.py pycardano/transaction.py pycardano/txbuilder.py pycardano/witness.py
1 parent 5e37db1 commit 76c18c4

File tree

6 files changed

+133
-90
lines changed

6 files changed

+133
-90
lines changed

pycardano/plutus.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
CBORSerializable,
2222
DictCBORSerializable,
2323
IndefiniteList,
24+
Primitive,
2425
RawCBOR,
2526
default_encoder,
2627
limit_primitive_type,
@@ -39,6 +40,7 @@
3940
"PlutusV2Script",
4041
"RawPlutusData",
4142
"Redeemer",
43+
"ScriptType",
4244
"datum_hash",
4345
"plutus_script_hash",
4446
"script_hash",
@@ -471,7 +473,7 @@ def __post_init__(self):
471473
)
472474

473475
def to_shallow_primitive(self) -> CBORTag:
474-
primitives = super().to_shallow_primitive()
476+
primitives: Primitive = super().to_shallow_primitive()
475477
if primitives:
476478
primitives = IndefiniteList(primitives)
477479
tag = get_tag(self.CONSTR_ID)
@@ -544,7 +546,7 @@ def _dfs(obj):
544546
return json.dumps(_dfs(self), **kwargs)
545547

546548
@classmethod
547-
def from_dict(cls: PlutusData, data: dict) -> PlutusData:
549+
def from_dict(cls: Type[PlutusData], data: dict) -> PlutusData:
548550
"""Convert a dictionary to PlutusData
549551
550552
Args:
@@ -606,7 +608,7 @@ def _dfs(obj):
606608
return _dfs(data)
607609

608610
@classmethod
609-
def from_json(cls: PlutusData, data: str) -> PlutusData:
611+
def from_json(cls: Type[PlutusData], data: str) -> PlutusData:
610612
"""Restore a json encoded string to a PlutusData.
611613
612614
Args:
@@ -701,7 +703,7 @@ class Redeemer(ArrayCBORSerializable):
701703

702704
data: Any
703705

704-
ex_units: ExecutionUnits = None
706+
ex_units: Optional[ExecutionUnits] = None
705707

706708
@classmethod
707709
@limit_primitive_type(list)
@@ -729,13 +731,23 @@ def plutus_script_hash(
729731
return script_hash(script)
730732

731733

732-
def script_hash(
733-
script: Union[bytes, NativeScript, PlutusV1Script, PlutusV2Script]
734-
) -> ScriptHash:
734+
class PlutusV1Script(bytes):
735+
pass
736+
737+
738+
class PlutusV2Script(bytes):
739+
pass
740+
741+
742+
ScriptType = Union[bytes, NativeScript, PlutusV1Script, PlutusV2Script]
743+
"""Script type. A Union type that contains all valid script types."""
744+
745+
746+
def script_hash(script: ScriptType) -> ScriptHash:
735747
"""Calculates the hash of a script, which could be either native script or plutus script.
736748
737749
Args:
738-
script (Union[bytes, NativeScript, PlutusV1Script, PlutusV2Script]): A script.
750+
script (ScriptType): A script.
739751
740752
Returns:
741753
ScriptHash: blake2b hash of the script.
@@ -752,11 +764,3 @@ def script_hash(
752764
)
753765
else:
754766
raise TypeError(f"Unexpected script type: {type(script)}")
755-
756-
757-
class PlutusV1Script(bytes):
758-
pass
759-
760-
761-
class PlutusV2Script(bytes):
762-
pass

pycardano/serialization.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,13 @@
3333
"DictCBORSerializable",
3434
"RawCBOR",
3535
"list_hook",
36+
"limit_primitive_type",
3637
]
3738

3839

3940
class IndefiniteList(UserList):
40-
def __init__(self, list: [Primitive]): # type: ignore
41-
super().__init__(list)
41+
def __init__(self, li: Primitive): # type: ignore
42+
super().__init__(li) # type: ignore
4243

4344

4445
@dataclass

pycardano/transaction.py

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,8 @@ def __post_init__(self):
284284
def from_primitive(cls: Type[_Script], values: List[Primitive]) -> _Script:
285285
if values[0] == 0:
286286
return cls(NativeScript.from_primitive(values[1]))
287-
elif values[0] == 1:
287+
assert isinstance(values[1], bytes)
288+
if values[0] == 1:
288289
return cls(PlutusV1Script(values[1]))
289290
else:
290291
return cls(PlutusV2Script(values[1]))
@@ -315,8 +316,10 @@ def from_primitive(
315316
cls: Type[_DatumOption], values: List[Primitive]
316317
) -> _DatumOption:
317318
if values[0] == 0:
319+
assert isinstance(values[1], bytes)
318320
return _DatumOption(DatumHash(values[1]))
319321
else:
322+
assert isinstance(values[1], CBORTag)
320323
v = cbor2.loads(values[1].value)
321324
if isinstance(v, CBORTag):
322325
return _DatumOption(RawPlutusData.from_primitive(v))
@@ -334,6 +337,7 @@ def to_primitive(self) -> Primitive:
334337

335338
@classmethod
336339
def from_primitive(cls: Type[_ScriptRef], value: Primitive) -> _ScriptRef:
340+
assert isinstance(value, CBORTag)
337341
return cls(_Script.from_primitive(cbor2.loads(value.value)))
338342

339343

@@ -343,9 +347,13 @@ class _TransactionOutputPostAlonzo(MapCBORSerializable):
343347

344348
amount: Union[int, Value] = field(metadata={"key": 1})
345349

346-
datum: _DatumOption = field(default=None, metadata={"key": 2, "optional": True})
350+
datum: Optional[_DatumOption] = field(
351+
default=None, metadata={"key": 2, "optional": True}
352+
)
347353

348-
script_ref: _ScriptRef = field(default=None, metadata={"key": 3, "optional": True})
354+
script_ref: Optional[_ScriptRef] = field(
355+
default=None, metadata={"key": 3, "optional": True}
356+
)
349357

350358
@property
351359
def script(self) -> Optional[Union[NativeScript, PlutusV1Script, PlutusV2Script]]:
@@ -361,15 +369,15 @@ class _TransactionOutputLegacy(ArrayCBORSerializable):
361369

362370
amount: Union[int, Value]
363371

364-
datum_hash: DatumHash = field(default=None, metadata={"optional": True})
372+
datum_hash: Optional[DatumHash] = field(default=None, metadata={"optional": True})
365373

366374

367375
@dataclass(repr=False)
368376
class TransactionOutput(CBORSerializable):
369377

370378
address: Address
371379

372-
amount: Union[int, Value]
380+
amount: Union[Value]
373381

374382
datum_hash: Optional[DatumHash] = None
375383

@@ -496,30 +504,36 @@ class TransactionBody(MapCBORSerializable):
496504

497505
fee: int = field(default=0, metadata={"key": 2})
498506

499-
ttl: int = field(default=None, metadata={"key": 3, "optional": True})
507+
ttl: Optional[int] = field(default=None, metadata={"key": 3, "optional": True})
500508

501-
certificates: List[Certificate] = field(
509+
certificates: Optional[List[Certificate]] = field(
502510
default=None, metadata={"key": 4, "optional": True}
503511
)
504512

505-
withdraws: Withdrawals = field(default=None, metadata={"key": 5, "optional": True})
513+
withdraws: Optional[Withdrawals] = field(
514+
default=None, metadata={"key": 5, "optional": True}
515+
)
506516

507517
# TODO: Add proposal update support
508518
update: Any = field(default=None, metadata={"key": 6, "optional": True})
509519

510-
auxiliary_data_hash: AuxiliaryDataHash = field(
520+
auxiliary_data_hash: Optional[AuxiliaryDataHash] = field(
511521
default=None, metadata={"key": 7, "optional": True}
512522
)
513523

514-
validity_start: int = field(default=None, metadata={"key": 8, "optional": True})
524+
validity_start: Optional[int] = field(
525+
default=None, metadata={"key": 8, "optional": True}
526+
)
515527

516-
mint: MultiAsset = field(default=None, metadata={"key": 9, "optional": True})
528+
mint: Optional[MultiAsset] = field(
529+
default=None, metadata={"key": 9, "optional": True}
530+
)
517531

518-
script_data_hash: ScriptDataHash = field(
532+
script_data_hash: Optional[ScriptDataHash] = field(
519533
default=None, metadata={"key": 11, "optional": True}
520534
)
521535

522-
collateral: List[TransactionInput] = field(
536+
collateral: Optional[List[TransactionInput]] = field(
523537
default=None,
524538
metadata={
525539
"key": 13,
@@ -528,7 +542,7 @@ class TransactionBody(MapCBORSerializable):
528542
},
529543
)
530544

531-
required_signers: List[VerificationKeyHash] = field(
545+
required_signers: Optional[List[VerificationKeyHash]] = field(
532546
default=None,
533547
metadata={
534548
"key": 14,
@@ -537,15 +551,19 @@ class TransactionBody(MapCBORSerializable):
537551
},
538552
)
539553

540-
network_id: Network = field(default=None, metadata={"key": 15, "optional": True})
554+
network_id: Optional[Network] = field(
555+
default=None, metadata={"key": 15, "optional": True}
556+
)
541557

542-
collateral_return: TransactionOutput = field(
558+
collateral_return: Optional[TransactionOutput] = field(
543559
default=None, metadata={"key": 16, "optional": True}
544560
)
545561

546-
total_collateral: int = field(default=None, metadata={"key": 17, "optional": True})
562+
total_collateral: Optional[int] = field(
563+
default=None, metadata={"key": 17, "optional": True}
564+
)
547565

548-
reference_inputs: List[TransactionInput] = field(
566+
reference_inputs: Optional[List[TransactionInput]] = field(
549567
default=None,
550568
metadata={
551569
"key": 18,
@@ -555,9 +573,9 @@ class TransactionBody(MapCBORSerializable):
555573
)
556574

557575
def hash(self) -> bytes:
558-
return blake2b(
559-
self.to_cbor(encoding="bytes"), TRANSACTION_HASH_SIZE, encoder=RawEncoder
560-
)
576+
h = self.to_cbor(encoding="bytes")
577+
assert isinstance(h, bytes)
578+
return blake2b(h, TRANSACTION_HASH_SIZE, encoder=RawEncoder)
561579

562580
@property
563581
def id(self) -> TransactionId:
@@ -572,7 +590,7 @@ class Transaction(ArrayCBORSerializable):
572590

573591
valid: bool = True
574592

575-
auxiliary_data: Union[AuxiliaryData, type(None)] = None
593+
auxiliary_data: Optional[AuxiliaryData] = None
576594

577595
@property
578596
def id(self) -> TransactionId:

0 commit comments

Comments
 (0)