Skip to content

Instantly share code, notes, and snippets.

@zazazack
Last active October 3, 2019 03:20
Show Gist options
  • Save zazazack/55875fbb363abf98b8342d637c0c38d4 to your computer and use it in GitHub Desktop.
Save zazazack/55875fbb363abf98b8342d637c0c38d4 to your computer and use it in GitHub Desktop.
from dataclasses import dataclass, field


@dataclass
class iSort:
    imports: str = field(default=None)

    def _imports(self):
        imports = self.imports
        imports = self._parse()
        imports = self._classify()
        imports = self._sort()
        self.imports = imports
        
    def _sort(self):
        import_imports: List[str] = []
        from_imports: List[str] = []
        for section in self._sections():
            for i in section:
                try:
                    import_type = i.split()[0]
                    if i.split()[0] == "import":
                        import_imports.append(i)
                    else:
                        from_imports.append(i)
                except IndexError:
                    pass
        return map(sorted, import_imports, from_imports)
    
    def _sections(self):
        builtins = []
        third_party = []
        first_party = []
        try:
            builtins, third_party, first_party = self._parse()
        except IndexError:
            builtins, third_party = self._parse()
        except:
            builtins = self._parse()
        return builtins, third_party, first_party
    
    def _parse(self):
        return self.imports.strip().split("\n")
@zazazack
Copy link
Author

zazazack commented Oct 3, 2019

Try it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment