Skip to content

Instantly share code, notes, and snippets.

@zazazack
Last active October 3, 2019 03:20
Show Gist options
  • Select an option

  • Save zazazack/55875fbb363abf98b8342d637c0c38d4 to your computer and use it in GitHub Desktop.

Select an option

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

zazazack commented Oct 3, 2019

Copy link
Copy Markdown
Author

Try it

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