Skip to content

Commit d6c166e

Browse files
committed
improve equality and setting/getting attribute
1 parent d534a0f commit d6c166e

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

pystac/extensions/storage.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
Any,
1111
Generic,
1212
Literal,
13+
SupportsIndex,
1314
TypeVar,
1415
cast,
1516
)
@@ -50,23 +51,31 @@ class StorageSchemeType(StringEnum):
5051

5152

5253
class StorageScheme:
53-
properties: dict[str, Any]
54+
_properties: dict[str, Any]
5455

5556
def __init__(self, properties: dict[str, Any]):
56-
super().__setattr__("properties", properties)
57+
super().__setattr__("_properties", properties)
5758

5859
def __eq__(self, other: object) -> bool:
5960
if not isinstance(other, StorageScheme):
60-
raise NotImplementedError
61-
return self.properties == other.properties
61+
return NotImplemented
62+
63+
return bool(self.__dict__["_properties"] == other.__dict__["_properties"])
6264

6365
def __getattr__(self, name: str) -> Any:
64-
if name in self.properties:
65-
return self.properties[name]
66+
properties = self.__dict__["_properties"]
67+
if name in properties:
68+
return properties[name]
6669
raise AttributeError(f"StorageScheme does not have attribute '{name}'")
6770

6871
def __setattr__(self, name: str, value: Any) -> None:
69-
self.properties[name] = value
72+
if name.startswith("_") or hasattr(type(self), name):
73+
super().__setattr__(name, value)
74+
else:
75+
self._properties[name] = value
76+
77+
def __reduce_ex__(self, protocol: SupportsIndex) -> Any:
78+
return (self.__class__, (self.__dict__["_properties"],), None)
7079

7180
def apply(
7281
self,
@@ -80,7 +89,7 @@ def apply(
8089
self.platform = platform
8190
self.region = region
8291
self.requester_pays = requester_pays
83-
self.properties.update(kwargs)
92+
self._properties.update(kwargs)
8493

8594
@classmethod
8695
def create(
@@ -125,57 +134,57 @@ def type(self) -> str:
125134
Get or set the required type property
126135
"""
127136
return get_required(
128-
self.properties.get(TYPE_PROP),
137+
self._properties.get(TYPE_PROP),
129138
self,
130139
TYPE_PROP,
131140
)
132141

133142
@type.setter
134143
def type(self, v: str) -> None:
135-
self.properties[TYPE_PROP] = v
144+
self._properties[TYPE_PROP] = v
136145

137146
@property
138147
def platform(self) -> str:
139148
"""
140149
Get or set the required platform property
141150
"""
142151
return get_required(
143-
self.properties.get(PLATFORM_PROP),
152+
self._properties.get(PLATFORM_PROP),
144153
self,
145154
PLATFORM_PROP,
146155
)
147156

148157
@platform.setter
149158
def platform(self, v: str) -> None:
150-
self.properties[PLATFORM_PROP] = v
159+
self._properties[PLATFORM_PROP] = v
151160

152161
@property
153162
def region(self) -> str | None:
154163
"""
155164
Get or set the optional region property
156165
"""
157-
return self.properties.get(REGION_PROP)
166+
return self._properties.get(REGION_PROP)
158167

159168
@region.setter
160169
def region(self, v: str) -> None:
161170
if v is not None:
162-
self.properties[REGION_PROP] = v
171+
self._properties[REGION_PROP] = v
163172
else:
164-
self.properties.pop(REGION_PROP, None)
173+
self._properties.pop(REGION_PROP, None)
165174

166175
@property
167176
def requester_pays(self) -> bool | None:
168177
"""
169178
Get or set the optional requester_pays property
170179
"""
171-
return self.properties.get(REQUESTER_PAYS_PROP)
180+
return self._properties.get(REQUESTER_PAYS_PROP)
172181

173182
@requester_pays.setter
174183
def requester_pays(self, v: bool) -> None:
175184
if v is not None:
176-
self.properties[REQUESTER_PAYS_PROP] = v
185+
self._properties[REQUESTER_PAYS_PROP] = v
177186
else:
178-
self.properties.pop(REQUESTER_PAYS_PROP, None)
187+
self._properties.pop(REQUESTER_PAYS_PROP, None)
179188

180189
def to_dict(self) -> dict[str, Any]:
181190
"""
@@ -184,7 +193,7 @@ def to_dict(self) -> dict[str, Any]:
184193
Returns:
185194
dict[str, Any
186195
"""
187-
return self.properties
196+
return self._properties
188197

189198

190199
class _StorageExtension(ABC):
@@ -473,7 +482,6 @@ def schemes(self) -> list[dict[str, StorageScheme]] | None:
473482
self.summaries.get_list(SCHEMES_PROP),
474483
)
475484

476-
print(v)
477485
return v
478486

479487
@schemes.setter

0 commit comments

Comments
 (0)