@@ -179,7 +179,7 @@ def get_common_purl_from_artifact_purls(purl_strs: Iterable[str]) -> str | None:
179179def create_vsa_statement (
180180 passed_components : dict [str , int ],
181181 policy_content : str ,
182- ) -> VsaStatement :
182+ ) -> VsaStatement | None :
183183 """Construct the Statement layer of the VSA.
184184
185185 Parameters
@@ -202,28 +202,40 @@ def create_vsa_statement(
202202 try :
203203 with Session (get_db_manager ().engine ) as session , session .begin ():
204204 for purl , component_id in passed_components .items ():
205- query = sqlalchemy .select (ProvenanceSubject ).where (ProvenanceSubject .component_id == component_id )
206205 try :
207- provenance_subject = session .execute (query ).scalars ().one ()
206+ provenance_subject = (
207+ session .execute (
208+ sqlalchemy .select (ProvenanceSubject ).where (ProvenanceSubject .component_id == component_id )
209+ )
210+ .scalars ()
211+ .one ()
212+ )
208213 sha256 = provenance_subject .sha256
209- subject : dict [str , JsonType ] = {
210- "uri" : purl ,
211- }
212- if sha256 :
213- subject ["digest" ] = {
214- "sha256" : sha256 ,
215- }
216- subjects .append (subject )
217- except (sqlalchemy .orm .exc .NoResultFound , sqlalchemy .orm .exc .MultipleResultsFound ) as e :
218- logger .error (
214+ except sqlalchemy .orm .exc .NoResultFound :
215+ sha256 = None
216+ logger .debug ("No digest stored for software component '%s'." , purl )
217+ except sqlalchemy .orm .exc .MultipleResultsFound as e :
218+ logger .debug (
219219 "Unexpected database query result. "
220- "Expected exactly one result when retrieving SHA256 of a provenance subject. "
220+ "Expected no more than one result when retrieving SHA256 of a provenance subject. "
221221 "Error: %s" ,
222222 e ,
223223 )
224+ continue
225+
226+ subject : dict [str , JsonType ] = {
227+ "uri" : purl ,
228+ }
229+ if sha256 :
230+ subject ["digest" ] = {
231+ "sha256" : sha256 ,
232+ }
233+
234+ subjects .append (subject )
224235
225236 except sqlalchemy .exc .SQLAlchemyError as error :
226- logger .critical ("Database error %s" , error )
237+ logger .debug ("Cannot retrieve hash digest of software components: %s." , error )
238+ return None
227239
228240 return VsaStatement (
229241 _type = "https://in-toto.io/Statement/v1" ,
0 commit comments