@@ -411,22 +411,22 @@ def add_key_based_validation_properties(schema):
411
411
add_key_based_validation_properties (item )
412
412
elif isinstance (schema , dict ):
413
413
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"
430
430
431
431
add_key_based_validation_properties (value )
432
432
@@ -436,11 +436,12 @@ def get_strict_schema(schema):
436
436
Return the strict version of the schema.
437
437
"""
438
438
# 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
+ )
444
445
445
446
# Add validation properties
446
447
add_validation_properties (schema )
@@ -449,23 +450,39 @@ def get_strict_schema(schema):
449
450
add_key_based_validation_properties (schema )
450
451
451
452
# 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 )
454
455
455
456
return schema
456
457
457
458
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
+
458
471
def remove_nulls (schema ):
459
472
"""
460
- Remove null types.
473
+ Remove null types and enum values .
461
474
"""
462
475
if isinstance (schema , dict ):
463
476
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 )
466
481
467
482
remove_nulls (value )
468
483
484
+ return schema
485
+
469
486
470
487
@click .group ()
471
488
def cli ():
@@ -569,11 +586,12 @@ def pre_commit():
569
586
- meta-schema.json
570
587
- dereferenced-release-schema.json
571
588
- 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
577
595
"""
578
596
nonmultilingual = {
579
597
# Identifiers.
@@ -595,9 +613,9 @@ def pre_commit():
595
613
"scheme" ,
596
614
}
597
615
598
- release_schema = json_load (' release-schema.json' )
616
+ release_schema = json_load (" release-schema.json" )
599
617
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 )
601
619
602
620
counts = defaultdict (list )
603
621
nonstring = ("boolean" , "integer" , "number" , "object" )
@@ -650,17 +668,22 @@ def pre_commit():
650
668
json_dump ("versioned-release-validation-schema.json" , get_versioned_release_schema (release_schema ))
651
669
652
670
# 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
+ )
661
680
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
+ )
664
687
665
688
666
689
@cli .command ()
0 commit comments