@@ -43,6 +43,16 @@ <h1>Source code for pushsource._impl.backend.koji_source</h1><div class="highlig
4343< span class ="kn "> from</ span > < span class ="w "> </ span > < span class ="nn "> more_executors</ span > < span class ="w "> </ span > < span class ="kn "> import</ span > < span class ="n "> Executors</ span >
4444< span class ="kn "> from</ span > < span class ="w "> </ span > < span class ="nn "> more_executors.futures</ span > < span class ="w "> </ span > < span class ="kn "> import</ span > < span class ="n "> f_map</ span >
4545
46+ < span class ="k "> try</ span > < span class ="p "> :</ span >
47+ < span class ="kn "> from</ span > < span class ="w "> </ span > < span class ="nn "> kobo</ span > < span class ="w "> </ span > < span class ="kn "> import</ span > < span class ="n "> rpmlib</ span >
48+ < span class ="k "> except</ span > < span class ="ne "> Exception</ span > < span class ="k "> as</ span > < span class ="n "> ex</ span > < span class ="p "> :</ span > < span class ="c1 "> # pragma: no cover, pylint: disable=broad-except</ span >
49+ < span class ="c1 "> # If kobo.rpmlib is unavailable, let's not immediately crash.</ span >
50+ < span class ="c1 "> # We will hold this exception and re-raise it only if there's an</ span >
51+ < span class ="c1 "> # attempt to use the related functionality.</ span >
52+ < span class ="kn "> from</ span > < span class ="w "> </ span > < span class ="nn "> ..</ span > < span class ="w "> </ span > < span class ="kn "> import</ span > < span class ="n "> broken_rpmlib</ span > < span class ="k "> as</ span > < span class ="n "> rpmlib</ span >
53+
54+ < span class ="n "> rpmlib</ span > < span class ="o "> .</ span > < span class ="n "> CAUSE</ span > < span class ="o "> =</ span > < span class ="n "> ex</ span >
55+
4656< span class ="kn "> from</ span > < span class ="w "> </ span > < span class ="nn "> ..source</ span > < span class ="w "> </ span > < span class ="kn "> import</ span > < span class ="n "> Source</ span >
4757< span class ="kn "> from</ span > < span class ="w "> </ span > < span class ="nn "> ..model</ span > < span class ="w "> </ span > < span class ="kn "> import</ span > < span class ="p "> (</ span >
4858 < span class ="n "> KojiBuildInfo</ span > < span class ="p "> ,</ span >
@@ -219,6 +229,8 @@ <h1>Source code for pushsource._impl.backend.koji_source</h1><div class="highlig
219229< span class ="sd "> using one of the provided keys. Include ``None`` if unsigned</ span >
220230< span class ="sd "> should also be permitted.</ span >
221231
232+ < span class ="sd "> Supports also key alias in the format ``name1+name2+...``</ span >
233+
222234< span class ="sd "> Keys should be listed in the order of preference.</ span >
223235
224236< span class ="sd "> basedir (str)</ span >
@@ -252,7 +264,7 @@ <h1>Source code for pushsource._impl.backend.koji_source</h1><div class="highlig
252264 < span class ="p "> )</ span >
253265 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _container_build</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="n "> try_int</ span > < span class ="p "> (</ span > < span class ="n "> x</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> x</ span > < span class ="ow "> in</ span > < span class ="n "> list_argument</ span > < span class ="p "> (</ span > < span class ="n "> container_build</ span > < span class ="p "> )]</ span >
254266 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _vmi_build</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="n "> try_int</ span > < span class ="p "> (</ span > < span class ="n "> x</ span > < span class ="p "> )</ span > < span class ="k "> for</ span > < span class ="n "> x</ span > < span class ="ow "> in</ span > < span class ="n "> list_argument</ span > < span class ="p "> (</ span > < span class ="n "> vmi_build</ span > < span class ="p "> )]</ span >
255- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _signing_key</ span > < span class ="o "> =</ span > < span class ="n "> list_argument</ span > < span class ="p "> (</ span > < span class ="n "> signing_key</ span > < span class ="p "> )</ span >
267+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _signing_key</ span > < span class ="o "> =</ span > < span class ="bp " > self </ span > < span class =" o " > . </ span > < span class =" n "> _parse_signing_key </ span > < span class =" p " > ( </ span > < span class =" n " > list_argument</ span > < span class ="p "> (</ span > < span class ="n "> signing_key</ span > < span class ="p "> ) )</ span >
256268 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _dest</ span > < span class ="o "> =</ span > < span class ="n "> list_argument</ span > < span class ="p "> (</ span > < span class ="n "> dest</ span > < span class ="p "> )</ span >
257269 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _timeout</ span > < span class ="o "> =</ span > < span class ="n "> timeout</ span >
258270 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _pathinfo</ span > < span class ="o "> =</ span > < span class ="n "> koji</ span > < span class ="o "> .</ span > < span class ="n "> PathInfo</ span > < span class ="p "> (</ span > < span class ="n "> basedir</ span > < span class ="p "> )</ span >
@@ -288,6 +300,13 @@ <h1>Source code for pushsource._impl.backend.koji_source</h1><div class="highlig
288300 < span class ="n "> tls</ span > < span class ="o "> .</ span > < span class ="n "> koji_session</ span > < span class ="o "> =</ span > < span class ="n "> koji</ span > < span class ="o "> .</ span > < span class ="n "> ClientSession</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _url</ span > < span class ="p "> ,</ span > < span class ="p "> {</ span > < span class ="s2 "> "anon_retry"</ span > < span class ="p "> :</ span > < span class ="kc "> True</ span > < span class ="p "> })</ span >
289301 < span class ="k "> return</ span > < span class ="n "> tls</ span > < span class ="o "> .</ span > < span class ="n "> koji_session</ span >
290302
303+ < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> _parse_signing_key</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> keys</ span > < span class ="p "> ):</ span >
304+ < span class ="n "> out</ span > < span class ="o "> =</ span > < span class ="p "> []</ span >
305+ < span class ="k "> for</ span > < span class ="n "> key</ span > < span class ="ow "> in</ span > < span class ="n "> keys</ span > < span class ="p "> :</ span >
306+ < span class ="c1 "> # adjust alias to comma separated names of keys</ span >
307+ < span class ="n "> out</ span > < span class ="o "> .</ span > < span class ="n "> append</ span > < span class ="p "> (</ span > < span class ="n "> key</ span > < span class ="o "> .</ span > < span class ="n "> replace</ span > < span class ="p "> (</ span > < span class ="s2 "> "+"</ span > < span class ="p "> ,</ span > < span class ="s2 "> ","</ span > < span class ="p "> )</ span > < span class ="k "> if</ span > < span class ="n "> key</ span > < span class ="k "> else</ span > < span class ="n "> key</ span > < span class ="p "> )</ span >
308+ < span class ="k "> return</ span > < span class ="n "> out</ span >
309+
291310 < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> _koji_check</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
292311 < span class ="c1 "> # Do a basic connection check with koji.</ span >
293312 < span class ="c1 "> # If this succeeds, we can be reasonably sure that the koji connection is</ span >
@@ -346,7 +365,6 @@ <h1>Source code for pushsource._impl.backend.koji_source</h1><div class="highlig
346365 < span class ="n "> candidate</ span > < span class ="o "> =</ span > < span class ="n "> unsigned_path</ span >
347366
348367 < span class ="n "> wait_exist</ span > < span class ="p "> (</ span > < span class ="n "> candidate</ span > < span class ="p "> ,</ span > < span class ="n "> timeout</ span > < span class ="p "> ,</ span > < span class ="n "> poll_rate</ span > < span class ="p "> )</ span >
349-
350368 < span class ="c1 "> # If signing keys requested, try them in order of preference</ span >
351369 < span class ="c1 "> # Some key should be present at this stage, let's try them all</ span >
352370 < span class ="k "> for</ span > < span class ="n "> key</ span > < span class ="ow "> in</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _signing_key</ span > < span class ="p "> :</ span >
@@ -358,7 +376,10 @@ <h1>Source code for pushsource._impl.backend.koji_source</h1><div class="highlig
358376 < span class ="n "> candidate_paths</ span > < span class ="o "> .</ span > < span class ="n "> append</ span > < span class ="p "> (</ span > < span class ="n "> candidate</ span > < span class ="p "> )</ span >
359377 < span class ="k "> if</ span > < span class ="n "> os</ span > < span class ="o "> .</ span > < span class ="n "> path</ span > < span class ="o "> .</ span > < span class ="n "> exists</ span > < span class ="p "> (</ span > < span class ="n "> candidate</ span > < span class ="p "> ):</ span >
360378 < span class ="n "> rpm_path</ span > < span class ="o "> =</ span > < span class ="n "> candidate</ span >
361- < span class ="n "> rpm_signing_key</ span > < span class ="o "> =</ span > < span class ="n "> key</ span >
379+ < span class ="c1 "> # we may only get key alias as input, let's extract actual key ID from RPM header in all cases</ span >
380+ < span class ="c1 "> # as we don't know if the provided data are alias or actual key ID</ span >
381+ < span class ="n "> header</ span > < span class ="o "> =</ span > < span class ="n "> rpmlib</ span > < span class ="o "> .</ span > < span class ="n "> get_rpm_header</ span > < span class ="p "> (</ span > < span class ="n "> candidate</ span > < span class ="p "> )</ span >
382+ < span class ="n "> rpm_signing_key</ span > < span class ="o "> =</ span > < span class ="n "> rpmlib</ span > < span class ="o "> .</ span > < span class ="n "> get_keys_from_header</ span > < span class ="p "> (</ span > < span class ="n "> header</ span > < span class ="p "> )</ span >
362383 < span class ="k "> break</ span >
363384
364385 < span class ="k "> if</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _signing_key</ span > < span class ="p "> :</ span >
0 commit comments