Example #1
0
    def lint(self, jira):
        """Run lint check on a JIRA."""
        if not self.enabled:
            return
        if len(jira.get_release_note()) == 0:
            if self._filters["incompatible"] and jira.get_incompatible_change(
            ):
                self._warning_count += 1
                self._lint_message += "\nWARNING: incompatible change %s lacks release notes." % \
                                (sanitize_text(jira.get_id()))
            if self._filters["important"] and jira.get_important():
                self._warning_count += 1
                self._lint_message += "\nWARNING: important issue %s lacks release notes." % \
                                (sanitize_text(jira.get_id()))

        if self._check_version_string(jira):
            self._warning_count += 1
            self._lint_message += "\nWARNING: Version string problem for %s " % jira.get_id(
            )

        if self._check_missing_component(jira) or self._check_missing_assignee(
                jira):
            self._error_count += 1
            error_message = []
            if self._check_missing_component(jira):
                error_message.append("component")
            if self._check_missing_assignee(jira):
                error_message.append("assignee")
            self._lint_message += "\nERROR: missing %s for %s " \
                            % (" and ".join(error_message), jira.get_id())
 def write_output_for_country(self, output, country=None, file_name=None):
     if file_name is None:
         file_name = self.get_output_file("default")
     for row in output:
         if country is None:
             country_str = row.get("country", "")
         else:
             country_str = country
         region = sanitize_text(row.get("region", ""))
         lat, long = self.geojson_service.get_lat_long(country_str, region)
         record = dict(country=sanitize_text(country_str),
                       region=region,
                       infected=sanitize_digit(row.get("infected", "")),
                       deaths=sanitize_digit(row.get("deaths", "")),
                       recoveries=sanitize_digit(row.get("recoveries", "")),
                       long=long,
                       lat=lat,
                       last_updated=self.last_updated.strftime("%Y-%m-%d %H:%M:%S"))
         if country is None:
             record["active"] = sanitize_digit(row.get("active", ""))
             record["total_per_mil"] = sanitize_digit(row.get("total_per_mil", ""))
             record["deaths_per_mil"] = sanitize_digit(row.get("deaths_per_mil", ""))
             record["total_tests"] = sanitize_digit(row.get("total_tests", ""))
             record["active_per_mil"] = sanitize_digit(row.get("active_per_mil", ""))
             record["recovered_per_mil"] = sanitize_digit(row.get("recovered_per_mil", ""))
             record["tests_per_mil"] = sanitize_digit(row.get("tests_per_mil", ""))
             record["new_cases"] = sanitize_digit(row.get("new_cases", ""))
             record["new_deaths"] = sanitize_digit(row.get("new_deaths", ""))
         write_record_to_output(record, file_name)
Example #3
0
    def lint(self, jira):
        """Run lint check on a JIRA."""
        if not self.enabled:
            return
        if len(jira.get_release_note()) == 0:
            if self._filters["incompatible"] and jira.get_incompatible_change():
                self._warning_count += 1
                self._lint_message += "\nWARNING: incompatible change %s lacks release notes." % \
                                (sanitize_text(jira.get_id()))
            if self._filters["important"] and jira.get_important():
                self._warning_count += 1
                self._lint_message += "\nWARNING: important issue %s lacks release notes." % \
                                (sanitize_text(jira.get_id()))

        if self._check_version_string(jira):
            self._warning_count += 1
            self._lint_message += "\nWARNING: Version string problem for %s " % jira.get_id(
            )

        if self._check_missing_component(jira) or self._check_missing_assignee(
                jira):
            self._error_count += 1
            error_message = []
            if self._check_missing_component(jira):
                error_message.append("component")
            if self._check_missing_assignee(jira):
                error_message.append("assignee")
            self._lint_message += "\nERROR: missing %s for %s " \
                            % (" and ".join(error_message), jira.get_id())
