@@ -912,8 +912,9 @@ async def process_new_errata_packages(
912912 return packages , pkg_types
913913
914914
915- async def create_new_errata_record (errata : BaseErrataRecord ):
915+ async def create_new_errata_record (errata ):
916916 async with open_async_session (key = get_async_db_key ()) as session :
917+ errata = BaseErrataRecord (** errata )
917918 platform = await session .execute (
918919 select (models .Platform )
919920 .where (models .Platform .id == errata .platform_id )
@@ -1009,179 +1010,181 @@ async def create_new_errata_record(errata: BaseErrataRecord):
10091010 return db_errata
10101011
10111012
1012- async def create_errata_record (db : AsyncSession , errata : BaseErrataRecord ):
1013- platform = await db .execute (
1014- select (models .Platform )
1015- .where (models .Platform .id == errata .platform_id )
1016- .options (selectinload (models .Platform .repos ))
1017- )
1018- platform = platform .scalars ().first ()
1019- items_to_insert = []
1020- original_id = errata .id
1021-
1022- # Rebranding RHEL -> AlmaLinux
1023- for key in ("description" , "title" ):
1024- setattr (
1025- errata ,
1026- key ,
1027- debrand_description_and_title (getattr (errata , key )),
1013+ async def create_errata_record (errata ):
1014+ async with open_async_session (key = get_async_db_key ()) as session :
1015+ errata = BaseErrataRecord (** errata )
1016+ platform = await session .execute (
1017+ select (models .Platform )
1018+ .where (models .Platform .id == errata .platform_id )
1019+ .options (selectinload (models .Platform .repos ))
10281020 )
1029- alma_errata_id = re .sub (r"^RH" , "AL" , errata .id )
1030-
1031- # Check if errata refers to a module
1032- r = re .compile (r"Module ([\d\w\-\_]+:[\d\.\w]+) is enabled" )
1033- match = r .findall (str (errata .criteria ))
1034- # Ensure we get a module and is not the -devel one
1035- errata_module = None if not match else match [0 ].replace ("-devel:" , ":" )
1036-
1037- # Errata db record
1038- db_errata = models .NewErrataRecord (
1039- id = alma_errata_id ,
1040- freezed = errata .freezed ,
1041- platform_id = errata .platform_id ,
1042- module = errata_module ,
1043- release_status = ErrataReleaseStatus .NOT_RELEASED ,
1044- summary = None ,
1045- solution = None ,
1046- issued_date = errata .issued_date ,
1047- updated_date = errata .updated_date ,
1048- description = None ,
1049- original_description = errata .description ,
1050- title = None ,
1051- oval_title = get_oval_title (
1052- errata .title , alma_errata_id , errata .severity
1053- ),
1054- original_title = get_verbose_errata_title (errata .title , errata .severity ),
1055- contact_mail = platform .contact_mail ,
1056- status = errata .status ,
1057- version = errata .version ,
1058- severity = errata .severity ,
1059- rights = jinja2 .Template (platform .copyright ).render (
1060- year = datetime .datetime .utcnow ().year
1061- ),
1062- definition_id = errata .definition_id ,
1063- definition_version = errata .definition_version ,
1064- definition_class = errata .definition_class ,
1065- affected_cpe = errata .affected_cpe ,
1066- criteria = None ,
1067- original_criteria = errata .criteria ,
1068- tests = None ,
1069- original_tests = errata .tests ,
1070- objects = None ,
1071- original_objects = errata .objects ,
1072- states = None ,
1073- original_states = errata .states ,
1074- variables = None ,
1075- original_variables = errata .variables ,
1076- )
1077- items_to_insert .append (db_errata )
1021+ platform = platform .scalars ().first ()
1022+ items_to_insert = []
1023+ original_id = errata .id
10781024
1079- # References
1080- self_ref_exists = False
1081- for ref in errata .references :
1082- db_cve = None
1083- if ref .cve :
1084- db_cve = await db .execute (
1085- select (models .ErrataCVE ).where (
1086- models .ErrataCVE .id == ref .cve .id
1087- )
1025+ # Rebranding RHEL -> AlmaLinux
1026+ for key in ("description" , "title" ):
1027+ setattr (
1028+ errata ,
1029+ key ,
1030+ debrand_description_and_title (getattr (errata , key )),
10881031 )
1089- db_cve = db_cve .scalars ().first ()
1090- if db_cve is None :
1091- db_cve = models .ErrataCVE (
1092- id = ref .cve .id ,
1093- cvss3 = ref .cve .cvss3 ,
1094- cwe = ref .cve .cwe ,
1095- impact = ref .cve .impact ,
1096- public = ref .cve .public ,
1097- )
1098- items_to_insert .append (db_cve )
1099- ref_title = ""
1100- if ref .ref_type in (
1101- ErrataReferenceType .cve .value ,
1102- ErrataReferenceType .rhsa .value ,
1103- ):
1104- ref_title = ref .ref_id
1105- db_reference = models .NewErrataReference (
1106- href = ref .href ,
1107- ref_id = ref .ref_id ,
1108- ref_type = ref .ref_type ,
1109- title = ref_title ,
1110- cve = db_cve ,
1111- )
1112- if ref .ref_type == ErrataReferenceType .self_ref .value :
1113- self_ref_exists = True
1114- db_errata .references .append (db_reference )
1115- items_to_insert .append (db_reference )
1116- if not self_ref_exists :
1117- html_id = db_errata .id .replace (":" , "-" )
1118- self_ref = models .NewErrataReference (
1119- href = (
1120- "https://errata.almalinux.org/"
1121- f"{ platform .distr_version } /{ html_id } .html"
1032+ alma_errata_id = re .sub (r"^RH" , "AL" , errata .id )
1033+
1034+ # Check if errata refers to a module
1035+ r = re .compile (r"Module ([\d\w\-\_]+:[\d\.\w]+) is enabled" )
1036+ match = r .findall (str (errata .criteria ))
1037+ # Ensure we get a module and is not the -devel one
1038+ errata_module = None if not match else match [0 ].replace ("-devel:" , ":" )
1039+
1040+ # Errata db record
1041+ db_errata = models .NewErrataRecord (
1042+ id = alma_errata_id ,
1043+ freezed = errata .freezed ,
1044+ platform_id = errata .platform_id ,
1045+ module = errata_module ,
1046+ release_status = ErrataReleaseStatus .NOT_RELEASED ,
1047+ summary = None ,
1048+ solution = None ,
1049+ issued_date = errata .issued_date ,
1050+ updated_date = errata .updated_date ,
1051+ description = None ,
1052+ original_description = errata .description ,
1053+ title = None ,
1054+ oval_title = get_oval_title (
1055+ errata .title , alma_errata_id , errata .severity
11221056 ),
1123- ref_id = db_errata .id ,
1124- ref_type = ErrataReferenceType .self_ref ,
1125- title = db_errata .id ,
1057+ original_title = get_verbose_errata_title (errata .title , errata .severity ),
1058+ contact_mail = platform .contact_mail ,
1059+ status = errata .status ,
1060+ version = errata .version ,
1061+ severity = errata .severity ,
1062+ rights = jinja2 .Template (platform .copyright ).render (
1063+ year = datetime .datetime .utcnow ().year
1064+ ),
1065+ definition_id = errata .definition_id ,
1066+ definition_version = errata .definition_version ,
1067+ definition_class = errata .definition_class ,
1068+ affected_cpe = errata .affected_cpe ,
1069+ criteria = None ,
1070+ original_criteria = errata .criteria ,
1071+ tests = None ,
1072+ original_tests = errata .tests ,
1073+ objects = None ,
1074+ original_objects = errata .objects ,
1075+ states = None ,
1076+ original_states = errata .states ,
1077+ variables = None ,
1078+ original_variables = errata .variables ,
11261079 )
1127- db_errata .references .append (self_ref )
1128- items_to_insert .append (self_ref )
1080+ items_to_insert .append (db_errata )
11291081
1130- # Errata Packages
1131- search_params = prepare_search_params (errata )
1082+ # References
1083+ self_ref_exists = False
1084+ for ref in errata .references :
1085+ db_cve = None
1086+ if ref .cve :
1087+ db_cve = await session .execute (
1088+ select (models .ErrataCVE ).where (
1089+ models .ErrataCVE .id == ref .cve .id
1090+ )
1091+ )
1092+ db_cve = db_cve .scalars ().first ()
1093+ if db_cve is None :
1094+ db_cve = models .ErrataCVE (
1095+ id = ref .cve .id ,
1096+ cvss3 = ref .cve .cvss3 ,
1097+ cwe = ref .cve .cwe ,
1098+ impact = ref .cve .impact ,
1099+ public = ref .cve .public ,
1100+ )
1101+ items_to_insert .append (db_cve )
1102+ ref_title = ""
1103+ if ref .ref_type in (
1104+ ErrataReferenceType .cve .value ,
1105+ ErrataReferenceType .rhsa .value ,
1106+ ):
1107+ ref_title = ref .ref_id
1108+ db_reference = models .NewErrataReference (
1109+ href = ref .href ,
1110+ ref_id = ref .ref_id ,
1111+ ref_type = ref .ref_type ,
1112+ title = ref_title ,
1113+ cve = db_cve ,
1114+ )
1115+ if ref .ref_type == ErrataReferenceType .self_ref .value :
1116+ self_ref_exists = True
1117+ db_errata .references .append (db_reference )
1118+ items_to_insert .append (db_reference )
1119+ if not self_ref_exists :
1120+ html_id = db_errata .id .replace (":" , "-" )
1121+ self_ref = models .NewErrataReference (
1122+ href = (
1123+ "https://errata.almalinux.org/"
1124+ f"{ platform .distr_version } /{ html_id } .html"
1125+ ),
1126+ ref_id = db_errata .id ,
1127+ ref_type = ErrataReferenceType .self_ref ,
1128+ title = db_errata .id ,
1129+ )
1130+ db_errata .references .append (self_ref )
1131+ items_to_insert .append (self_ref )
11321132
1133- prod_repos_cache = await load_platform_packages (
1134- platform ,
1135- search_params ,
1136- False ,
1137- db_errata .module ,
1138- )
1139- pkg_types = []
1140- for package in errata .packages :
1141- db_package = models .NewErrataPackage (
1142- name = package .name ,
1143- version = package .version ,
1144- release = package .release ,
1145- epoch = package .epoch ,
1146- arch = package .arch ,
1147- source_srpm = None ,
1148- reboot_suggested = False ,
1149- )
1150- db_errata .packages .append (db_package )
1151- items_to_insert .append (db_package )
1152- # Create ErrataToAlbsPackages
1153- matching_packages , pkg_type = await get_matching_albs_packages (
1154- db , db_package , prod_repos_cache , db_errata .module
1133+ # Errata Packages
1134+ search_params = prepare_search_params (errata )
1135+
1136+ prod_repos_cache = await load_platform_packages (
1137+ platform ,
1138+ search_params ,
1139+ False ,
1140+ db_errata .module ,
11551141 )
1156- pkg_types .append (pkg_type )
1157- items_to_insert .extend (matching_packages )
1142+ pkg_types = []
1143+ for package in errata .packages :
1144+ db_package = models .NewErrataPackage (
1145+ name = package .name ,
1146+ version = package .version ,
1147+ release = package .release ,
1148+ epoch = package .epoch ,
1149+ arch = package .arch ,
1150+ source_srpm = None ,
1151+ reboot_suggested = False ,
1152+ )
1153+ db_errata .packages .append (db_package )
1154+ items_to_insert .append (db_package )
1155+ # Create ErrataToAlbsPackages
1156+ matching_packages , pkg_type = await get_matching_albs_packages (
1157+ session , db_package , prod_repos_cache , db_errata .module
1158+ )
1159+ pkg_types .append (pkg_type )
1160+ items_to_insert .extend (matching_packages )
11581161
1159- db .add_all (items_to_insert )
1160- await db .flush ()
1161- await db .refresh (db_errata )
1162- if not settings .github_integration_enabled :
1163- return db_errata
1162+ session .add_all (items_to_insert )
1163+ await session .flush ()
1164+ await session .refresh (db_errata )
1165+ if not settings .github_integration_enabled :
1166+ return db_errata
11641167
1165- try :
1166- github_client = await get_github_client ()
1167- await create_github_issue (
1168- client = github_client ,
1169- title = errata .title ,
1170- description = errata .description ,
1171- advisory_id = alma_errata_id ,
1172- original_id = original_id ,
1173- platform_name = platform .name ,
1174- severity = errata .severity ,
1175- packages = errata .packages ,
1176- platform_id = errata .platform_id ,
1177- find_packages_types = pkg_types ,
1178- )
1179- except Exception as err :
1180- logging .exception (
1181- "Cannot create GitHub issue: %s" ,
1182- err ,
1183- )
1184- return db_errata
1168+ try :
1169+ github_client = await get_github_client ()
1170+ await create_github_issue (
1171+ client = github_client ,
1172+ title = errata .title ,
1173+ description = errata .description ,
1174+ advisory_id = alma_errata_id ,
1175+ original_id = original_id ,
1176+ platform_name = platform .name ,
1177+ severity = errata .severity ,
1178+ packages = errata .packages ,
1179+ platform_id = errata .platform_id ,
1180+ find_packages_types = pkg_types ,
1181+ )
1182+ except Exception as err :
1183+ logging .exception (
1184+ "Cannot create GitHub issue: %s" ,
1185+ err ,
1186+ )
1187+ return db_errata
11851188
11861189
11871190async def get_errata_record (
0 commit comments