Changeset 37b5d11 in flexoentity
- Timestamp:
- 10/25/25 12:06:04 (3 months ago)
- Branches:
- master
- Children:
- c98728b
- Parents:
- 33be5a0
- Files:
-
- 2 edited
-
flexoentity/flexo_entity.py (modified) (2 diffs)
-
org/FlexoEntity.org (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
flexoentity/flexo_entity.py
r33be5a0 r37b5d11 230 230 return True 231 231 return False 232 233 # ─────────────────────────────────────────────────────────────── 234 def _transition(self, target_state: EntityState): 235 """Internal helper for state transitions with version and fingerprint checks.""" 236 if target_state == EntityState.OBSOLETE: 237 self.state = target_state 238 return 239 240 # Check if version should bump 241 if self.should_version(target_state): 242 self._update_fingerprint() 243 self.flexo_id = FlexOID.next_version(self.flexo_id) 244 232 233 def _transition(self, target_state: EntityState): 234 """ 235 Internal helper for state transitions with version/fingerprint checks 236 and forward-only enforcement. 237 """ 238 239 allowed = self.allowed_transitions() 240 241 if target_state.name not in allowed: 242 raise ValueError( 243 f"Illegal state transition: {self.state.name} → {target_state.name}. " 244 f"Allowed: {', '.join(allowed) or 'none'}" 245 ) 246 247 # special case: marking obsolete 248 if target_state == EntityState.OBSOLETE: 245 249 self.state = target_state 246 250 self.updated_at = datetime.now(UTC) 251 return 252 253 # version bump only for stable/external states 254 if self.should_version(target_state): 255 self._update_fingerprint() 256 self.flexo_id = FlexOID.next_version(self.flexo_id) 257 258 self.state = target_state 259 self.updated_at = datetime.now(UTC) 247 260 248 261 # ─────────────────────────────────────────────────────────────── … … 277 290 Draft entities receive a new permanent FlexOID with incremented version. 278 291 """ 292 279 293 if self.state == EntityState.DRAFT: 280 294 new_version = self.flexo_id.version + 1 -
org/FlexoEntity.org
r33be5a0 r37b5d11 6 6 ** Was ist ein Hash? 7 7 8 Ein Hash ist wie eine Art eindeutige Kennnummer oder ein"Fingerabdruck" für Daten, der8 Ein Hash ist ein hoffentlich eindeutiger "Fingerabdruck" für Daten, der 9 9 sich aus eben diesen Daten über den Algorithmus einer Hash-Funktion errechnet. 10 11 Die Eingabedaten bezeichnet man als Seed, das Ergebnis als Digest. 12 13 Man gibt die Saat (das Futter) an die Hashfunktion zum Zerkauen/Zerkleinern (Hashen), 14 das wird verdaut, nebenbei noch gewürzt (Salt) und kommt als Digest wieder heraus. 15 Die Länge der Ausgabe ist fest. 16 17 ** Ein wichtiger Punkt 18 19 Wichtig ist auch zu verstehen, dass Hashes sogenannte "One-Way-Funktionen" sind. 20 Das heißt, man kann das Hashing nicht einfach umkehren, um das ursprüngliche Objekt wiederherzustellen. 21 Ein Hash ist also eine Einbahnstraße: Er dient nur dazu, die Daten zu repräsentieren, 22 aber man kann nicht vom Hash auf die originalen Daten zurückrechnen. 23 Aus Kacke kann man kein Essen zaubern. 10 24 11 25 ** Was ist kein Hash? … … 32 46 hat sich etwas geändert. Das spart enorm viel Aufwand. 33 47 34 ** Ein wichtiger Punkt35 36 Wichtig ist auch zu verstehen, dass Hashes sogenannte "One-Way-Funktionen" sind.37 Das heißt, man kann das Hashing nicht einfach umkehren, um das ursprüngliche Objekt wiederherzustellen.38 Ein Hash ist also eine Einbahnstraße: Er dient nur dazu, die Daten zu repräsentieren,39 aber man kann nicht vom Hash auf die originalen Daten zurückrechnen.40 41 48 ** Beispiele für den Einsatz von Hashes 42 49 … … 48 55 root:$6$tsicHaoV3Q$YtAbiIvrHGXFtAJYz9tcEYWHXiGVQ40sJAgzPAbc57lIq9jH8eYjWXwctSW6YQnrMznRFcm6yXLnnY9mHhso20 49 56 enno:$6$sdygzfEgx0$YpaZJMQdkZgxGPclphz6RojqNG.PSNEq1oIHRP4kvZRN2iuS5MQrxt0nCkrYQIcpDGyohrb1o0S/GkWrFriWL1 57 58 Der Hash ist länger als das Passwort. Das dient der Sicherheit, weil man zwar nicht zurückrechnen, 59 wohl aber vorwärtsrechnen kann. Hash-Funktionen sind deterministisch. 60 Bei Linux-Passworteinträgen hat man hier $6$ den Hashalgorithmus kodiert, im daraufolgendem $.....$ das Salz 61 und im Rest den eigentlichen Hash kodiert 50 62 51 63 - **Git-Commits**: In Versionskontrollsystemen wie Git werden Hashes benutzt, um jeden Schwung an … … 168 180 erreicht haben. Ein Zertifikat kann nur ausgestellt werden, wenn der passende Einstufungstest die Stufe 169 181 Veröffentlicht hat. Das origin-Feld des Zertifikats sollte sinnvollerweise die ID des Tests enthalten. 170 182 171 183 ** Erhöhung der Versionsnummer oder neue ID 172 184 173 185 Sobald - aus Gründen - eine neue ID vergeben werden muss, wird ggf. die Ursprungs-ID 174 186 im Feld origin der neuen FlexoEntity gespeichert. So ist immer ein Suchen im Stammbaum möglich. 187 188 AF-Q251022-70F759@001D 189 │ │ │ │ │ │ 190 │ │ │ │ │ └── State (Draft, Approved, Signed, Published, Obsolete) 191 │ │ │ │ └──── Version 192 │ │ │ └────────── Hash (3 bytes, 6 Stellen) 193 │ │ └────────────────── Date (YYMMDD) 194 │ └──────────────────── Entity type (Question) 195 └─────────────────────── Domain (e.g. Air force) 196 175 197 176 198 Eine einfache Erhöhung der Versionsnummer (am Ende der ID) ist unter Umständen auch ausreichend, … … 178 200 für das Projekt FlexoGrader recht umfangreich und soll hier nicht weiter besprochen werden. 179 201 Da es aber im Hintergrund passiert und vom Endanwender nicht bemerkt wird, behindert der 180 Mechanismus die Nutzung des FlexoGrader (TM) nicht. 181 202 Mechanismus die Nutzung des FlexoGrader nicht. 203 204 ** Reifegrad 205 206 Das Konzept und Design hat die Alpha-Phase verlassen, der Code ist aber noch deutlich Beta. 207 RC1 etwa Anfang Dezember (nach meinem Urlaub). Änderungen an der FlexOID sind nicht mehr zu erwarten, beim API der FlexoEntity schon eher. 208 209 Das Perfekte ist der Feind des Guten, aber ... 210 211 Als Gegenbeispiel für unausgereiftes Design ist Pythons eingebaute datetime Bibliothek. 212 Da könnte man ein Buch drüber schreiben. Halb Drama, halb Komödie. 213 214 - dateutil, arrow, pendulum, maya, moment, delorean, pytz, zoneinfo + numpy/pandas 215 182 216 ** Lizenz 183 217
Note:
See TracChangeset
for help on using the changeset viewer.
