Skip to content

Commit 84cd062

Browse files
manage.py (pre-commit): Create a compiled release schema, format code
1 parent c54ec0a commit 84cd062

File tree

1 file changed

+66
-43
lines changed

1 file changed

+66
-43
lines changed

manage.py

Lines changed: 66 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -411,22 +411,22 @@ def add_key_based_validation_properties(schema):
411411
add_key_based_validation_properties(item)
412412
elif isinstance(schema, dict):
413413
for key, value in schema.items():
414-
if key == 'email':
415-
value['format'] = 'email'
416-
elif key in ['quantity', 'durationInDays', 'numberOfTenderers']:
417-
value['minimum'] = 0
418-
elif key in ['Organization', 'OrganizationReference']:
419-
value['required'] = ['id', 'name']
420-
value['properties']['name']['type'] = "string"
421-
value['properties']['id']['type'] = "string"
422-
elif key in ['Amendment', 'RelatedProcess']:
423-
value['required'] = ['id']
424-
value['properties']['id']['type'] = "string"
425-
elif key in ['id', 'projectID']:
426-
if 'type' in value and 'integer' in value['type']:
427-
value['type'].remove('integer')
428-
elif key == 'Unit':
429-
value['properties']['value']['$ref'] = '#/definitions/UnitValue'
414+
if key == "email":
415+
value["format"] = "email"
416+
elif key in ["quantity", "durationInDays", "numberOfTenderers"]:
417+
value["minimum"] = 0
418+
elif key in ["Organization", "OrganizationReference"]:
419+
value["required"] = ["id", "name"]
420+
value["properties"]["name"]["type"] = "string"
421+
value["properties"]["id"]["type"] = "string"
422+
elif key in ["Amendment", "RelatedProcess"]:
423+
value["required"] = ["id"]
424+
value["properties"]["id"]["type"] = "string"
425+
elif key in ["id", "projectID"]:
426+
if "type" in value and "integer" in value["type"]:
427+
value["type"].remove("integer")
428+
elif key == "Unit":
429+
value["properties"]["value"]["$ref"] = "#/definitions/UnitValue"
430430

431431
add_key_based_validation_properties(value)
432432

@@ -436,11 +436,12 @@ def get_strict_schema(schema):
436436
Return the strict version of the schema.
437437
"""
438438
# Update schema metadata.
439-
release_with_underscores = release.replace('.', '__')
440-
schema['id'] = schema['id'].replace(release_with_underscores,
441-
f'{release_with_underscores}/strict')
442-
schema['title'] = f'Strict {schema["title"][0].lower()}{schema["title"][1:]}'
443-
schema['description'] = f'{schema["description"]} The strict schema adds additional validation rules planned for inclusion in OCDS 2.0. Use of the strict schema is a voluntary opportunity to improve data quality.' # noqa: E501
439+
release_with_underscores = release.replace(".", "__")
440+
schema["id"] = schema["id"].replace(release_with_underscores, f"{release_with_underscores}/strict")
441+
schema["title"] = f'Strict {schema["title"][0].lower()}{schema["title"][1:]}'
442+
schema["description"] = (
443+
f'{schema["description"]} The strict schema adds additional validation rules planned for inclusion in OCDS 2.0. Use of the strict schema is a voluntary opportunity to improve data quality.' # noqa: E501
444+
)
444445

445446
# Add validation properties
446447
add_validation_properties(schema)
@@ -449,23 +450,39 @@ def get_strict_schema(schema):
449450
add_key_based_validation_properties(schema)
450451

451452
# Remove null types from package schemas
452-
if 'package' in schema['id']:
453-
remove_nulls(schema)
453+
if "package" in schema["id"]:
454+
return remove_nulls(schema)
454455

455456
return schema
456457

457458

459+
def get_compiled_release_schema(schema):
460+
"""
461+
Return the compiled release schema.
462+
"""
463+
# Update schema metadata.
464+
schema["id"] = schema["id"].replace("release-schema", "compiled-release-schema")
465+
schema["title"] = schema["title"].replace("Open Contracting Release", "Open Contracting Compiled Release")
466+
467+
# Remove null types and enum values.
468+
return remove_nulls(schema)
469+
470+
458471
def remove_nulls(schema):
459472
"""
460-
Remove null types.
473+
Remove null types and enum values.
461474
"""
462475
if isinstance(schema, dict):
463476
for key, value in schema.items():
464-
if key == 'type' and isinstance(value, list) and 'null' in value:
465-
value.remove('null')
477+
if key == "type" and isinstance(value, list) and "null" in value:
478+
value.remove("null")
479+
if key == "enum" and isinstance(value, list) and None in value:
480+
value.remove(None)
466481

467482
remove_nulls(value)
468483

484+
return schema
485+
469486

470487
@click.group()
471488
def cli():
@@ -569,11 +586,12 @@ def pre_commit():
569586
- meta-schema.json
570587
- dereferenced-release-schema.json
571588
- versioned-release-validation-schema.json
572-
- strict-release-schema.json
573-
- strict-release-package.json
574-
- strict-record-package.json
575-
- strict-dereferenced-release-schema.json
576-
- strict-versioned-release-validation-schema.json
589+
- strict/release-schema.json
590+
- strict/release-package.json
591+
- strict/record-package.json
592+
- strict/dereferenced-release-schema.json
593+
- strict/versioned-release-validation-schema.json
594+
- strict/compiled-release-schema.json
577595
"""
578596
nonmultilingual = {
579597
# Identifiers.
@@ -595,9 +613,9 @@ def pre_commit():
595613
"scheme",
596614
}
597615

