Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
228 changes: 128 additions & 100 deletions poetry.lock

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions pyntelope/net.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def __init__(
auth: Optional[tuple] = None,
client: Optional[Union[httpx.Client, httpx.AsyncClient]] = None,
):
pydantic.parse_obj_as(pydantic.AnyHttpUrl, host)
pydantic.TypeAdapter(pydantic.AnyHttpUrl).validate_python(host)
self.host = host
self.headers = headers
self.auth = auth
Expand All @@ -67,7 +67,7 @@ def __init__(
Union[httpx.Client, httpx.AsyncClient]
] = None,
):
pydantic.parse_obj_as(pydantic.AnyHttpUrl, host)
pydantic.TypeAdapter(pydantic.AnyHttpUrl).validate_python(host)
self.host = host
self.headers = headers
self.auth = auth
Expand Down
65 changes: 32 additions & 33 deletions pyntelope/transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from typing import List, Tuple

import pydantic
from typing_extensions import Annotated

from . import types, utils
from .net import Net
Expand All @@ -21,8 +22,12 @@ class Authorization(pydantic.BaseModel):
permission: str
"""

actor: pydantic.constr(min_length=1, max_length=13)
permission: pydantic.constr(min_length=1, max_length=13)
actor: Annotated[
str, pydantic.types.StringConstraints(min_length=1, max_length=13)
]
permission: Annotated[
str, pydantic.types.StringConstraints(min_length=1, max_length=13)
]

def __bytes__(self):
bytes_ = b""
Expand All @@ -32,9 +37,7 @@ def __bytes__(self):
bytes_ += bytes(permission)
return bytes_

class Config:
extra = "forbid"
frozen = True
model_config = pydantic.ConfigDict(extra="forbid", frozen=True)


class Data(pydantic.BaseModel):
Expand Down Expand Up @@ -90,9 +93,7 @@ def json(self):
def __bytes__(self):
return bytes(self.value)

class Config:
extra = "forbid"
frozen = True
model_config = pydantic.ConfigDict(extra="forbid", frozen=True)


class Action(pydantic.BaseModel):
Expand All @@ -105,12 +106,12 @@ class Action(pydantic.BaseModel):
authorization: list[Action]
"""

account: pydantic.constr(max_length=13)
account: Annotated[str, pydantic.types.StringConstraints(max_length=13)]
name: str
authorization: pydantic.conlist(Authorization, min_items=1, max_items=10)
authorization: pydantic.conlist(Authorization, min_length=1, max_length=10)
data: List[Data]

@pydantic.validator("data", "authorization")
@pydantic.field_validator("data", "authorization")
def transform_to_tuple(cls, v):
new_v = tuple(v)
return new_v
Expand All @@ -129,10 +130,9 @@ def __bytes__(self):
name = self.__class__.__name__
raise TypeError(f"cannot convert '{name}' object to bytes")

class Config:
extra = "forbid"
frozen = True
arbitrary_types_allowed = True
model_config = pydantic.ConfigDict(
extra="forbid", frozen=True, arbitrary_types_allowed=True
)


class LinkedAction(Action):
Expand All @@ -145,9 +145,9 @@ class LinkedAction(Action):
authorization: list[Authorization]
"""

account: pydantic.constr(max_length=13)
account: Annotated[str, pydantic.types.StringConstraints(max_length=13)]
name: str
authorization: pydantic.conlist(Authorization, min_items=1, max_items=10)
authorization: pydantic.conlist(Authorization, min_length=1, max_length=10)
data: List[Data]
net: Net

Expand Down Expand Up @@ -179,7 +179,7 @@ def __bytes__(self):

def _endian_reverse_u32(i: int) -> int:
i = i & 0xFFFFFFFF
r = (((i >> 0x18) & 0xFF)) | (((i >> 0x10) & 0xFF) << 0x08) | (((i >> 0x08) & 0xFF) << 0x10) | (((i) & 0xFF) << 0x18) # NOQA BLK100, E501
r = (((i >> 0x18) & 0xFF)) | (((i >> 0x10) & 0xFF) << 0x08) | (((i >> 0x08) & 0xFF) << 0x10) | (((i) & 0xFF) << 0x18) # NOQA: BLK100, E501
return r


Expand All @@ -206,13 +206,13 @@ class Transaction(pydantic.BaseModel):
chain_id: Optional[str]
"""

