Skip to content

PY: Generate primitive type extension fields and restore extension/modifierExtension#107

Merged
MikhailArtemyev merged 11 commits intomainfrom
py-extension-support-test
Mar 30, 2026
Merged

PY: Generate primitive type extension fields and restore extension/modifierExtension#107
MikhailArtemyev merged 11 commits intomainfrom
py-extension-support-test

Conversation

@MikhailArtemyev
Copy link
Copy Markdown
Collaborator

@MikhailArtemyev MikhailArtemyev commented Mar 16, 2026

Summary

  • Add primitiveTypeExtension option to the Python generator — when enabled, generates _fieldName companion fields (typed as Element) for every primitive field, following the FHIR JSON representation for primitive extensions
    • Scalar primitives → Element | None (e.g. birth_date_extension: Element | None)
    • Array primitives → PyList[Element | None] | None (e.g. given_extension: PyList[Element | None] | None)
    • Auto-imports Element when the type isn't already in scope
  • Restore extension and modifierExtension fields on DomainResource and BackboneElement — previously suppressed via ignoreFields in the generation config
  • Add test_raw_extension.py example test (mirrors typescript-r4/raw-extension.test.ts) covering:
    • Resource-level extensions (extension, modifierExtension)
    • Element-level extensions (on HumanName, PatientContact)
    • Primitive extensions (_birthDate, _family, _given with sparse arrays)
    • Round-trip serialize → deserialize preservation

Before/After

Generated Python model — primitive fields now have _ companions:

# Before
birth_date: str | None = Field(None, alias="birthDate", ...)

# After
birth_date: str | None = Field(None, alias="birthDate", ...)
birth_date_extension: Element | None = Field(None, alias="_birthDate", ...)

Usage:

patient = Patient(
    birth_date="1990-03-15",
    birth_date_extension=Element(
        extension=[
            Extension(
                url="http://hl7.org/fhir/StructureDefinition/patient-birthTime",
                value_date_time="1990-03-15T08:22:00-05:00",
            ),
        ],
    ),
)

@MikhailArtemyev MikhailArtemyev requested a review from ryukzak March 16, 2026 21:21
@MikhailArtemyev MikhailArtemyev linked an issue Mar 16, 2026 that may be closed by this pull request
Copy link
Copy Markdown
Collaborator

@ryukzak ryukzak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MikhailArtemyev MikhailArtemyev force-pushed the py-extension-support-test branch from 6a02036 to 9eaa649 Compare March 18, 2026 20:27
@MikhailArtemyev MikhailArtemyev force-pushed the py-extension-support-test branch from f499905 to 3aa002c Compare March 26, 2026 15:00
@MikhailArtemyev MikhailArtemyev force-pushed the py-extension-support-test branch from 4536695 to b2b5497 Compare March 30, 2026 12:16
@MikhailArtemyev MikhailArtemyev changed the title Py extension support test Py extension support Mar 30, 2026
Comment thread Makefile Outdated
@MikhailArtemyev MikhailArtemyev merged commit ee38640 into main Mar 30, 2026
31 checks passed
@MikhailArtemyev MikhailArtemyev deleted the py-extension-support-test branch March 30, 2026 16:21
@ryukzak ryukzak changed the title Py extension support PY: Generate primitive type extension fields and restore extension/modifierExtension Apr 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Python: extension support test

2 participants