Example #4
0
def get_acronyms(abstract_text, data_description_text_list):
    """
    Given an abstract and a description list, this method finds all the relevant acronyms that are
    available in the description.
    """
    potential_acronyms = get_potential_acronyms(sanitize_text(abstract_text))
    return list(
        get_valid_acronyms(potential_acronyms, data_description_text_list))
 def get_features_for_row(self,
                          country,
                          region,
                          infected,
                          deaths,
                          recoveries,
                          long,
                          lat,
                          last_updated,
                          active="",
                          total_per_mil="",
                          deaths_per_mil="",
                          total_tests=""):
     if active:
         current = str(active)
     else:
         try:
             current = int(infected) - int(deaths) - int(recoveries)
             current = str(current)
         except Exception as e:
             current = ""
     if lat == "" or long == "":
         lat, long = self.get_lat_long(country, region)
     if not lat:
         return
     point = Point((float(long), float(lat)))
     data_type = "Regional" if region else "National"
     feature = Feature(geometry=point,
                       properties={
                           "Data Type": data_type,
                           "Country": sanitize_text(country),
                           "City": sanitize_text(region),
                           "Current Cases": sanitize_digit(current),
                           "Total Cases": sanitize_digit(infected),
                           "Deceased": sanitize_digit(deaths),
                           "Recovered": sanitize_digit(recoveries),
                           "Total Cases/1M pop":
                           sanitize_digit(total_per_mil),
                           "Deaths/1M pop": sanitize_digit(deaths_per_mil),
                           "Total Tests": sanitize_digit(total_tests),
                           "Last Updated": last_updated
                       })
     return feature
