def notify(args): apiurl = osc.conf.config['apiurl'] # devel_projects_get() only works for Factory as such # devel_project_fallback() must be used on a per package basis. packages = meta_get_packagelist(apiurl, args.project) maintainer_map = {} for package in packages: devel_project, devel_package = devel_project_fallback(apiurl, args.project, package) if devel_project and devel_package: devel_package_identifier = '/'.join([devel_project, devel_package]) userids = maintainers_get(apiurl, devel_project, devel_package) for userid in userids: maintainer_map.setdefault(userid, set()) maintainer_map[userid].add(devel_package_identifier) Config(args.project) # Ensure mail-* options are loaded for mail_send(). subject = 'Packages you maintain are present in {}'.format(args.project) for userid, package_identifiers in maintainer_map.items(): email = entity_email(apiurl, userid) message = 'The following packages you maintain are in {}:\n\n- {}'.format( args.project, '\n- '.join(sorted(package_identifiers))) mail_send(args.project, email, subject, message, dry=args.dry) print('notified {} of {} packages'.format(userid, len(package_identifiers)))
def osrt_origin_report(apiurl, opts, *args): lookup = osrt_origin_lookup(apiurl, opts.project, opts.force_refresh) origin_count = osrt_origin_report_count(lookup) columns = ['origin', 'count', 'percent'] column_formats = [ '{:<' + str(osrt_origin_max_key(origin_count, 6)) + '}', '{:>5}', '{:>7}', ] if opts.diff: columns.insert(2, 'change') column_formats.insert(2, '{:>6}') lookup_previous = osrt_origin_lookup(apiurl, opts.project, previous=True) if lookup_previous is not None: origin_count_previous = osrt_origin_report_count(lookup_previous) origin_count_change = osrt_origin_report_count_diff( origin_count, origin_count_previous) package_diff = osrt_origin_report_diff(lookup, lookup_previous) else: origin_count_change = {} package_diff = [] line_format = ' '.join(column_formats) report = [line_format.format(*columns)] total = len(lookup) for origin, count in sorted(origin_count.items(), key=lambda x: x[1], reverse=True): values = [origin, count, round(float(count) / total * 100, 2)] if opts.diff: values.insert(2, origin_count_change.get(origin, 0)) report.append(line_format.format(*values)) if opts.diff and len(package_diff): line_format = '{:<' + str(osrt_origin_max_key(package_diff, 7)) + '} ' + \ ' '.join([column_formats[0]] * 2) report.append('') report.append( line_format.format('package', 'origin', 'origin previous')) for package, origins in sorted(package_diff.items()): report.append(line_format.format(package, *origins)) body = '\n'.join(report) print(body) if opts.mail: mail_send(apiurl, opts.project, 'release-list', '{} origin report'.format(opts.project), body, None, dry=opts.dry)
def notify(args): import smtplib apiurl = osc.conf.config['apiurl'] # devel_projects_get() only works for Factory as such # devel_project_fallback() must be used on a per package basis. packages = args.packages if not packages: packages = package_list_kind_filtered(apiurl, args.project) maintainer_map = {} for package in packages: devel_project, devel_package = devel_project_fallback( apiurl, args.project, package) if devel_project and devel_package: devel_package_identifier = '/'.join([devel_project, devel_package]) userids = maintainers_get(apiurl, devel_project, devel_package) for userid in userids: maintainer_map.setdefault(userid, set()) maintainer_map[userid].add(devel_package_identifier) subject = 'Packages you maintain are present in {}'.format(args.project) for userid, package_identifiers in maintainer_map.items(): email = entity_email(apiurl, userid) message = """This is a friendly reminder about your packages in {}. Please verify that the included packages are working as intended and have versions appropriate for a stable release. Changes may be submitted until April 26th [at the latest]. Keep in mind that some packages may be shared with SUSE Linux Enterprise. Concerns with those should be raised via Bugzilla. Please contact [email protected] if your package needs special attention by the release team. According to the information in OBS ("osc maintainer") you are in charge of the following packages: - {}""".format(args.project, '\n- '.join(sorted(package_identifiers))) log = 'notified {} of {} packages'.format(userid, len(package_identifiers)) try: mail_send(apiurl, args.project, email, subject, message, dry=args.dry) print(log) except smtplib.SMTPRecipientsRefused: print('[FAILED ADDRESS] {} ({})'.format(log, email)) except smtplib.SMTPException as e: print('[FAILED SMTP] {} ({})'.format(log, e))
def osrt_origin_report(apiurl, opts, *args): lookup = osrt_origin_lookup(apiurl, opts.project, opts.force_refresh) origin_count = osrt_origin_report_count(lookup) columns = ['origin', 'count', 'percent'] column_formats = [ '{:<' + str(osrt_origin_max_key(origin_count, 6)) + '}', '{:>5}', '{:>7}', ] if opts.diff: columns.insert(2, 'change') column_formats.insert(2, '{:>6}') lookup_previous = osrt_origin_lookup(apiurl, opts.project, previous=True) if lookup_previous is not None: origin_count_previous = osrt_origin_report_count(lookup_previous) origin_count_change = osrt_origin_report_count_diff(origin_count, origin_count_previous) package_diff = osrt_origin_report_diff(lookup, lookup_previous) else: origin_count_change = {} package_diff = [] line_format = ' '.join(column_formats) report = [line_format.format(*columns)] total = len(lookup) for origin, count in sorted(origin_count.items(), key=lambda x : x[1], reverse=True): values = [origin, count, round(float(count) / total * 100, 2)] if opts.diff: values.insert(2, origin_count_change.get(origin, 0)) report.append(line_format.format(*values)) if opts.diff and len(package_diff): line_format = '{:<' + str(osrt_origin_max_key(package_diff, 7)) + '} ' + \ ' '.join([column_formats[0]] * 2) report.append('') report.append(line_format.format('package', 'origin', 'origin previous')) for package, origins in sorted(package_diff.items()): report.append(line_format.format(package, *origins)) body = '\n'.join(report) print(body) if opts.mail: mail_send(apiurl, opts.project, 'release-list', '{} origin report'.format(opts.project), body, None, dry=opts.dry)
def notify(args): import smtplib apiurl = osc.conf.config['apiurl'] # devel_projects_get() only works for Factory as such # devel_project_fallback() must be used on a per package basis. packages = args.packages if not packages: packages = package_list_without_links(apiurl, args.project) maintainer_map = {} for package in packages: devel_project, devel_package = devel_project_fallback(apiurl, args.project, package) if devel_project and devel_package: devel_package_identifier = '/'.join([devel_project, devel_package]) userids = maintainers_get(apiurl, devel_project, devel_package) for userid in userids: maintainer_map.setdefault(userid, set()) maintainer_map[userid].add(devel_package_identifier) subject = 'Packages you maintain are present in {}'.format(args.project) for userid, package_identifiers in maintainer_map.items(): email = entity_email(apiurl, userid) message = """This is a friendly reminder about your packages in {}. Please verify that the included packages are working as intended and have versions appropriate for a stable release. Changes may be submitted until April 26th [at the latest]. Keep in mind that some packages may be shared with SUSE Linux Enterprise. Concerns with those should be raised via Bugzilla. Please contact [email protected] if your package needs special attention by the release team. According to the information in OBS ("osc maintainer") you are in charge of the following packages: - {}""".format( args.project, '\n- '.join(sorted(package_identifiers))) log = 'notified {} of {} packages'.format(userid, len(package_identifiers)) try: mail_send(apiurl, args.project, email, subject, message, dry=args.dry) print(log) except smtplib.SMTPRecipientsRefused as e: print('[FAILED ADDRESS] {} ({})'.format(log, email)) except smtplib.SMTPException as e: print('[FAILED SMTP] {} ({})'.format(log, e))