Merge pull request #95 from jonafato/cleanup-get_all_imports

Clean up set and file usage in get_all_imports
This commit is contained in:
Jon Banafato 2017-10-26 17:03:17 -04:00 committed by GitHub
commit 800abc43e3

View File

@ -87,22 +87,22 @@ def get_all_imports(
file_name = os.path.join(root, file_name) file_name = os.path.join(root, file_name)
with open_func(file_name, "r", encoding=encoding) as f: with open_func(file_name, "r", encoding=encoding) as f:
contents = f.read() contents = f.read()
try: try:
tree = ast.parse(contents) tree = ast.parse(contents)
for node in ast.walk(tree): for node in ast.walk(tree):
if isinstance(node, ast.Import): if isinstance(node, ast.Import):
for subnode in node.names: for subnode in node.names:
raw_imports.add(subnode.name) raw_imports.add(subnode.name)
elif isinstance(node, ast.ImportFrom): elif isinstance(node, ast.ImportFrom):
raw_imports.add(node.module) raw_imports.add(node.module)
except Exception as exc: except Exception as exc:
if ignore_errors: if ignore_errors:
traceback.print_exc(exc) traceback.print_exc(exc)
logging.warn("Failed on file: %s" % file_name) logging.warn("Failed on file: %s" % file_name)
continue continue
else: else:
logging.error("Failed on file: %s" % file_name) logging.error("Failed on file: %s" % file_name)
raise exc raise exc
# Clean up imports # Clean up imports
for name in [n for n in raw_imports if n]: for name in [n for n in raw_imports if n]:
@ -114,13 +114,14 @@ def get_all_imports(
cleaned_name, _, _ = name.partition('.') cleaned_name, _, _ = name.partition('.')
imports.add(cleaned_name) imports.add(cleaned_name)
packages = set(imports) - set(set(candidates) & set(imports)) packages = imports - (set(candidates) & imports)
logging.debug('Found packages: {0}'.format(packages)) logging.debug('Found packages: {0}'.format(packages))
with open(join("stdlib"), "r") as f: with open(join("stdlib"), "r") as f:
data = [x.strip() for x in f.readlines()] data = {x.strip() for x in f}
data = [x for x in data if x not in py2_exclude] if py2 else data
return list(set(packages) - set(data)) data = {x for x in data if x not in py2_exclude} if py2 else data
return list(packages - data)
def filter_line(l): def filter_line(l):