Example #6
0
def main():
    options = parse_args()
    if options.release_version:
        with open(os.path.join(os.path.dirname(__file__), "../VERSION"),
                  'r') as ver_file:
            print ver_file.read()
        sys.exit(0)

    if options.output_directory is not None:
        # Create the output directory if it does not exist.
        # Equivalent to `mkdir -p`.
        try:
            os.makedirs(options.output_directory)
        except OSError as exc:
            if exc.errno == errno.EEXIST and os.path.isdir(
                    options.output_directory):
                pass
            else:
                print "Unable to create output directory %s: %s" % \
                        (options.output_directory, exc.message)
                sys.exit(1)
        os.chdir(options.output_directory)

    if options.base_url is not None:
        global JIRA_BASE_URL
        JIRA_BASE_URL = options.base_url

    if options.incompatible_label is not None:
        global BACKWARD_INCOMPATIBLE_LABEL
        BACKWARD_INCOMPATIBLE_LABEL = options.incompatible_label

    projects = options.projects

    if options.range is True:
        versions = [
            Version(v)
            for v in GetVersions(options.versions, projects).getlist()
        ]
    else:
        versions = [Version(v) for v in options.versions]
    versions.sort()

    global SORTTYPE
    SORTTYPE = options.sorttype
    global SORTORDER
    SORTORDER = options.sortorder

    if options.title is None:
        title = projects[0]
    else:
        title = options.title

    if options.retries is not None:
        global NUM_RETRIES
        NUM_RETRIES = options.retries[0]

    haderrors = False

    for version in versions:
        vstr = str(version)
        linter = Linter(vstr, options)
        jlist = sorted(JiraIter(vstr, projects))
        if len(jlist) == 0:
            print "There is no issue which has the specified version: %s" % version
            continue

        if vstr in RELEASE_VERSION:
            reldate = RELEASE_VERSION[vstr]
        elif options.usetoday:
            reldate = strftime("%Y-%m-%d", gmtime())
        else:
            reldate = "Unreleased (as of %s)" % strftime("%Y-%m-%d", gmtime())

        if not os.path.exists(vstr):
            os.mkdir(vstr)

        reloutputs = Outputs("%(ver)s/RELEASENOTES.%(ver)s.md",
                             "%(ver)s/RELEASENOTES.%(key)s.%(ver)s.md", [], {
                                 "ver": version,
                                 "date": reldate,
                                 "title": title
                             })
        choutputs = Outputs("%(ver)s/CHANGES.%(ver)s.md",
                            "%(ver)s/CHANGES.%(key)s.%(ver)s.md", [], {
                                "ver": version,
                                "date": reldate,
                                "title": title
                            })

        if options.license is True:
            reloutputs.write_all(ASF_LICENSE)
            choutputs.write_all(ASF_LICENSE)

        relhead = '# %(title)s %(key)s %(ver)s Release Notes\n\n' \
                  'These release notes cover new developer and user-facing ' \
                  'incompatibilities, important issues, features, and major improvements.\n\n'
        chhead = '# %(title)s Changelog\n\n' \
                 '## Release %(ver)s - %(date)s\n'\
                 '\n'

        reloutputs.write_all(relhead)
        choutputs.write_all(chhead)

        incompatlist = []
        importantlist = []
        buglist = []
        improvementlist = []
        newfeaturelist = []
        subtasklist = []
        tasklist = []
        testlist = []
        otherlist = []

        for jira in jlist:
            if jira.get_incompatible_change():
                incompatlist.append(jira)
            elif jira.get_important():
                importantlist.append(jira)
            elif jira.get_type() == "Bug":
                buglist.append(jira)
            elif jira.get_type() == "Improvement":
                improvementlist.append(jira)
            elif jira.get_type() == "New Feature":
                newfeaturelist.append(jira)
            elif jira.get_type() == "Sub-task":
                subtasklist.append(jira)
            elif jira.get_type() == "Task":
                tasklist.append(jira)
            elif jira.get_type() == "Test":
                testlist.append(jira)
            else:
                otherlist.append(jira)

            line = '* [%s](' % (sanitize_text(jira.get_id())) + JIRA_BASE_URL + \
                   '/browse/%s) | *%s* | **%s**\n' \
                   % (sanitize_text(jira.get_id()),
                      sanitize_text(jira.get_priority()), sanitize_text(jira.get_summary()))

            if len(jira.get_release_note()) > 0 or \
               jira.get_incompatible_change() or jira.get_important():
                reloutputs.write_key_raw(jira.get_project(), "\n---\n\n")
                reloutputs.write_key_raw(jira.get_project(), line)
                if len(jira.get_release_note()) == 0:
                    line = '\n**WARNING: No release note provided for this change.**\n\n'
                else:
                    line = '\n%s\n\n' % (processrelnote(
                        jira.get_release_note()))
                reloutputs.write_key_raw(jira.get_project(), line)

            linter.lint(jira)

        if linter.enabled:
            print linter.message()
            if linter.had_errors():
                haderrors = True
                shutil.rmtree(vstr)
                continue

        reloutputs.write_all("\n\n")
        reloutputs.close()

        if options.skip_credits:
            CHANGEHDR1 = "| JIRA | Summary | Priority | " + \
                     "Component |\n"
            CHANGEHDR2 = "|:---- |:---- | :--- |:---- |\n"
        else:
            CHANGEHDR1 = "| JIRA | Summary | Priority | " + \
                         "Component | Reporter | Contributor |\n"
            CHANGEHDR2 = "|:---- |:---- | :--- |:---- |:---- |:---- |\n"

        if incompatlist:
            choutputs.write_all("### INCOMPATIBLE CHANGES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(incompatlist, options.skip_credits)

        if importantlist:
            choutputs.write_all("\n\n### IMPORTANT ISSUES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(importantlist, options.skip_credits)

        if newfeaturelist:
            choutputs.write_all("\n\n### NEW FEATURES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(newfeaturelist, options.skip_credits)

        if improvementlist:
            choutputs.write_all("\n\n### IMPROVEMENTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(improvementlist, options.skip_credits)

        if buglist:
            choutputs.write_all("\n\n### BUG FIXES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(buglist, options.skip_credits)

        if testlist:
            choutputs.write_all("\n\n### TESTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(testlist, options.skip_credits)

        if subtasklist:
            choutputs.write_all("\n\n### SUB-TASKS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(subtasklist, options.skip_credits)

        if tasklist or otherlist:
            choutputs.write_all("\n\n### OTHER:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(otherlist, options.skip_credits)
            choutputs.write_list(tasklist, options.skip_credits)

        choutputs.write_all("\n\n")
        choutputs.close()

    if options.index:
        buildindex(title, options.license)
        buildreadme(title, options.license)

    if haderrors is True:
        sys.exit(1)
Example #7
0
def main():
    options = parse_args()
    if options.release_version:
        with open(
                os.path.join(
                    os.path.dirname(__file__), "../VERSION"), 'r') as ver_file:
            print ver_file.read()
        sys.exit(0)

    if options.output_directory is not None:
        # Create the output directory if it does not exist.
        # Equivalent to `mkdir -p`.
        try:
            os.makedirs(options.output_directory)
        except OSError as exc:
            if exc.errno == errno.EEXIST and os.path.isdir(
                    options.output_directory):
                pass
            else:
                print "Unable to create output directory %s: %s" % \
                        (options.output_directory, exc.message)
                sys.exit(1)
        os.chdir(options.output_directory)

    if options.base_url is not None:
        global JIRA_BASE_URL
        JIRA_BASE_URL = options.base_url

    if options.incompatible_label is not None:
        global BACKWARD_INCOMPATIBLE_LABEL
        BACKWARD_INCOMPATIBLE_LABEL = options.incompatible_label

    proxy = urllib2.ProxyHandler()
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)

    projects = options.projects

    if options.range is True:
        versions = [Version(v)
                    for v in GetVersions(options.versions, projects).getlist()]
    else:
        versions = [Version(v) for v in options.versions]
    versions.sort()

    global SORTTYPE
    SORTTYPE = options.sorttype
    global SORTORDER
    SORTORDER = options.sortorder

    if options.title is None:
        title = projects[0]
    else:
        title = options.title

    if options.retries is not None:
        global NUM_RETRIES
        NUM_RETRIES = options.retries[0]

    haderrors = False

    for version in versions:
        vstr = str(version)
        linter = Linter(vstr, options)
        jlist = sorted(JiraIter(vstr, projects))
        if len(jlist) == 0:
            print "There is no issue which has the specified version: %s" % version
            continue

        if vstr in RELEASE_VERSION:
            reldate = RELEASE_VERSION[vstr]
        elif options.usetoday:
            reldate = strftime("%Y-%m-%d", gmtime())
        else:
            reldate = "Unreleased (as of %s)" % strftime("%Y-%m-%d", gmtime())

        if not os.path.exists(vstr):
            os.mkdir(vstr)

        reloutputs = Outputs("%(ver)s/RELEASENOTES.%(ver)s.md",
                             "%(ver)s/RELEASENOTES.%(key)s.%(ver)s.md", [],
                             {"ver": version,
                              "date": reldate,
                              "title": title})
        choutputs = Outputs("%(ver)s/CHANGES.%(ver)s.md",
                            "%(ver)s/CHANGES.%(key)s.%(ver)s.md", [],
                            {"ver": version,
                             "date": reldate,
                             "title": title})

        if options.license is True:
            reloutputs.write_all(ASF_LICENSE)
            choutputs.write_all(ASF_LICENSE)

        relhead = '# %(title)s %(key)s %(ver)s Release Notes\n\n' \
                  'These release notes cover new developer and user-facing ' \
                  'incompatibilities, important issues, features, and major improvements.\n\n'
        chhead = '# %(title)s Changelog\n\n' \
                 '## Release %(ver)s - %(date)s\n'\
                 '\n'

        reloutputs.write_all(relhead)
        choutputs.write_all(chhead)

        incompatlist = []
        importantlist = []
        buglist = []
        improvementlist = []
        newfeaturelist = []
        subtasklist = []
        tasklist = []
        testlist = []
        otherlist = []

        for jira in jlist:
            if jira.get_incompatible_change():
                incompatlist.append(jira)
            elif jira.get_important():
                importantlist.append(jira)
            elif jira.get_type() == "Bug":
                buglist.append(jira)
            elif jira.get_type() == "Improvement":
                improvementlist.append(jira)
            elif jira.get_type() == "New Feature":
                newfeaturelist.append(jira)
            elif jira.get_type() == "Sub-task":
                subtasklist.append(jira)
            elif jira.get_type() == "Task":
                tasklist.append(jira)
            elif jira.get_type() == "Test":
                testlist.append(jira)
            else:
                otherlist.append(jira)

            line = '* [%s](' % (sanitize_text(jira.get_id())) + JIRA_BASE_URL + \
                   '/browse/%s) | *%s* | **%s**\n' \
                   % (sanitize_text(jira.get_id()),
                      sanitize_text(jira.get_priority()), sanitize_text(jira.get_summary()))

            if len(jira.get_release_note()) > 0 or \
               jira.get_incompatible_change() or jira.get_important():
                reloutputs.write_key_raw(jira.get_project(), "\n---\n\n")
                reloutputs.write_key_raw(jira.get_project(), line)
                if len(jira.get_release_note()) == 0:
                    line = '\n**WARNING: No release note provided for this change.**\n\n'
                else:
                    line = '\n%s\n\n' % (
                        processrelnote(jira.get_release_note()))
                reloutputs.write_key_raw(jira.get_project(), line)

            linter.lint(jira)

        if linter.enabled:
            print linter.message()
            if linter.had_errors():
                haderrors = True
                shutil.rmtree(vstr)
                continue

        reloutputs.write_all("\n\n")
        reloutputs.close()

        if incompatlist:
            choutputs.write_all("### INCOMPATIBLE CHANGES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(incompatlist)

        if importantlist:
            choutputs.write_all("\n\n### IMPORTANT ISSUES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(importantlist)

        if newfeaturelist:
            choutputs.write_all("\n\n### NEW FEATURES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(newfeaturelist)

        if improvementlist:
            choutputs.write_all("\n\n### IMPROVEMENTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(improvementlist)

        if buglist:
            choutputs.write_all("\n\n### BUG FIXES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(buglist)

        if testlist:
            choutputs.write_all("\n\n### TESTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(testlist)

        if subtasklist:
            choutputs.write_all("\n\n### SUB-TASKS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(subtasklist)

        if tasklist or otherlist:
            choutputs.write_all("\n\n### OTHER:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(otherlist)
            choutputs.write_list(tasklist)

        choutputs.write_all("\n\n")
        choutputs.close()

    if options.index:
        buildindex(title, options.license)
        buildreadme(title, options.license)

    if haderrors is True:
        sys.exit(1)