Version 7.17.1¶
Patch release: a project exported as BUML with both a class diagram and a GUI model can be imported again. No metamodel or API contract changes; the fix is in the GUI code builder and the BUML reader, and it applies to files exported by earlier versions as well as to new ones.
Highlights¶
A GUI table referencing an inherited attribute produced an export that could not be read back: the GUI code builder named a column’s
Propertyvariable after the class the table is bound to, while the domain model builder names it after the class that declares the attribute. Those are the same class until inheritance is involved. AGuesttable showingPerson.idwas written asfield=Guest_id, and sinceGuestdeclares nothing of its own, nothing in the file ever defined that name — importing it failed withNameError: name 'Guest_id' is not defined.FieldColumnandLookupColumnnow resolve the declaring class throughProperty.owner, which is what the method-button code in the same builder already did.Tables, lookups and chart series were missing from the reader’s vocabulary: the BUML reader executes a GUI section against an allowlisted namespace rather than letting it import anything, and that allowlist was written by hand. It had drifted to 58 of the metamodel’s 68 GUI types, and everything table-related was among the missing —
FieldColumn,LookupColumn,ExpressionColumn,ColumnandSeries. Any project containing a table failed on its first column. The namespace is now derived from the GUI metamodel modules, so a component type added later is understood by the reader at the same moment the metamodel gains it.A GUI section is now read with its domain model in scope: a GUI model refers to the domain elements it binds to, but the section was executed on its own, unlike object diagrams, which were already given the structural code as context. The structural section now runs first, and
ClassName_attributeNameis bound for every attribute a class exposes, inherited ones included. That is what the convention means —Guestreally does exposeid— so files written by the older builder load correctly rather than only newly exported ones.The GUI sandbox exposes
globals(): the builder emitsglobals().get('domain_model')to resolve the domain model at runtime, so a GUI model reaching that line was unreadable regardless of the above. It returns the sandbox’s own namespace, whose__builtins__is already the restricted mapping, so it grants the executed code nothing it did not have.
Reported against v7.17.0 with a real exported project; that file now imports with its 47 class-diagram elements and 7 GUI pages intact.