1
- from typing import Union , Dict , List , Any , Optional , TypedDict , Required
2
- from dataclasses import dataclass , field
1
+ from typing import Union , Dict , List , Any , TypedDict , Required
2
+ from dataclasses import dataclass
3
3
from cbor2 import CBORTag
4
- import cbor2
4
+
5
5
from pycardano .cip .cip67 import CIP67TokenName
6
- from pycardano .plutus import PlutusData , Unit , get_tag , Primitive , ArrayCBORSerializable
6
+ from pycardano .plutus import PlutusData , Unit , Primitive
7
7
from pycardano .transaction import AssetName
8
- from pycardano .serialization import IndefiniteList , CBORSerializable
9
- from pycardano .exception import DeserializeException
8
+ from pycardano .serialization import IndefiniteList
10
9
11
10
12
11
class InvalidCIP68ReferenceNFT (Exception ):
@@ -28,38 +27,6 @@ def __init__(self, data: Union[bytes, str, AssetName]):
28
27
if self .label != 100 :
29
28
raise InvalidCIP68ReferenceNFT ("Reference NFT must have label 100." )
30
29
31
-
32
- # class CIP68BaseMetadata(DictCBORSerializable):
33
- # """Base class for CIP-68 metadata"""
34
- # KEY_TYPE = bytes
35
- # VALUE_TYPE = Any # Validation handled in each child class using FIELD_TYPES
36
- # MAX_ITEM_SIZE = 64
37
- # FIELD_TYPES = {}
38
-
39
- # def __init__(self, *args, **kwargs):
40
- # super().__init__(args[0] if args else kwargs)
41
- # self._validate()
42
-
43
- # def _validate(self):
44
- # """Validate field types and sizes"""
45
- # for k, v in self.items():
46
- # if not isinstance(k, bytes):
47
- # raise ValueError(f"Keys must be bytes, got {type(k)} instead")
48
-
49
- # if k in self.FIELD_TYPES:
50
- # expected_type = self.FIELD_TYPES[k]
51
- # if not isinstance(v, expected_type):
52
- # raise ValueError(f"Field {k} must be {expected_type}, got {type(v)} instead")
53
-
54
- # if isinstance(v, bytes) and len(v) > self.MAX_ITEM_SIZE:
55
- # raise ValueError(f"The size of {v} exceeds {self.MAX_ITEM_SIZE} bytes.")
56
-
57
- # # def to_primitive(self) -> dict:
58
- # # """Convert to primitive form with string keys for JSON compatibility"""
59
- # # primitive = super().to_primitive()
60
- # # # Convert bytes keys to strings for JSON serialization
61
- # # return {k.decode() if isinstance(k, bytes) else k: v for k, v in primitive.items()}
62
-
63
30
64
31
class CIP68UserNFTName (CIP68TokenName ):
65
32
def __init__ (self , data : Union [bytes , str , AssetName ]):
@@ -75,42 +42,12 @@ class CIP68UserNFTFiles(TypedDict, total=False):
75
42
src : Required [bytes ]
76
43
77
44
78
- # class CIP68UserNFTFiles(CIP68BaseMetadata):
79
- # """Files metadata for User NFTs"""
80
- # FIELD_TYPES = {
81
- # b"name": bytes,
82
- # b"mediaType": bytes,
83
- # b"src": bytes
84
- # }
85
-
86
- # def _validate(self):
87
- # super()._validate()
88
- # if self and not all(k in self.keys() for k in [b"mediaType", b"src"]):
89
- # print("self.keys():", self.keys())
90
- # print("self.items():", self.items())
91
- # print("self:", self)
92
- # raise ValueError("mediaType and src are required fields")
93
-
94
45
class CIP68UserNFTMetadata (TypedDict , total = False ):
95
46
name : Required [bytes ]
96
47
image : Required [bytes ]
97
48
description : bytes
98
49
files : Union [List [Dict [bytes , bytes ]], None ]
99
50
100
- # class CIP68UserNFTMetadata(CIP68BaseMetadata):
101
- # """Metadata for User NFTs"""
102
- # FIELD_TYPES = {
103
- # b"name": bytes,
104
- # b"image": bytes,
105
- # b"description": bytes,
106
- # b"files": (CIP68UserNFTFiles, list, dict, None)
107
- # }
108
-
109
- # def _validate(self):
110
- # super()._validate()
111
- # if not all(k in self.keys() for k in [b"name", b"image"]):
112
- # raise ValueError("name and image are required fields")
113
-
114
51
115
52
class CIP68UserFTName (CIP68TokenName ):
116
53
def __init__ (self , data : Union [bytes , str , AssetName ]):
@@ -128,22 +65,6 @@ class CIP68UserFTMetadata(TypedDict, total=False):
128
65
logo : bytes
129
66
decimals : int
130
67
131
- # class CIP68UserFTMetadata(CIP68BaseMetadata):
132
- # """Metadata for User FTs"""
133
- # FIELD_TYPES = {
134
- # "name": bytes,
135
- # "description": bytes,
136
- # "ticker": bytes,
137
- # "url": bytes,
138
- # "logo": bytes,
139
- # "decimals": int
140
- # }
141
-
142
- # def _validate(self):
143
- # super()._validate()
144
- # if not all(k in self for k in ["name", "description"]):
145
- # raise ValueError("name and description are required fields")
146
-
147
68
148
69
class CIP68UserRFTName (CIP68TokenName ):
149
70
def __init__ (self , data : Union [bytes , str , AssetName ]):
@@ -159,20 +80,6 @@ class CIP68UserRFTMetadata(TypedDict, total=False):
159
80
description : bytes
160
81
161
82
162
- # class CIP68UserRFTMetadata(CIP68BaseMetadata):
163
- # """Metadata for User RFTs"""
164
- # FIELD_TYPES = {
165
- # "name": bytes,
166
- # "image": bytes,
167
- # "description": bytes
168
- # }
169
-
170
- # def _validate(self):
171
- # super()._validate()
172
- # if not all(k in self for k in ["name", "image"]):
173
- # raise ValueError("name and image are required fields")
174
-
175
-
176
83
@dataclass
177
84
class CIP68Datum (PlutusData ):
178
85
"""Wrapper class for CIP-68 metadata to be used as inline datum"""
0 commit comments