ReportOpSysRelease, ReportMantis, ReportReason, ReportURL, column_len) from pyfaf.ureport_compat import ureport1to2 from sqlalchemy.exc import IntegrityError log = log.getChildLogger(__name__) __all__ = [ "get_version", "save", "ureport2", "validate", "validate_attachment" ] UREPORT_CHECKER = DictChecker({ "os": DictChecker({ "name": StringChecker(allowed=list(systems.keys())), "version": StringChecker(pattern=r"^[a-zA-Z0-9_\.\-\+~]+$", maxlen=column_len(OpSysRelease, "version")), "architecture": StringChecker(pattern=r"^[a-zA-Z0-9_]+$", maxlen=column_len(Arch, "name")), # Anything else will be checked by the plugin }), # The checker for packages depends on operating system "packages": ListChecker(Checker(object)), "problem": DictChecker({ "type": StringChecker(allowed=list(problemtypes.keys())),
ReportMantis, ReportReason, ReportURL, column_len) from pyfaf.ureport_compat import ureport1to2 from sqlalchemy.exc import IntegrityError log = log.getChildLogger(__name__) __all__ = ["get_version", "save", "ureport2", "validate", "validate_attachment"] UREPORT_CHECKER = DictChecker({ "os": DictChecker({ "name": StringChecker(allowed=systems.keys()), "version": StringChecker(pattern=r"^[a-zA-Z0-9_\.\-\+~]+$", maxlen=column_len(OpSysRelease, "version")), "architecture": StringChecker(pattern=r"^[a-zA-Z0-9_]+$", maxlen=column_len(Arch, "name")), # Anything else will be checked by the plugin }), # The checker for packages depends on operating system "packages": ListChecker(Checker(object)), "problem": DictChecker({ "type": StringChecker(allowed=problemtypes.keys()), # Anything else will be checked by the plugin }),
def run(self, cmdline, db): # nobody will write the full name if cmdline.OPSYS == "rhel": cmdline.OPSYS = "Red Hat Enterprise Linux" # check if operating system is known if not get_opsys_by_name(db, cmdline.OPSYS): self.log_error( "Selected operating system '{0}' is not supported.".format( cmdline.OPSYS)) return 1 else: self.log_info("Selected operating system: '{0}'".format( cmdline.OPSYS)) # check if release is known opsysrelease = get_osrelease(db, cmdline.OPSYS, cmdline.RELEASE) if not opsysrelease: self.log_error("Selected release '{0}' is not supported.".format( cmdline.RELEASE)) return 1 else: self.log_info("Selected release: '{0}'".format(cmdline.RELEASE)) # check if architecture is known arch = get_arch_by_name(db, cmdline.ARCH) if not arch: self.log_error( "Selected architecture '{0}' is not supported.".format( cmdline.ARCH)) return 1 else: self.log_info("Selected architecture: '{0}'".format(cmdline.ARCH)) # when release-builds argument specified if cmdline.released_builds: self.log_info("Assigning released builds for '{0} {1}'".format( cmdline.OPSYS, cmdline.RELEASE)) opsys = self._edit_opsys(cmdline.OPSYS) if not opsys in systems.keys(): self.log_error( "There are no known released builds for '{0}'".format( cmdline.OPSYS)) return 1 for build in systems[opsys].get_released_builds(cmdline.RELEASE): found_build = (db.session.query(Build).filter( Build.base_package_name == build["name"]).filter( Build.version == build["version"]).filter( Build.release == build["release"]).filter( Build.epoch == build["epoch"]).first()) if found_build: self._add_into_build_opsysrelease_arch( db, found_build, opsysrelease, arch) # when expression argument was passed if cmdline.expression: self.log_info("Selecting builds by expression: '{0}'".format( cmdline.expression)) found_builds = (db.session.query(Build).filter( Build.release.like("%{0}".format(cmdline.expression))).all()) for build in found_builds: self._add_into_build_opsysrelease_arch(db, build, opsysrelease, arch) db.session.flush()
def run(self, cmdline, db): if not cmdline.opsys: cmdline.opsys = list(systems.keys()) opsyss = [] for shortname in cmdline.opsys: if shortname not in systems: self.log_warn("Operating system '{0}' is not installed" .format(shortname)) continue opsys = systems[shortname] db_opsys = get_opsys_by_name(db, opsys.nice_name) if db_opsys is None: self.log_warn("Operating system '{0}' is not initialized" .format(shortname)) continue opsyss.append((opsys, db_opsys)) new_associates = {} i = 0 for (opsys, db_opsys) in opsyss: i += 1 self.log_info("[{0} / {1}] Processing {2}" .format(i, len(opsyss), opsys.nice_name)) j = 0 components = get_components_by_opsys(db, db_opsys).all() for db_component in components: j += 1 name = db_component.name self.log_debug(" [{0} / {1}] Processing component '{2}'" .format(j, len(components), name)) try: acls = opsys.get_component_acls(name) except TypeError: self.log_warn("Error getting ACLs.") continue acl_lists = { "watchbugzilla": [], "commit": [] } for associate in acls: for permission in acl_lists: if acls[associate].get(permission, False): acl_lists[permission].append(associate) for permission in acl_lists: k = 0 for associate in acl_lists[permission]: k += 1 self.log_debug(" [{0} / {1}] Processing associate '{2}' " "permission {3}" .format(k, len(acl_lists[permission]), associate, permission)) db_associate = get_associate_by_name(db, associate) if db_associate is None: if associate in new_associates: db_associate = new_associates[associate] else: db_associate = AssociatePeople() db_associate.name = associate db.session.add(db_associate) new_associates[associate] = db_associate self.log_info("Adding a new associate '{0}'" .format(associate)) associates = [a.associates for a in db_component.associates if a.permission == permission] if db_associate not in associates: db_associate_comp = OpSysComponentAssociate() db_associate_comp.component = db_component db_associate_comp.associates = db_associate db_associate_comp.permission = permission db.session.add(db_associate_comp) self.log_info("Assigning associate '{0}' to component " "'{1}' with permission {2}" .format(associate, name, permission)) for db_associate_comp in db_component.associates: if (db_associate_comp.permission == permission and db_associate_comp.associates.name not in acl_lists[permission]): db.session.delete(db_associate_comp) self.log_info("Removing associate '{0}' permission " "{1} from component '{2}'" .format(db_associate_comp.associates.name, permission, name)) db.session.flush()
def run(self, cmdline, db): # nobody will write the full name if cmdline.OPSYS == "rhel": cmdline.OPSYS = "Red Hat Enterprise Linux" # check if operating system is known if not get_opsys_by_name(db, cmdline.OPSYS): self.log_error("Selected operating system '{0}' is not supported." .format(cmdline.OPSYS)) return 1 self.log_info("Selected operating system: '{0}'" .format(cmdline.OPSYS)) # check if release is known opsysrelease = get_osrelease(db, cmdline.OPSYS, cmdline.RELEASE) if not opsysrelease: self.log_error("Selected release '{0}' is not supported." .format(cmdline.RELEASE)) return 1 self.log_info("Selected release: '{0}'".format(cmdline.RELEASE)) # check if architecture is known arch = get_arch_by_name(db, cmdline.ARCH) if not arch: self.log_error("Selected architecture '{0}' is not supported." .format(cmdline.ARCH)) return 1 self.log_info("Selected architecture: '{0}'".format(cmdline.ARCH)) # when release-builds argument specified if cmdline.released_builds: self.log_info("Assigning released builds for '{0} {1}'" .format(cmdline.OPSYS, cmdline.RELEASE)) opsys = self._edit_opsys(cmdline.OPSYS) if opsys not in systems.keys(): self.log_error("There are no known released builds for '{0}'" .format(cmdline.OPSYS)) return 1 for build in systems[opsys].get_released_builds(cmdline.RELEASE): found_build = (db.session.query(Build) .filter(Build.base_package_name == build["name"]) .filter(Build.version == build["version"]) .filter(Build.release == build["release"]) .filter(Build.epoch == build["epoch"]) .first()) if found_build: self._add_into_build_opsysrelease_arch(db, found_build, opsysrelease, arch) # when expression argument was passed if cmdline.expression: self.log_info("Selecting builds by expression: '{0}'" .format(cmdline.expression)) found_builds = (db.session.query(Build) .filter(Build.release.like("%{0}" .format(cmdline.expression))) .all()) for build in found_builds: self._add_into_build_opsysrelease_arch(db, build, opsysrelease, arch) db.session.flush() return 0
def run(self, cmdline, db) -> None: if not cmdline.opsys: cmdline.opsys = list(systems.keys()) opsyss = [] for shortname in cmdline.opsys: if shortname not in systems: self.log_warn("Operating system '{0}' is not installed".format( shortname)) continue opsys = systems[shortname] db_opsys = get_opsys_by_name(db, opsys.nice_name) if db_opsys is None: self.log_warn( "Operating system '{0}' is not initialized".format( shortname)) continue opsyss.append((opsys, db_opsys)) new_associates: Dict[str, AssociatePeople] = {} opsyss_len = len(opsyss) for i, (opsys, db_opsys) in enumerate(opsyss, start=1): self.log_info("[{0} / {1}] Processing {2}".format( i, opsyss_len, opsys.nice_name)) components = get_components_by_opsys(db, db_opsys).all() components_len = len(components) for j, db_component in enumerate(components, start=1): name = db_component.name self.log_debug("\t[%d / %d] Processing component '%s'", j, components_len, name) try: acls = opsys.get_component_acls(name) except TypeError: self.log_warn("Error getting ACLs.") continue acl_lists: Dict[str, List[str]] = { "watchbugzilla": [], "commit": [] } for associate_name, associate_perms in acls.items(): for permission, permission_members in acl_lists.items(): if associate_perms.get(permission, False): permission_members.append(associate_name) for permission, permission_members in acl_lists.items(): acl_list_perm_len = len(permission_members) for k, associate in enumerate(permission_members, start=1): self.log_debug( "\t[%d / %d] Processing associate '%s' permission %s", k, acl_list_perm_len, associate, permission) db_associate = get_associate_by_name(db, associate) if db_associate is None: if associate in new_associates: db_associate = new_associates[associate] else: db_associate = AssociatePeople() db_associate.name = associate db.session.add(db_associate) new_associates[associate] = db_associate self.log_info( "Adding a new associate '{0}'".format( associate)) associates = [ a.associates for a in db_component.associates if a.permission == permission ] if db_associate not in associates: db_associate_comp = OpSysComponentAssociate() db_associate_comp.component = db_component db_associate_comp.associates = db_associate db_associate_comp.permission = permission db.session.add(db_associate_comp) self.log_info( "Assigning associate '{0}' to component " "'{1}' with permission {2}".format( associate, name, permission)) for db_associate_comp in db_component.associates: if (db_associate_comp.permission == permission and db_associate_comp.associates.name not in permission_members): db.session.delete(db_associate_comp) self.log_info( "Removing associate '{0}' permission " "{1} from component '{2}'".format( db_associate_comp.associates.name, permission, name)) db.session.flush()
def run(self, cmdline, db): if len(cmdline.opsys) == 0: cmdline.opsys = systems.keys() opsyss = [] for shortname in cmdline.opsys: if shortname not in systems: self.log_warn("Operating system '{0}' is not installed".format( shortname)) continue opsys = systems[shortname] db_opsys = get_opsys_by_name(db, opsys.nice_name) if db_opsys is None: self.log_warn( "Operating system '{0}' is not initialized".format( shortname)) continue opsyss.append((opsys, db_opsys)) new_associates = {} i = 0 for (opsys, db_opsys) in opsyss: i += 1 self.log_info("[{0} / {1}] Processing {2}".format( i, len(opsyss), opsys.nice_name)) j = 0 components = get_components_by_opsys(db, db_opsys).all() for db_component in components: j += 1 name = db_component.name self.log_debug( " [{0} / {1}] Processing component '{2}'".format( j, len(components), name)) try: acls = opsys.get_component_acls(name) except TypeError: self.log_warn("Error getting ACLs.") continue acl_lists = {"watchbugzilla": [], "commit": []} for associate in acls.keys(): for permission in acl_lists.keys(): if acls[associate].get(permission, False): acl_lists[permission].append(associate) for permission in acl_lists.keys(): k = 0 for associate in acl_lists[permission]: k += 1 self.log_debug( " [{0} / {1}] Processing associate '{2}' " "permission {3}".format(k, len(acl_lists[permission]), associate, permission)) db_associate = get_associate_by_name(db, associate) if db_associate is None: if associate in new_associates: db_associate = new_associates[associate] else: db_associate = AssociatePeople() db_associate.name = associate db.session.add(db_associate) new_associates[associate] = db_associate self.log_info( "Adding a new associate '{0}'".format( associate)) associates = [ a.associates for a in db_component.associates if a.permission == permission ] if db_associate not in associates: db_associate_comp = OpSysComponentAssociate() db_associate_comp.component = db_component db_associate_comp.associates = db_associate db_associate_comp.permission = permission db.session.add(db_associate_comp) self.log_info( "Assigning associate '{0}' to component " "'{1}' with permission {2}".format( associate, name, permission)) for db_associate_comp in db_component.associates: if (db_associate_comp.permission == permission and db_associate_comp.associates.name not in acl_lists[permission]): db.session.delete(db_associate_comp) self.log_info( "Removing associate '{0}' permission " "{1} from component '{2}'".format( db_associate_comp.associates.name, permission, name)) db.session.flush()