Changeset a17e4f6 in flexoentity
- Timestamp:
- 01/15/26 11:19:14 (2 hours ago)
- Branches:
- master
- Parents:
- a1c4ba3
- Files:
-
- 2 edited
-
flexoentity/flexo_entity.py (modified) (2 diffs)
-
tests/test_id_lifecycle.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
flexoentity/flexo_entity.py
ra1c4ba3 ra17e4f6 306 306 obj._deserialize_content(data.get("content", {})) 307 307 return obj 308 def fork( 309 self, 310 *, 311 domain_id: str | None = None, 312 reset_state: bool = True, 313 keep_origin: bool = True, 314 ) -> "FlexoEntity": 315 """ 316 Create a new independent entity derived from this one. 317 """ 318 data = self.to_dict() 319 meta = data["meta"] 320 321 # Provenance 322 if keep_origin: 323 meta["origin"] = str(self.flexo_id) 324 325 # Reset lifecycle 326 if reset_state: 327 meta["version"] = 1 328 meta["state"] = EntityState.DRAFT.value 329 330 # Generate new identity 331 new_flexo_id = FlexOID.safe_generate( 332 domain_id=domain_id or self.domain_id, 333 entity_type=self.entity_type.value, 334 state=meta["state"], 335 text=self.text_seed, 336 version=meta["version"], 337 ) 338 339 meta["flexo_id"] = str(new_flexo_id) 340 341 return self.__class__.from_dict(data) 308 342 309 343 def to_json(self, indent: int = 2) -> str: … … 453 487 ) 454 488 455 self.origin = self.flexo_id456 self.flexo_id = new_fid489 self.origin = self.flexo_id 490 self.flexo_id = new_fid 457 491 458 492 return self -
tests/test_id_lifecycle.py
ra1c4ba3 ra17e4f6 115 115 with pytest.raises(RuntimeError, match="mark obsolete"): 116 116 q.bump_version() 117 118 def test_fork_creates_independent_domain(sample_domain): 119 original = sample_domain 120 121 forked = original.fork(domain_id="DST") 122 123 # ─── identity ─────────────────────────────────────────────────────── 124 assert forked is not original 125 assert isinstance(forked.flexo_id, FlexOID) 126 assert forked.flexo_id != original.flexo_id 127 128 # ─── lifecycle reset ──────────────────────────────────────────────── 129 assert forked.state == EntityState.DRAFT 130 assert forked.version == 1 131 132 # ─── provenance ───────────────────────────────────────────────────── 133 assert forked.origin == str(original.flexo_id) 134 135 # ─── domain reassigned ────────────────────────────────────────────── 136 assert forked.domain_id == "DST" 137 138 def test_fork_does_not_mutate_original(sample_domain): 139 original = sample_domain 140 original_id = original.flexo_id 141 original_fp = original.fingerprint 142 143 _ = original.fork(domain_id="DST") 144 145 assert original.flexo_id == original_id 146 assert original.fingerprint == original_fp 147 assert original.origin is None 148 149 def test_fork_does_not_shadow_state(sample_domain): 150 forked = sample_domain.fork(domain_id="DST") 151 152 # No instance attribute allowed 153 assert "state" not in forked.__dict__ 154 155 # Property must still work 156 assert forked.state == EntityState.DRAFT 157 158 def test_fork_without_origin(sample_domain): 159 forked = sample_domain.fork(domain_id="DST", keep_origin=False) 160 161 assert forked.origin is None
Note:
See TracChangeset
for help on using the changeset viewer.
