diff options
author | Gram <master_fess@mail.ru> | 2018-06-22 18:01:16 +0300 |
---|---|---|
committer | Gram <master_fess@mail.ru> | 2018-06-22 18:01:16 +0300 |
commit | ff347437a8ad5dfbc64dccea5853a8ebfdc21c05 (patch) | |
tree | 0668ef3674aa5893e44fda9a816397c22b5076e9 /isort/finders.py | |
parent | cd45176c56eac7956abe8f077d46ea8413a42fa9 (diff) | |
download | isort-ff347437a8ad5dfbc64dccea5853a8ebfdc21c05.tar.gz |
+PyPI names normalizing via pipreqs
Diffstat (limited to 'isort/finders.py')
-rw-r--r-- | isort/finders.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/isort/finders.py b/isort/finders.py index 433abdf6..444f9eed 100644 --- a/isort/finders.py +++ b/isort/finders.py @@ -2,6 +2,7 @@ """ from __future__ import absolute_import, division, print_function, unicode_literals +import inspect import os import os.path import re @@ -13,6 +14,10 @@ from glob import glob from .pie_slice import PY2 from .utils import exists_case_sensitive +try: + from pipreqs import pipreqs +except ImportError: + pipreqs = None try: # pip>=10 @@ -172,6 +177,17 @@ class RequirementsFinder(BaseFinder): def __init__(self, config, sections, path='.'): super(RequirementsFinder, self).__init__(config, sections) self.path = path + self.mapping = self._load_mapping() + + @staticmethod + def _load_mapping(): + if not pipreqs: + return + path = os.path.dirname(inspect.getfile(pipreqs)) + path = os.path.join(path, 'mapping') + with open(path, "r") as f: + # pypi_name: import_name + return dict(line.strip().split(":")[::-1] for line in f) def _get_files(self): for fname in os.listdir(self.path): @@ -190,6 +206,11 @@ class RequirementsFinder(BaseFinder): if req.name: yield req.name + def _normalize_name(self, name): + if not self.mapping: + return name.lower() + return self.mapping.get(name, name).lower() + def find(self, module_name): # pip not installed yet if not parse_requirements: @@ -202,7 +223,7 @@ class RequirementsFinder(BaseFinder): for path in self._get_files(): for name in self._get_names(path): - if module_name == name.lower(): + if module_name == self._normalize_name(name): return self.sections.THIRDPARTY |