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