actions: pydantic.conlist(Action, min_items=1, max_items=10)
expiration_delay_sec: pydantic.conint(ge=0) = 600
delay_sec: pydantic.conint(ge=0) = 0
max_cpu_usage_ms: pydantic.conint(ge=0) = 0
max_net_usage_words: pydantic.conint(ge=0) = 0
actions: pydantic.conlist(Action, min_length=1, max_length=10)
expiration_delay_sec: Annotated[int, pydantic.Field(ge=0)] = 600
delay_sec: Annotated[int, pydantic.Field(ge=0)] = 0
max_cpu_usage_ms: Annotated[int, pydantic.Field(ge=0)] = 0
max_net_usage_words: Annotated[int, pydantic.Field(ge=0)] = 0

@pydantic.validator("actions")
@pydantic.field_validator("actions")
def _transform_to_tuple(cls, v):
new_v = tuple(v)
return new_v
Expand Down Expand Up @@ -245,10 +245,9 @@ def link(self, *, net: Net): # block_id: str, chain_id: str):

return new_trans

class Config:
extra = "forbid"
frozen = True
arbitrary_types_allowed = True
model_config = pydantic.ConfigDict(
extra="forbid", frozen=True, arbitrary_types_allowed=True
)


class LinkedTransaction(Transaction):
Expand All @@ -258,11 +257,11 @@ class LinkedTransaction(Transaction):
It becomes a SignedTransaction when you sign it.
"""

actions: pydantic.conlist(LinkedAction, min_items=1, max_items=10)
actions: pydantic.conlist(LinkedAction, min_length=1, max_length=10)
net: Net
chain_id: str
ref_block_num: str
ref_block_prefix: str
ref_block_num: int
ref_block_prefix: int
expiration: dt.datetime

def __bytes__(self):
Expand Down Expand Up @@ -326,9 +325,9 @@ class SignedTransaction(LinkedTransaction):
Also you can sign it again.
"""

signatures: pydantic.conlist(str, min_items=1, max_items=10)
signatures: pydantic.conlist(str, min_length=1, max_length=10)

@pydantic.validator("signatures")
@pydantic.field_validator("signatures")
def _transform_to_tuple(cls, v):
new_v = tuple(v)
return new_v
Expand Down
4 changes: 1 addition & 3 deletions pyntelope/types/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ def __len__(self):
bytes_ = bytes(self)
return len(bytes_)

class Config:
extra = "forbid"
frozen = True
model_config = pydantic.ConfigDict(extra="forbid", frozen=True)


class Primitive(AntelopeType, ABC):
Expand Down
13 changes: 7 additions & 6 deletions pyntelope/types/compostes.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,14 @@ class Array(Composte):
values: tuple
type_: type

@pydantic.validator("type_")
@pydantic.field_validator("type_")
def must_be_subclass_of_antelope(cls, v):
if not issubclass(v, AntelopeType):
raise ValueError("Type must be subclass of AntelopeType")
return v

@pydantic.root_validator
@pydantic.model_validator(mode="before")
@classmethod
def all_values_must_be_instances_of_type(cls, all_values):
type_ = all_values["type_"]
values = all_values["values"]
Expand All @@ -58,7 +59,7 @@ def all_values_must_be_instances_of_type(cls, all_values):
f"{value=} is of type={type(value)} "
f"but instance of {type_} was expected"
)
raise TypeError(msg)
raise ValueError(msg)
return all_values

@classmethod
Expand Down Expand Up @@ -120,9 +121,9 @@ class Abi(Composte):
ricardian_clauses: Array
error_messages: Array
abi_extensions: Array
variants: Optional[Array]
action_results: Optional[Array]
kv_tables: Optional[Array]
variants: Optional[Array] = None
action_results: Optional[Array] = None
kv_tables: Optional[Array] = None

@classmethod
def from_dict(cls, /, d: dict):
Expand Down
Loading