@@ -511,16 +511,19 @@ class Root(Signed):
511
511
supports consistent snapshots.
512
512
keys: A dictionary that contains a public key store used to verify
513
513
top level roles metadata signatures::
514
- {
515
- '<KEYID>': <Key instance>,
516
- ...
517
- },
514
+
515
+ {
516
+ '<KEYID>': <Key instance>,
517
+ ...
518
+ },
519
+
518
520
roles: A dictionary that contains a list of signing keyids and
519
521
a signature threshold for each top level role::
520
- {
521
- '<ROLE>': <Role istance>,
522
- ...
523
- }
522
+
523
+ {
524
+ '<ROLE>': <Role istance>,
525
+ ...
526
+ }
524
527
525
528
"""
526
529
@@ -612,7 +615,7 @@ class Timestamp(Signed):
612
615
'<HASH ALGO 1>': '<SNAPSHOT METADATA FILE HASH 1>',
613
616
'<HASH ALGO 2>': '<SNAPSHOT METADATA FILE HASH 2>',
614
617
...
615
- }
618
+ } // optional
616
619
}
617
620
}
618
621
@@ -648,14 +651,19 @@ def to_dict(self) -> Dict[str, Any]:
648
651
649
652
# Modification.
650
653
def update (
651
- self , version : int , length : int , hashes : Mapping [str , Any ]
654
+ self ,
655
+ version : int ,
656
+ length : Optional [int ] = None ,
657
+ hashes : Optional [Mapping [str , Any ]] = None ,
652
658
) -> None :
653
659
"""Assigns passed info about snapshot metadata to meta dict."""
654
- self .meta ["snapshot.json" ] = {
655
- "version" : version ,
656
- "length" : length ,
657
- "hashes" : hashes ,
658
- }
660
+ self .meta ["snapshot.json" ] = {"version" : version }
661
+
662
+ if length is not None :
663
+ self .meta ["snapshot.json" ]["length" ] = length
664
+
665
+ if hashes is not None :
666
+ self .meta ["snapshot.json" ]["hashes" ] = hashes
659
667
660
668
661
669
class Snapshot (Signed ):
@@ -755,34 +763,34 @@ class Targets(Signed):
755
763
roles and public key store used to verify their metadata
756
764
signatures::
757
765
758
- {
759
- 'keys' : {
760
- '<KEYID>': {
761
- 'keytype': '<KEY TYPE>',
762
- 'scheme': '<KEY SCHEME>',
763
- 'keyid_hash_algorithms': [
764
- '<HASH ALGO 1>',
765
- '<HASH ALGO 2>'
766
- ...
767
- ],
768
- 'keyval': {
769
- 'public': '<PUBLIC KEY HEX REPRESENTATION>'
770
- }
766
+ {
767
+ 'keys' : {
768
+ '<KEYID>': {
769
+ 'keytype': '<KEY TYPE>',
770
+ 'scheme': '<KEY SCHEME>',
771
+ 'keyid_hash_algorithms': [
772
+ '<HASH ALGO 1>',
773
+ '<HASH ALGO 2>'
774
+ ...
775
+ ],
776
+ 'keyval': {
777
+ 'public': '<PUBLIC KEY HEX REPRESENTATION>'
778
+ }
779
+ },
780
+ ...
771
781
},
782
+ 'roles': [
783
+ {
784
+ 'name': '<ROLENAME>',
785
+ 'keyids': ['<SIGNING KEY KEYID>', ...],
786
+ 'threshold': <SIGNATURE THRESHOLD>,
787
+ 'terminating': <TERMINATING BOOLEAN>,
788
+ 'path_hash_prefixes': ['<HEX DIGEST>', ... ], // or
789
+ 'paths' : ['PATHPATTERN', ... ],
790
+ },
772
791
...
773
- },
774
- 'roles': [
775
- {
776
- 'name': '<ROLENAME>',
777
- 'keyids': ['<SIGNING KEY KEYID>', ...],
778
- 'threshold': <SIGNATURE THRESHOLD>,
779
- 'terminating': <TERMINATING BOOLEAN>,
780
- 'path_hash_prefixes': ['<HEX DIGEST>', ... ], // or
781
- 'paths' : ['PATHPATTERN', ... ],
782
- },
783
- ...
784
- ]
785
- }
792
+ ]
793
+ }
786
794
787
795
"""
788
796
@@ -798,7 +806,7 @@ def __init__(
798
806
spec_version : str ,
799
807
expires : datetime ,
800
808
targets : Mapping [str , Any ],
801
- delegations : Mapping [str , Any ],
809
+ delegations : Optional [ Mapping [str , Any ]] = None ,
802
810
unrecognized_fields : Optional [Mapping [str , Any ]] = None ,
803
811
) -> None :
804
812
super ().__init__ (version , spec_version , expires , unrecognized_fields )
@@ -811,19 +819,16 @@ def from_dict(cls, targets_dict: Mapping[str, Any]) -> "Targets":
811
819
"""Creates Targets object from its dict representation."""
812
820
common_args = cls ._common_fields_from_dict (targets_dict )
813
821
targets = targets_dict .pop ("targets" )
814
- delegations = targets_dict .pop ("delegations" )
822
+ delegations = targets_dict .pop ("delegations" , None )
815
823
# All fields left in the targets_dict are unrecognized.
816
824
return cls (* common_args , targets , delegations , targets_dict )
817
825
818
826
def to_dict (self ) -> Dict [str , Any ]:
819
827
"""Returns the dict representation of self."""
820
828
targets_dict = self ._common_fields_to_dict ()
821
- targets_dict .update (
822
- {
823
- "targets" : self .targets ,
824
- "delegations" : self .delegations ,
825
- }
826
- )
829
+ targets_dict ["targets" ] = self .targets
830
+ if self .delegations :
831
+ targets_dict ["delegations" ] = self .delegations
827
832
return targets_dict
828
833
829
834
# Modification.
0 commit comments