Fix indentation, pep8. Optimize imports and adding missing import for sys module.

Improvements in some parts of  get_all_imports method and removing unused path variable.
This commit is contained in:
Michael 2015-04-25 12:31:05 +03:00
parent 61a01d78c6
commit 655b32797a
2 changed files with 100 additions and 90 deletions

View File

@ -11,34 +11,39 @@ Options:
--savepath path to requirements.txt (Optional) --savepath path to requirements.txt (Optional)
""" """
from __future__ import print_function from __future__ import print_function
import os, re, logging import os
import sys
import re
import logging
from docopt import docopt from docopt import docopt
import yarg import yarg
from yarg.exceptions import HTTPError from yarg.exceptions import HTTPError
REGEXP = [ REGEXP = [
re.compile(r'^import (.+)$'), re.compile(r'^import (.+)$'),
re.compile(r'from (.*?) import (?:.*)') re.compile(r'from (.*?) import (?:.*)')
] ]
def get_all_imports(start_path): def get_all_imports(start_path):
imports = [] imports = []
packages = [] packages = []
logging.debug('Traversing tree, start: %s', start_path) logging.debug('Traversing tree, start: %s', start_path)
for root, dirs, files in os.walk(start_path): for root, dirs, files in os.walk(start_path):
path = root.split('/')
packages.append(os.path.basename(root)) packages.append(os.path.basename(root))
for file in files: for file_name in files:
if file[-3:] != ".py": if file_name[-3:] != ".py":
continue continue
for rex in REGEXP:
with open(os.path.join(root,file), "r") as f: with open(os.path.join(root, file_name), "r") as file_object:
lines = f.readlines() for line in file_object:
for line in lines:
if line[0] == "#": if line[0] == "#":
continue continue
if "(" in line: if "(" in line:
break break
for rex in REGEXP:
s = rex.match(line) s = rex.match(line)
if not s: if not s:
continue continue
@ -55,6 +60,7 @@ def get_all_imports(start_path):
data = [x.strip() for x in f.readlines()] data = [x.strip() for x in f.readlines()]
return list(set(third_party_packages) - set(data)) return list(set(third_party_packages) - set(data))
def generate_requirements_file(path, imports): def generate_requirements_file(path, imports):
with open(path, "w") as ff: with open(path, "w") as ff:
logging.debug('Writing requirements to file %s', path) logging.debug('Writing requirements to file %s', path)
@ -62,6 +68,7 @@ def generate_requirements_file(path, imports):
ff.write(item['name'] + "==" + item['version']) ff.write(item['name'] + "==" + item['version'])
ff.write("\n") ff.write("\n")
def get_imports_info(imports): def get_imports_info(imports):
result = [] result = []
for item in imports: for item in imports:
@ -76,6 +83,7 @@ def get_imports_info(imports):
result.append({'name': item, 'version': last_release}) result.append({'name': item, 'version': last_release})
return result return result
def init(args): def init(args):
print("Looking for imports") print("Looking for imports")
imports = get_all_imports(args['<path>']) imports = get_all_imports(args['<path>'])
@ -86,6 +94,7 @@ def init(args):
generate_requirements_file(path, imports_with_info) generate_requirements_file(path, imports_with_info)
print("Successfuly saved requirements file in: " + path) print("Successfuly saved requirements file in: " + path)
def main(): # pragma: no cover def main(): # pragma: no cover
args = docopt(__doc__, version='xstat 0.1') args = docopt(__doc__, version='xstat 0.1')
log_level = logging.WARNING log_level = logging.WARNING
@ -98,5 +107,6 @@ def main(): # pragma: no cover
except KeyboardInterrupt: except KeyboardInterrupt:
sys.exit(0) sys.exit(0)
if __name__ == '__main__': if __name__ == '__main__':
main() # pragma: no cover main() # pragma: no cover

View File

@ -14,7 +14,6 @@ from pipreqs import pipreqs
class TestPipreqs(unittest.TestCase): class TestPipreqs(unittest.TestCase):
def setUp(self): def setUp(self):
self.modules = ['flask', 'requests', 'sqlalchemy', 'docopt', 'nonexistendmodule'] self.modules = ['flask', 'requests', 'sqlalchemy', 'docopt', 'nonexistendmodule']
self.project = os.path.join(os.path.dirname(__file__), "_data") self.project = os.path.join(os.path.dirname(__file__), "_data")
@ -52,5 +51,6 @@ class TestPipreqs(unittest.TestCase):
except OSError: except OSError:
pass pass
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()