598-
release_schema = json_load('release-schema.json')
616+
release_schema = json_load("release-schema.json")
599617
strict_release_schema = get_strict_schema(deepcopy(release_schema))
600-
jsonref_release_schema = json_load('release-schema.json', jsonref, merge_props=True)
618+
jsonref_release_schema = json_load("release-schema.json", jsonref, merge_props=True)
601619

602620
counts = defaultdict(list)
603621
nonstring = ("boolean", "integer", "number", "object")
@@ -650,17 +668,22 @@ def pre_commit():
650668
json_dump("versioned-release-validation-schema.json", get_versioned_release_schema(release_schema))
651669

652670
# Strict schemas.
653-
directory = Path('strict')
654-
json_dump(directory / 'release-schema.json', strict_release_schema)
655-
json_dump(directory / 'record-schema.json', get_strict_schema(json_load('record-schema.json')))
656-
657-
strict_dereferenced_release_schema = json_load(directory / 'release-schema.json', jsonref, merge_props=True)
658-
json_dump(directory / 'dereferenced-release-schema.json', strict_dereferenced_release_schema)
659-
json_dump(directory / 'versioned-release-validation-schema.json',
660-
get_versioned_release_schema(strict_release_schema))
671+
directory = Path("strict")
672+
json_dump(directory / "release-schema.json", strict_release_schema)
673+
json_dump(directory / "record-schema.json", get_strict_schema(json_load("record-schema.json")))
674+
675+
strict_dereferenced_release_schema = json_load(directory / "release-schema.json", jsonref, merge_props=True)
676+
json_dump(directory / "dereferenced-release-schema.json", strict_dereferenced_release_schema)
677+
json_dump(
678+
directory / "versioned-release-validation-schema.json", get_versioned_release_schema(strict_release_schema)
679+
)
661680

662-
json_dump(directory / 'release-package-schema.json', get_strict_schema(json_load('release-package-schema.json')))
663-
json_dump(directory / 'record-package-schema.json', get_strict_schema(json_load('record-package-schema.json')))
681+
json_dump(directory / "release-package-schema.json", get_strict_schema(json_load("release-package-schema.json")))
682+
json_dump(directory / "record-package-schema.json", get_strict_schema(json_load("record-package-schema.json")))
683+
json_dump(
684+
directory / "compiled-release-schema.json",
685+
remove_nulls(get_compiled_release_schema(json_load(directory / "release-schema.json"))),
686+
)
664687

665688

666689
@cli.command()

0 commit comments

Comments
 (0)