Version 7.1.6¶
Minor release: identifier story overhaul + more permissive PlantUML importer. Closes #230, #225, #108, #236 and completes the is_id work from #478 / #486. Frontend submodule advances twice to expose the two new attribute checkboxes.
Highlights¶
New ``Property.is_external_id`` (closes #230, #225, #108): B-UML now distinguishes the internal surrogate PK (
is_id) from user-facing identifiers (is_external_id). Composite keys supported. Flag round-trips through metamodel, JSON converters, and code builder. SQLAlchemy emitsunique=Trueon non-PK external ids (subsumes #108’s UNIQUE ask). Django emitsunique=Trueand — crucially for #225 — uses external ids in__str__so ForeignKey dropdowns showisbn/first_name - last_nameinstead of the PK.``is_id`` propagation completed (#478): PR #486 landed the metamodel + converters but deferred the builder, generators, and editor. Finished here:
domain_model_to_codeemitsis_id=True, Django template emitsprimary_key=True, editor gains an ID checkbox (SQLAlchemy already worked).PlantUML importer permissiveness (closes #236): grammar now accepts single-dash
-associations,integer/booleantype aliases, and trailing</>direction hints on labels. Lexer/parser regenerated with ANTLR 4.13.2.Django template whitespace fix: pre-existing bug where the attribute for-loop stripped every newline — rendered
models.pywas invalid Python. Regression test compiles the output.Editor UI (submodule c4252a6 → b5102c0): two new attribute-popup checkboxes (ID, External ID),
{id}/{external id}markers in the display name, plusc50f6dc(attribute/method reorder — piggybacked ondevelop).
Testing¶
11 new tests: metamodel setter validation, JSON↔BUML round-trip, code-builder exec round-trip, SQLAlchemy schema introspection + real IntegrityError on duplicate external-id, Django field emission + __str__ variants + compile() sanity, and 5 PlantUML grammar regressions. Full suite: 692 passed, 5 skipped, 3 xfailed.