Skip to content

Commit b21e56a

Browse files
committed
Add check for pfm_name and adjust check for pfm_type in subkeys
Closes #54.
1 parent 2176163 commit b21e56a

1 file changed

Lines changed: 31 additions & 6 deletions

File tree

pre_commit_hooks/check_preference_manifests.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def validate_required_keys(input_dict, required_keys, dict_name, filename):
5252
def validate_manifest_key_types(manifest, filename):
5353
"""Validation of manifest key types."""
5454

55-
# manifest keys and their known types. Omitted keys are left unvalidated.
55+
# manifest keys and their known types. Omitted keys are left un-validated.
5656
# Last updated 2021-12-03.
5757
key_types = {
5858
"pfm_conditionals": list,
@@ -164,6 +164,23 @@ def validate_list_item_types(manifest, filename):
164164
return passed
165165

166166

167+
def validate_required_subkeys(subkey, req_keys, filename):
168+
"""Ensure specific keys are defined in subkeys."""
169+
passed = True
170+
171+
for subsubkey in subkey.get("pfm_subkeys", []):
172+
if subsubkey.get("pfm_name"):
173+
display_name = subsubkey["pfm_name"]
174+
elif subkey.get("pfm_name"):
175+
display_name = subkey["pfm_name"] + " subkey"
176+
else:
177+
display_name = "<unnamed key> subkey"
178+
if not validate_required_keys(subsubkey, req_keys, display_name, filename):
179+
passed = False
180+
181+
return passed
182+
183+
167184
def validate_pfm_type_strings(subkey, filename):
168185
"""Ensure subkey pfm_type strings are as expected."""
169186
passed = True
@@ -326,11 +343,19 @@ def validate_subkeys(subkeys, filename):
326343

327344
for subkey in subkeys:
328345

329-
# Check for presence of required keys.
330-
required_keys = ("pfm_type",)
331-
if not validate_required_keys(
332-
subkey, required_keys, subkey.get("pfm_name", "<unnamed key>"), filename
333-
):
346+
# Check for presence of required subkeys
347+
# (Not calling validate_required_keys() directly because the output would not be
348+
# specific enough to indicate *where* in the manifest the problem exists.)
349+
# Example of validate_required_keys() output:
350+
# menu.nomad.NoMADPro.plist: <unnamed key> missing required key pfm_type
351+
# Example of validate_required_subkeys() output:
352+
# menu.nomad.NoMADPro.plist: ChangePasswordItem subkey missing required key pfm_type
353+
if subkey["pfm_type"] != "array":
354+
# pfm_name is required only if the pfm_type is not array
355+
required_keys = ("pfm_type", "pfm_name")
356+
else:
357+
required_keys = ("pfm_type",)
358+
if not validate_required_subkeys(subkey, required_keys, filename):
334359
passed = False
335360
break # No need to continue checking this list of subkeys
336361

0 commit comments

Comments
 (0)