Changeset aaaa4b8 in flexograder for builder/exam_elements.py
- Timestamp:
- 11/19/25 11:56:24 (5 months ago)
- Branches:
- fake-data, main, master
- Children:
- 0792ddd
- Parents:
- 7cc3672
- File:
-
- 1 edited
-
builder/exam_elements.py (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
builder/exam_elements.py
r7cc3672 raaaa4b8 5 5 from dataclasses import dataclass, field 6 6 from flexoentity import FlexoEntity, EntityType, EntityState, FlexOID, logger 7 from .media_items import MediaItem, NullMediaItem, DownloadItem7 from builder.media_items import MediaItem, NullMediaItem, DownloadItem, media_factory 8 8 9 9 … … 47 47 text: str = "" 48 48 topic: str = "" 49 media: List[MediaItem] = field(default_factory=lambda: [ NullMediaItem()])49 media: List[MediaItem] = field(default_factory=lambda: []) 50 50 51 51 @classmethod 52 52 def default(cls): 53 return cls ()53 return cls.with_domain_id(domain_id="DEF_DEFAULT") 54 54 55 55 @property … … 98 98 def media_to_html(self, prefix="media/") -> str: 99 99 return "".join([m.to_html(prefix=prefix) for m in self.media if m]) 100 101 @classmethod 102 def from_dict(cls, data): 103 if "flexo_id" not in data: 104 raise ValueError("Question is missing flexo_id") 105 106 flexo_id = FlexOID(data["flexo_id"]) 107 108 # NOTE: cls(...) will call the correct subclass constructor 109 obj = cls( 110 text=data.get("text", ""), 111 topic=data.get("topic", ""), 112 flexo_id=flexo_id, 113 ) 114 115 # restore provenance 116 obj.fingerprint = data.get("fingerprint", "") 117 obj.origin = data.get("origin") 118 if data.get("originator_id"): 119 obj.originator_id = UUID(data["originator_id"]) 120 if data.get("owner_id"): 121 obj.owner_id = UUID(data["owner_id"]) 122 123 return obj 100 124 101 125 def to_dict(self): … … 105 129 "qtype": self.qtype, # avoid name clash with built-in type 106 130 "text": self.text, 107 "media": [m.to_dict() for m in self.media if not isinstance(m, NullMediaItem)],131 "media": [m.to_dict() for m in self.media], 108 132 "state": self.state.name, # explicit readable form 109 133 }) … … 111 135 112 136 def has_media(self): 113 return any( not isinstance(item, NullMediaItem)for item in self.media)137 return any(item for item in self.media) 114 138 115 139 def get_media(self): 116 return [item for item in self.media if not isinstance(item, NullMediaItem)]140 return [item for item in self.media] 117 141 118 142 … … 154 178 return d 155 179 180 @classmethod 181 def from_dict(cls, data): 182 obj = super().from_dict(data) 183 obj.media = [media_factory(m) for m in data.get("media", [])] 184 return obj 185 156 186 157 187 @dataclass … … 187 217 }) 188 218 return base 219 220 @classmethod 221 def from_dict(cls, data): 222 obj = super().from_dict(data) 223 obj.options = [ 224 AnswerOption(o["id"], o["text"], o.get("points", 0.0)) 225 for o in data.get("options", []) 226 ] 227 228 obj.media = [media_factory(m) for m in data.get("media", [])] 229 return obj 189 230 190 231 def points_for(self, option_id): … … 280 321 281 322 @classmethod 282 def from_dict(cls, data: dict) -> "TextQuestion": 283 validation = None 284 if "validation" in data and isinstance(data["validation"], dict): 285 validation = Validation(**data["validation"]) 323 def from_dict(cls, data): 286 324 obj = super().from_dict(data) 287 obj.validation = validation 325 v = data.get("validation") 326 obj.validation = Validation(**v) if v else None 327 obj.media = [media_factory(m) for m in data.get("media", [])] 288 328 return obj 289 329 … … 363 403 return d 364 404 365 @staticmethod 366 def from_dict(data: dict) -> "CandidateIDQuestion": 367 q = CandidateIDQuestion(text=data["text"], 368 topic=data.get("topic", ""), 369 fields=data.get("fields", []), 370 ) 371 flexo_id = data.get("id", 372 FlexOID.safe_generate(domain="SYS", 373 entity_type=EntityType.ITEM, 374 entity_state=EntityState.DRAFT, 375 )) 376 q.flexo_id = flexo_id 377 return q 405 @classmethod 406 def from_dict(cls, data): 407 obj = super().from_dict(data) 408 obj.fields = data.get("fields", []) 409 obj.media = [media_factory(m) for m in data.get("media", [])] 410 return obj 378 411 379 412 @dataclass
Note:
See TracChangeset
for help on using the changeset viewer.
