Schema Validation Flow
The SDK uses SchemaValidator
and
SchemaCache
to verify record data before
submitting it to the API. The validator checks that all variables exist,
required fields are present, and that values match the expected types.
If the variable metadata for a form is missing, SchemaValidator
automatically
loads it from the API using VariablesEndpoint
.
Any problems raise ValidationError
before the
record is sent to the server.
SchemaValidator
works with both synchronous and asynchronous SDK clients.
It refreshes cached metadata using the appropriate API calls depending on the
client type.
The diagram below outlines the main steps.
Record payloads can also be validated asynchronously. Use
SchemaValidator.validate_batch
with AsyncImednetSDK
before
submitting records:
async with AsyncImednetSDK() as sdk:
validator = SchemaValidator(sdk)
await validator.validate_batch(study_key, records)
await sdk.records.async_create(study_key, records, schema=validator.schema)
Offline Example
imednet.testing.fake_data
provides helpers for generating form
metadata and sample records without an API connection. Combine these
functions with SchemaCache
to validate payloads locally:
from types import SimpleNamespace
from imednet.testing import fake_data
from imednet.validation.cache import SchemaCache
forms = fake_data.fake_forms_for_cache(1, study_key="S")
variables = fake_data.fake_variables_for_cache(forms, vars_per_form=2,
study_key="S")
forms_ep = SimpleNamespace(list=lambda **_: forms)
vars_ep = SimpleNamespace(list=lambda form_id=None, **__: [
v for v in variables if form_id is None or v.form_id == form_id
])
schema = SchemaCache()
schema.refresh(forms_ep, vars_ep, study_key="S")
record = fake_data.fake_record(schema)