In the project codebase, there are multiple standalone packages in a folder titled plugins, and each package is in its own folder which has a setup.py file in it, and the project itself is a python package with its own setup.py file.
I have two folders, project/project and plugins/myplugin_one/project_plugins/myplugin_one, that I need to be considered first_party and third_party when appropriate. For example, inside plugins/myplugin_one/project_plugins/myplugin_one, there's a file config.py with this code:
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
# First Party
from project.core.config_store import ConfigStore
The import from project.core.config_store import ConfigStore is being treated as a first_party import, but should be considered as a third_party import because the file resides in plugins/myplugin_one/project_plugins/myplugin_one and myplugin_one is a standalone package (first_party), while project is third_party in this context.
Similarly, for any imports residing in files inside project/project, project/project should be considered first_party and importing from plugins/myplugin_one/project_plugins/myplugin_one should be considered third_party.
The sections order for the project should be:
sections=
FUTURE
STDLIB
THIRDPARTY
FIRSTPARTY
LOCALFOLDER
This is an upgrade from isort 4 to isort 5.4.2, so default sections are no longer first_party but third_party and __init__.py is not skipped by default.
This is my isort.cfg file:
[settings]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
float_to_top = true
line_length=88
ensure_newline_before_comments=True
sections=
FUTURE
STDLIB
THIRDPARTY
FIRSTPARTY
LOCALFOLDER
import_heading_stdlib=Standard Library
import_heading_firstparty=First Party
import_heading_thirdparty=Third Party
import_heading_localfolder=Local Folder
known_first_party=project,project_plugins
known_local_folder=build_helpers,tests
src_paths=
skip=
__init__.py