Data Validation Patterns
Required Fields
Validation starts by checking that incoming records contain the fields later code expects.
required fields
A required-field check reports missing keys before code reads values from a dictionary.
Required Fields
required.py
Replay: real traced execution (multi-file project)
def missing_fields(record, required):
missing = []
for field in required:
if field not in record:
missing.append(field)
return missing
include_email = False
user = {"name": "Ada"}
if include_email:
user["email"] = "ada@example.com"
missing = missing_fields(user, ["name", "email"])
print("missing=" + ",".join(missing) if missing else "missing=none")
def missing_fields(record, required):
missing = []
for field in required:
if field not in record:
missing.append(field)
return missing
include_email = True
user = {"name": "Ada"}
if include_email:
user["email"] = "ada@example.com"
missing = missing_fields(user, ["name", "email"])
print("missing=" + ",".join(missing) if missing else "missing=none")
include_email ← False, user ← {'name': 'Ada'}
11include_email→ False = False #@include_email=True12user→ {'name': 'Ada'} = {"name": "Ada"}1314if include_email:15 user["email"] = "ada@example.com"1617missing = missing_fields(user{'name': 'Ada'}, ["name", "email"])18print("missing=" + ",".join(missing) if missing else "missing=none")missing ← []
1def missing_fields(record{'name': 'Ada'}, required['name', 'email']):2 missing→ [] = []for field in required:
pass 1 of 24for fieldname in required['name', 'email']:5 if field not in record:6 missing.append(field)for field in required:
pass 2 of 24for fieldemail in required['name', 'email']:5 if field not in record:6 missing.append(field)missing ← ['email']
4for field in required:5 if fieldemail not in record{'name': 'Ada'}:6 missing→ ['email'].append(fieldemail)return missing
8return missing['email']missing ← ['email']
17missing→ ['email'] = missing_fields(user{'name': 'Ada'}, ["name", "email"])18print("missing=" + ",".join(missing['email']) if missing else "missing=none")outputmissing=email
include_email ← True, user ← {'name': 'Ada'}
11include_email→ True = True12user→ {'name': 'Ada'} = {"name": "Ada"}user[”email”] ← ada@example.com
14if include_emailTrue:15 user["email"]→ ada@example.com = "ada@example.com"missing = missing_fields(user, ["name", "email"])
17missing = missing_fields(user{'name': 'Ada', 'email': 'ada@example.com'}, ["name", "email"])18print("missing=" + ",".join(missing) if missing else "missing=none")missing ← []
1def missing_fields(record{'name': 'Ada', 'email': 'ada@example.com'}, required['name', 'email']):2 missing→ [] = []for field in required:
pass 1 of 24for fieldname in required['name', 'email']:5 if field not in record:6 missing.append(field)for field in required:
pass 2 of 24for fieldemail in required['name', 'email']:5 if field not in record:6 missing.append(field)return missing
8return missing[]missing ← []
17missing→ [] = missing_fields(user{'name': 'Ada', 'email': 'ada@example.com'}, ["name", "email"])18print("missing=" + ",".join(missing[]) if missing else "missing=none")outputmissing=none