Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Fix sort_reexports code mangling#2283

Merged
DanielNoord merged 4 commits intoPyCQA:mainfrom
Helveg:fix-sort-reexports
Jan 9, 2025
Merged

Fix sort_reexports code mangling#2283
DanielNoord merged 4 commits intoPyCQA:mainfrom
Helveg:fix-sort-reexports

Conversation

@Helveg
Copy link
Contributor

@Helveg Helveg commented Jul 27, 2024

Fixes #2193 and fixes #2252,

The logic behind sort_reexports was keeping track of a point in the output_stream, and seeked to that point before writing the sorted reexports back in, in order to compensate for the first line of this code sorting section being written into the stream already.

The original code tried to track the position of the point with every iteration, but since the code is very branched, and contains ~10 .write statements, this fails, and this approach would never be easily maintained. So I opted to simplify the approach by instead rolling back the write position in the stream by the length of the segment that was written too much.

Additionally, when the input code sort section is longer than the sorted output (e.g., when there is a lot of trimmed whitespace), some previously written garbage remained, which I fixed by truncating the stream after writing to it during sort_reexport operations.

@Helveg
Copy link
Contributor Author

Helveg commented Jul 27, 2024

It seems a bit unfair that DeepSource blocks this PR for cyclomatic complexity while it was already this high :)

@marcinocto
Copy link

👋 This is great, thanks for the fix! Any chance this could be released in any of the next versions?

I agree that it's a bit mad to hold this off on the basis of complexity given how complex the original function is.

@Helveg
Copy link
Contributor Author

Helveg commented Dec 28, 2024

We'd have to find an active maintainer to ping or something, given that there's 50 open pull requests

@Helveg
Copy link
Contributor Author

Helveg commented Dec 28, 2024

@hugovk @timothycrosley sorry for the noise, I'd like to get some traction on this since it's been pending quite some time.

@hugovk
Copy link
Contributor

hugovk commented Dec 28, 2024

@Helveg I don't have merge rights here, perhaps @staticdev can help.

@DanielNoord
Copy link
Member

Thanks! Going to merge this :)

@DanielNoord DanielNoord merged commit 122c09f into PyCQA:main Jan 9, 2025
@DanielNoord DanielNoord mentioned this pull request Jan 9, 2025
@Helveg Helveg deleted the fix-sort-reexports branch January 13, 2025 11:28
736-c41-2c1-e464fc974 added a commit to Swiss-Armed-Forces/Loom that referenced this pull request Feb 20, 2026
This MR contains the following updates:

| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [isort](https://github.com/PyCQA/isort) ([changelog](https://github.com/PyCQA/isort/releases)) | dev | major | `^5.13.2` → `^7.0.0` | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PyCQA/isort/badge)](https://securityscorecards.dev/viewer/?uri=github.com/PyCQA/isort) |

---

### Release Notes

<details>
<summary>PyCQA/isort (isort)</summary>

### [`v7.0.0`](https://github.com/PyCQA/isort/releases/tag/7.0.0)

[Compare Source](PyCQA/isort@6.1.0...7.0.0)

#### Changes

#### 💥 Breaking Changes

- Drop support for Python 3.9 ([#&#8203;2430](PyCQA/isort#2430)) [@&#8203;DanielNoord](https://github.com/DanielNoord)

#### 🚀 Features

- Show absolute paths in skipped file messages ([#&#8203;2416](PyCQA/isort#2416)) [@&#8203;pranlawate](https://github.com/pranlawate)

#### 🪲 Fixes

- Some fixes for Python 3.14 ([#&#8203;2433](PyCQA/isort#2433)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Test on `3.14` and fix any bugs ([#&#8203;2425](PyCQA/isort#2425)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Update CHANGELOG.md + Fix Formatting and Grammar ([#&#8203;2419](PyCQA/isort#2419)) [@&#8203;lukbrew25](https://github.com/lukbrew25)
- Fix output of hanging indent for long lines with noqa ([#&#8203;2407](PyCQA/isort#2407)) [@&#8203;matan1008](https://github.com/matan1008)

#### :construction\_worker: Continuous Integration

- Format with `ruff` instead of `black` ([#&#8203;2432](PyCQA/isort#2432)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Target 3.10 for `ruff` ([#&#8203;2431](PyCQA/isort#2431)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Update development dependencies to latest version ([#&#8203;2426](PyCQA/isort#2426)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- docs: update pre-commit examples to version 6.1.0 ([#&#8203;2413](PyCQA/isort#2413)) [@&#8203;pranlawate](https://github.com/pranlawate)
- Small cleanup for developer environment ([#&#8203;2418](PyCQA/isort#2418)) [@&#8203;DanielNoord](https://github.com/DanielNoord)

#### 📦 Dependencies

- Bump actions/setup-python from 5 to 6 in the github-actions group ([#&#8203;2411](PyCQA/isort#2411)) @&#8203;[dependabot\[bot\]](https://github.com/apps/dependabot)

### [`v6.1.0`](https://github.com/PyCQA/isort/blob/HEAD/CHANGELOG.md#610-October-1-2025)

[Compare Source](PyCQA/isort@6.0.1...6.1.0)

- Add python 3.14 classifier and badge ([#&#8203;2409](PyCQA/isort#2409)) [@&#8203;staticdev](https://github.com/staticdev)
  - Drop use of non-standard pkg\_resources API ([#&#8203;2405](PyCQA/isort#2405)) [@&#8203;dvarrazzo](https://github.com/dvarrazzo)

### [`v6.0.1`](https://github.com/PyCQA/isort/blob/HEAD/CHANGELOG.md#601-Febuary-26-2025)

[Compare Source](PyCQA/isort@6.0.0...6.0.1)

- Add OSError handling in find\_imports\_in\_file ([#&#8203;2331](PyCQA/isort#2331)) [@&#8203;kobarity](https://github.com/kobarity)

### [`v6.0.0`](https://github.com/PyCQA/isort/blob/HEAD/CHANGELOG.md#600-January-27-2025)

[Compare Source](PyCQA/isort@5.13.2...6.0.0)

- Remove support for Python 3.8 ([#&#8203;2327](PyCQA/isort#2327)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
  - Python 3.13 support ([#&#8203;2306](PyCQA/isort#2306)) [@&#8203;mayty](https://github.com/mayty)
  - Speed up exists\_case\_sensitive calls ([#&#8203;2264](PyCQA/isort#2264)) [@&#8203;correctmost](https://github.com/correctmost)
  - Ensure that split\_on\_trailing\_comma works with as imports ([#&#8203;2340](PyCQA/isort#2340)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
  - Black profile: enable magic comma ([#&#8203;2236](PyCQA/isort#2236)) [@&#8203;MrMino](https://github.com/MrMino)
  - Update line\_length and single\_line\_exclusions in google profile ([#&#8203;2149](PyCQA/isort#2149)) [@&#8203;jagapiou](https://github.com/jagapiou)
  - Allow --diff to be used with --jobs ([#&#8203;2302](PyCQA/isort#2302)) [@&#8203;mnakama](https://github.com/mnakama)
  - Fix wemake profile to have correct character limit ([#&#8203;2241](PyCQA/isort#2241)) [@&#8203;sobolevn](https://github.com/sobolevn)
  - Fix sort\_reexports code mangling ([#&#8203;2283](PyCQA/isort#2283)) [@&#8203;Helveg](https://github.com/Helveg)
  - Fix correct group by package tokenization ([#&#8203;2136](PyCQA/isort#2136)) [@&#8203;glasnt](https://github.com/glasnt)

</details>

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yLjQiLCJ1cGRhdGVkSW5WZXIiOiI0My4yNS43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZSJdfQ==-->

See merge request swiss-armed-forces/cyber-command/cea/loom!284

Co-authored-by: Loom MR Pipeline Trigger <group_103951964_bot_9504bb8dead6d4e406ad817a607f24be@noreply.gitlab.com>
Co-authored-by: shrewd-laidback palace <shrewd-laidback-palace-736-c41-2c1-e464fc974@swiss-armed-forces-open-source.ch>
736-c41-2c1-e464fc974 added a commit to Swiss-Armed-Forces/Loom that referenced this pull request Feb 20, 2026
chore(deps): update isort (major)

This MR contains the following updates:

| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [isort](https://github.com/PyCQA/isort) ([changelog](https://github.com/PyCQA/isort/releases)) | dev | major | `^5.13.2` → `^7.0.0` | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PyCQA/isort/badge)](https://securityscorecards.dev/viewer/?uri=github.com/PyCQA/isort) |

---

### Release Notes

<details>
<summary>PyCQA/isort (isort)</summary>

### [`v7.0.0`](https://github.com/PyCQA/isort/releases/tag/7.0.0)

[Compare Source](PyCQA/isort@6.1.0...7.0.0)

#### Changes

#### 💥 Breaking Changes

- Drop support for Python 3.9 ([#&#8203;2430](PyCQA/isort#2430)) [@&#8203;DanielNoord](https://github.com/DanielNoord)

#### 🚀 Features

- Show absolute paths in skipped file messages ([#&#8203;2416](PyCQA/isort#2416)) [@&#8203;pranlawate](https://github.com/pranlawate)

#### 🪲 Fixes

- Some fixes for Python 3.14 ([#&#8203;2433](PyCQA/isort#2433)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Test on `3.14` and fix any bugs ([#&#8203;2425](PyCQA/isort#2425)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Update CHANGELOG.md + Fix Formatting and Grammar ([#&#8203;2419](PyCQA/isort#2419)) [@&#8203;lukbrew25](https://github.com/lukbrew25)
- Fix output of hanging indent for long lines with noqa ([#&#8203;2407](PyCQA/isort#2407)) [@&#8203;matan1008](https://github.com/matan1008)

#### :construction\_worker: Continuous Integration

- Format with `ruff` instead of `black` ([#&#8203;2432](PyCQA/isort#2432)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Target 3.10 for `ruff` ([#&#8203;2431](PyCQA/isort#2431)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- Update development dependencies to latest version ([#&#8203;2426](PyCQA/isort#2426)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
- docs: update pre-commit examples to version 6.1.0 ([#&#8203;2413](PyCQA/isort#2413)) [@&#8203;pranlawate](https://github.com/pranlawate)
- Small cleanup for developer environment ([#&#8203;2418](PyCQA/isort#2418)) [@&#8203;DanielNoord](https://github.com/DanielNoord)

#### 📦 Dependencies

- Bump actions/setup-python from 5 to 6 in the github-actions group ([#&#8203;2411](PyCQA/isort#2411)) @&#8203;[dependabot\[bot\]](https://github.com/apps/dependabot)

### [`v6.1.0`](https://github.com/PyCQA/isort/blob/HEAD/CHANGELOG.md#610-October-1-2025)

[Compare Source](PyCQA/isort@6.0.1...6.1.0)

- Add python 3.14 classifier and badge ([#&#8203;2409](PyCQA/isort#2409)) [@&#8203;staticdev](https://github.com/staticdev)
  - Drop use of non-standard pkg\_resources API ([#&#8203;2405](PyCQA/isort#2405)) [@&#8203;dvarrazzo](https://github.com/dvarrazzo)

### [`v6.0.1`](https://github.com/PyCQA/isort/blob/HEAD/CHANGELOG.md#601-Febuary-26-2025)

[Compare Source](PyCQA/isort@6.0.0...6.0.1)

- Add OSError handling in find\_imports\_in\_file ([#&#8203;2331](PyCQA/isort#2331)) [@&#8203;kobarity](https://github.com/kobarity)

### [`v6.0.0`](https://github.com/PyCQA/isort/blob/HEAD/CHANGELOG.md#600-January-27-2025)

[Compare Source](PyCQA/isort@5.13.2...6.0.0)

- Remove support for Python 3.8 ([#&#8203;2327](PyCQA/isort#2327)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
  - Python 3.13 support ([#&#8203;2306](PyCQA/isort#2306)) [@&#8203;mayty](https://github.com/mayty)
  - Speed up exists\_case\_sensitive calls ([#&#8203;2264](PyCQA/isort#2264)) [@&#8203;correctmost](https://github.com/correctmost)
  - Ensure that split\_on\_trailing\_comma works with as imports ([#&#8203;2340](PyCQA/isort#2340)) [@&#8203;DanielNoord](https://github.com/DanielNoord)
  - Black profile: enable magic comma ([#&#8203;2236](PyCQA/isort#2236)) [@&#8203;MrMino](https://github.com/MrMino)
  - Update line\_length and single\_line\_exclusions in google profile ([#&#8203;2149](PyCQA/isort#2149)) [@&#8203;jagapiou](https://github.com/jagapiou)
  - Allow --diff to be used with --jobs ([#&#8203;2302](PyCQA/isort#2302)) [@&#8203;mnakama](https://github.com/mnakama)
  - Fix wemake profile to have correct character limit ([#&#8203;2241](PyCQA/isort#2241)) [@&#8203;sobolevn](https://github.com/sobolevn)
  - Fix sort\_reexports code mangling ([#&#8203;2283](PyCQA/isort#2283)) [@&#8203;Helveg](https://github.com/Helveg)
  - Fix correct group by package tokenization ([#&#8203;2136](PyCQA/isort#2136)) [@&#8203;glasnt](https://github.com/glasnt)

</details>

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yLjQiLCJ1cGRhdGVkSW5WZXIiOiI0My4yNS43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZSJdfQ==-->

See merge request swiss-armed-forces/cyber-command/cea/loom!284

Co-authored-by: Loom MR Pipeline Trigger <group_103951964_bot_9504bb8dead6d4e406ad817a607f24be@noreply.gitlab.com>
Co-authored-by: open-source Pipeline <group_90701827_bot_ed04ae348bc5f40af9966fb8b6867e99@noreply.gitlab.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unrecoverable exception thrown using --sort-reexports BUG: --sort-reexports don't work with multiple lines __all__

4 participants