> + def GetObsoletedBy(self): Add a docstring here.
"""Collects obsoleteness information. Documentation: http://... Returns: a tuple (bool, list) of (syntax_ok, obsoleted_by) If the package has not been obsoleted, or the package predates the implementation of this mechanism, the list is empty. """ > + obsoleted_by = [] > + obsoleted_by_path = os.path.join(self.directory, "install", "obsoleted") > + if no os.path.exists(obsoleted_by_path): > + return obsoleted_by > + fd = open(obsoleted_by_path, "r") I've recently learned a Python idiom for opening files: with open(obsoleted_by_path, "r") as fd: indented block using fd fd is unavailable outside that block > + for line in fd: > + fields = re.split(c.WS_RE, line) I expect that some packages might contain a file with bad syntax, e.g. 3 fields or 1 field. > + pkgname = fields[0] > + catalogname = fields[1] This line would throw an exception (i.e. checkpkg process would abort) if there was only one field. To make it more resilient: obsoleted_by = [] obsoleted_syntax_ok = True fields = re.split(c.WS_RE, line.strip()) if 2 != len(fields): obsoleted_syntax_ok = False continue pkgname, catalogname = fields return obsoleted_syntax_ok, obsoleted_by Or even better: return { "syntax": obsoleted_syntax_ok, "by": obsoleted_by, } > + obsoleted_by.append((pkgname, catalogname)) > + fd.close() If you have the 'with' block of code, fd is closed automatically when you leave the 'with' block. > + return obsoleted_by Next steps should be: - add a dict item around lib/python/package_stats.py line 500 (you could add a tuple, or transform it into a dictionary, or use whatever form that you think will be convenient to use later on; I like dictionaries because they tend to be self-descriptive) - since you're changing the data format, increment PACKAGE_STATS_VERSION in package_stats.py (line 25) - use the new data structure in a check Maciej _______________________________________________ devel mailing list devel@lists.opencsw.org https://lists.opencsw.org/mailman/listinfo/devel