Spaces:
Running
Running
Deploy Myco from CI
Browse files- models/mushroom.py +11 -10
models/mushroom.py
CHANGED
|
@@ -1,13 +1,8 @@
|
|
| 1 |
-
"""Domain models for Myco discoveries."""
|
| 2 |
-
|
| 3 |
from dataclasses import dataclass
|
| 4 |
-
from typing import Any
|
| 5 |
-
|
| 6 |
|
| 7 |
@dataclass(frozen=True)
|
| 8 |
class Mushroom:
|
| 9 |
-
"""A discoverable mushroom species for the MycoDex."""
|
| 10 |
-
|
| 11 |
name: str
|
| 12 |
rarity: str
|
| 13 |
habitat: str
|
|
@@ -17,8 +12,15 @@ class Mushroom:
|
|
| 17 |
danger: str = "Unknown"
|
| 18 |
|
| 19 |
@classmethod
|
| 20 |
-
def from_dict(cls, data:
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
return cls(
|
| 23 |
name=str(data["name"]),
|
| 24 |
rarity=str(data["rarity"]),
|
|
@@ -29,8 +31,7 @@ class Mushroom:
|
|
| 29 |
danger=str(data.get("danger", "Unknown")),
|
| 30 |
)
|
| 31 |
|
| 32 |
-
def to_dict(self) ->
|
| 33 |
-
"""Return a JSON/state-friendly representation."""
|
| 34 |
return {
|
| 35 |
"name": self.name,
|
| 36 |
"rarity": self.rarity,
|
|
|
|
|
|
|
|
|
|
| 1 |
from dataclasses import dataclass
|
| 2 |
+
from typing import Any, Dict
|
|
|
|
| 3 |
|
| 4 |
@dataclass(frozen=True)
|
| 5 |
class Mushroom:
|
|
|
|
|
|
|
| 6 |
name: str
|
| 7 |
rarity: str
|
| 8 |
habitat: str
|
|
|
|
| 12 |
danger: str = "Unknown"
|
| 13 |
|
| 14 |
@classmethod
|
| 15 |
+
def from_dict(cls, data: Dict[str, Any]) -> "Mushroom":
|
| 16 |
+
if not isinstance(data, dict):
|
| 17 |
+
raise TypeError("Mushroom.from_dict expects a dict")
|
| 18 |
+
|
| 19 |
+
required = ["name", "rarity", "habitat", "lore"]
|
| 20 |
+
missing = [k for k in required if k not in data or data[k] is None]
|
| 21 |
+
if missing:
|
| 22 |
+
raise ValueError(f"Mushroom.from_dict missing required fields: {', '.join(missing)}")
|
| 23 |
+
|
| 24 |
return cls(
|
| 25 |
name=str(data["name"]),
|
| 26 |
rarity=str(data["rarity"]),
|
|
|
|
| 31 |
danger=str(data.get("danger", "Unknown")),
|
| 32 |
)
|
| 33 |
|
| 34 |
+
def to_dict(self) -> Dict[str, str]:
|
|
|
|
| 35 |
return {
|
| 36 |
"name": self.name,
|
| 37 |
"rarity": self.rarity,
|