Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/sigstore_models/rekor/v2/entry.py: 70%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

27 statements  

1import typing as t 

2 

3import typing_extensions as te 

4from pydantic import model_validator 

5 

6from sigstore_models._core import Base 

7from sigstore_models.rekor.v2 import dsse, hashedrekord 

8 

9 

10class Entry(Base): 

11 kind: str 

12 api_version: str 

13 spec: "Spec" 

14 

15 

16class Spec(Base): 

17 hashed_rekord_v002: t.Optional[hashedrekord.HashedRekordLogEntryV002] = None 

18 dsse_v002: t.Optional[dsse.DSSELogEntryV002] = None 

19 

20 @model_validator(mode="after") 

21 def check_spec_oneof(self) -> te.Self: 

22 fields = [self.hashed_rekord_v002, self.dsse_v002] 

23 if sum(bool(f) for f in fields) != 1: 

24 raise ValueError("Exactly one of hashedRekordV002 or dsseV002 must be set") 

25 return self 

26 

27 

28class CreateEntryRequest(Base): 

29 hashed_rekord_request_v002: t.Optional[hashedrekord.HashedRekordRequestV002] = None 

30 dsse_request_v002: t.Optional[dsse.DSSERequestV002] = None 

31 

32 @model_validator(mode="after") 

33 def check_request_oneof(self) -> te.Self: 

34 fields = [self.hashed_rekord_request_v002, self.dsse_request_v002] 

35 if sum(bool(f) for f in fields) != 1: 

36 raise ValueError( 

37 "Exactly one of hashedRekordRequestV002 or dsseRequestV002 must be set" 

38 ) 

39 return self