pyflyby 1.9.13__tar.gz → 1.10.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyflyby might be problematic. Click here for more details.
- pyflyby-1.10.1/.github/dependabot.yml +11 -0
- pyflyby-1.10.1/.github/workflows/docs.yml +28 -0
- pyflyby-1.10.1/.github/workflows/lint.yml +30 -0
- pyflyby-1.10.1/.github/workflows/test.yml +67 -0
- pyflyby-1.10.1/.gitignore +11 -0
- pyflyby-1.10.1/CONTRIBUTING.md +1 -0
- {pyflyby-1.9.13/lib/python/pyflyby.egg-info → pyflyby-1.10.1}/PKG-INFO +47 -22
- {pyflyby-1.9.13 → pyflyby-1.10.1}/README.rst +11 -8
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/saveframe +2 -1
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/tidy-imports +11 -39
- pyflyby-1.10.1/codecov.yml +16 -0
- pyflyby-1.10.1/conftest.py +127 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/idents.rst +0 -1
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/conf.py +22 -2
- pyflyby-1.10.1/etc/pyflyby/.gitignore +1 -0
- pyflyby-1.10.1/github_deploy_key_deshaw_pyflyby.enc +1 -0
- pyflyby-1.10.1/lib/python/.gitignore +1 -0
- pyflyby-1.10.1/lib/python/pyflyby/.gitignore +1 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/__init__.py +1 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_autoimp.py +11 -2
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_cmdline.py +21 -7
- {pyflyby-1.9.13 → pyflyby-1.10.1}/lib/python/pyflyby/_dbg.py +1 -2
- {pyflyby-1.9.13 → pyflyby-1.10.1}/lib/python/pyflyby/_file.py +19 -3
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_idents.py +2 -8
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_imports2s.py +4 -1
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_importstmt.py +82 -21
- {pyflyby-1.9.13 → pyflyby-1.10.1}/lib/python/pyflyby/_interactive.py +126 -308
- pyflyby-1.10.1/lib/python/pyflyby/_log.py +104 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_modules.py +153 -25
- {pyflyby-1.9.13 → pyflyby-1.10.1}/lib/python/pyflyby/_parse.py +2 -3
- {pyflyby-1.9.13 → pyflyby-1.10.1}/lib/python/pyflyby/_saveframe.py +97 -26
- {pyflyby-1.9.13 → pyflyby-1.10.1}/lib/python/pyflyby/_version.py +1 -1
- pyflyby-1.10.1/lib/python/pyflyby/meson.build +34 -0
- pyflyby-1.10.1/meson.build +67 -0
- pyflyby-1.10.1/pyproject.toml +99 -0
- pyflyby-1.10.1/pytest.ini +7 -0
- pyflyby-1.10.1/src/_fast_iter_modules.cpp +98 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_cmdline.py +107 -3
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_file.py +45 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_imports2s.py +63 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_importstmt.py +59 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_interactive.py +216 -147
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_livepatch.py +18 -10
- pyflyby-1.10.1/tests/test_modules.py +197 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_py.py +38 -13
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_saveframe.py +254 -94
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tox.ini +0 -1
- pyflyby-1.9.13/PKG-INFO +0 -566
- pyflyby-1.9.13/bin/pyflyby/_dbg.py +0 -1368
- pyflyby-1.9.13/bin/pyflyby/_file.py +0 -755
- pyflyby-1.9.13/bin/pyflyby/_interactive.py +0 -2295
- pyflyby-1.9.13/bin/pyflyby/_log.py +0 -199
- pyflyby-1.9.13/bin/pyflyby/_parse.py +0 -1382
- pyflyby-1.9.13/bin/pyflyby/_saveframe.py +0 -1074
- pyflyby-1.9.13/bin/pyflyby/_version.py +0 -7
- pyflyby-1.9.13/lib/python/pyflyby/__init__.py +0 -60
- pyflyby-1.9.13/lib/python/pyflyby/__main__.py +0 -9
- pyflyby-1.9.13/lib/python/pyflyby/_autoimp.py +0 -2220
- pyflyby-1.9.13/lib/python/pyflyby/_cmdline.py +0 -534
- pyflyby-1.9.13/lib/python/pyflyby/_comms.py +0 -221
- pyflyby-1.9.13/lib/python/pyflyby/_docxref.py +0 -379
- pyflyby-1.9.13/lib/python/pyflyby/_dynimp.py +0 -154
- pyflyby-1.9.13/lib/python/pyflyby/_flags.py +0 -230
- pyflyby-1.9.13/lib/python/pyflyby/_format.py +0 -186
- pyflyby-1.9.13/lib/python/pyflyby/_idents.py +0 -233
- pyflyby-1.9.13/lib/python/pyflyby/_import_sorting.py +0 -165
- pyflyby-1.9.13/lib/python/pyflyby/_importclns.py +0 -658
- pyflyby-1.9.13/lib/python/pyflyby/_importdb.py +0 -680
- pyflyby-1.9.13/lib/python/pyflyby/_imports2s.py +0 -640
- pyflyby-1.9.13/lib/python/pyflyby/_importstmt.py +0 -662
- pyflyby-1.9.13/lib/python/pyflyby/_livepatch.py +0 -793
- pyflyby-1.9.13/lib/python/pyflyby/_log.py +0 -199
- pyflyby-1.9.13/lib/python/pyflyby/_modules.py +0 -513
- pyflyby-1.9.13/lib/python/pyflyby/_py.py +0 -2166
- pyflyby-1.9.13/lib/python/pyflyby/_saveframe_reader.py +0 -471
- pyflyby-1.9.13/lib/python/pyflyby/_util.py +0 -458
- pyflyby-1.9.13/lib/python/pyflyby/autoimport.py +0 -20
- pyflyby-1.9.13/lib/python/pyflyby/importdb.py +0 -19
- pyflyby-1.9.13/lib/python/pyflyby.egg-info/SOURCES.txt +0 -159
- pyflyby-1.9.13/lib/python/pyflyby.egg-info/dependency_links.txt +0 -1
- pyflyby-1.9.13/lib/python/pyflyby.egg-info/entry_points.txt +0 -3
- pyflyby-1.9.13/lib/python/pyflyby.egg-info/requires.txt +0 -6
- pyflyby-1.9.13/lib/python/pyflyby.egg-info/top_level.txt +0 -1
- pyflyby-1.9.13/pyproject.toml +0 -26
- pyflyby-1.9.13/setup.cfg +0 -4
- pyflyby-1.9.13/setup.py +0 -239
- pyflyby-1.9.13/tests/test_modules.py +0 -112
- {pyflyby-1.9.13 → pyflyby-1.10.1}/.pyflyby +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/LICENSE.txt +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/MANIFEST.in +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/autoipython +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/autopython +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/collect-exports +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/collect-imports +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/create-imports +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/find-import +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/list-bad-xrefs +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/prune-broken-imports +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/pyflyby-diff +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/reformat-imports +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/replace-star-imports +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/bin/transform-imports +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/LICENSE.txt +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/Makefile +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/TODO.txt +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/__init__.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/api.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/autoimp.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/cmdline.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/comms.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/dbg.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/file.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/flags.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/format.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/importclns.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/importdb.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/imports2s.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/importstmt.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/interactive.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/livepatch.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/log.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/modules.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/parse.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/py.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/api/util.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/autoipython.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/cli.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/collect_exports.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/collect_imports.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/find_import.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/prune_broken_imports.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/py.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/pyflyby_diff.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/reformat_imports.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/replace_star_imports.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/tidy_imports.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/cli/transform_imports.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/index.rst +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/make.bat +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/doc/testing.txt +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/etc/pyflyby/canonical.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/etc/pyflyby/common.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/etc/pyflyby/forget.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/etc/pyflyby/mandatory.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/etc/pyflyby/numpy.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/etc/pyflyby/std.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/lib/emacs/pyflyby.el +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/__main__.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_comms.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_docxref.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_dynimp.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_flags.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_format.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_import_sorting.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_importclns.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_importdb.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_livepatch.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_py.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_saveframe_reader.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/_util.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/autoimport.py +0 -0
- {pyflyby-1.9.13/bin → pyflyby-1.10.1/lib/python}/pyflyby/importdb.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/libexec/pyflyby/colordiff +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/libexec/pyflyby/diff-colorize +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/__init__.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_0testconfig.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_autoimp.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_docxref.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_flags.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_format.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_idents.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_importclns.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_importdb.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_jupyterlab_pyflyby.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_parse.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_saveframe_reader.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/test_util.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/tests_sorts.py +0 -0
- {pyflyby-1.9.13 → pyflyby-1.10.1}/tests/xrefs.py +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
|
3
|
+
# Please see the documentation for all configuration options:
|
|
4
|
+
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
5
|
+
|
|
6
|
+
version: 2
|
|
7
|
+
updates:
|
|
8
|
+
- package-ecosystem: "github-actions"
|
|
9
|
+
directory: "/"
|
|
10
|
+
schedule:
|
|
11
|
+
interval: "weekly"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
on: [push, pull_request, workflow_dispatch]
|
|
3
|
+
|
|
4
|
+
permissions:
|
|
5
|
+
contents: write
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
docs:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v5
|
|
12
|
+
- uses: actions/setup-python@v5
|
|
13
|
+
- name: Install dependencies
|
|
14
|
+
run: |
|
|
15
|
+
pip install -U pip
|
|
16
|
+
pip install -v --group docs
|
|
17
|
+
- name: Build docs
|
|
18
|
+
run: |
|
|
19
|
+
make html
|
|
20
|
+
working-directory: doc
|
|
21
|
+
- name: Deploy
|
|
22
|
+
uses: peaceiris/actions-gh-pages@v4
|
|
23
|
+
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
|
|
24
|
+
with:
|
|
25
|
+
publish_branch: gh-pages
|
|
26
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
27
|
+
publish_dir: doc/_build/html
|
|
28
|
+
force_orphan: true
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: Lint
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
lint:
|
|
7
|
+
runs-on: "ubuntu-latest"
|
|
8
|
+
steps:
|
|
9
|
+
- uses: actions/checkout@v5
|
|
10
|
+
- name: Set up Python
|
|
11
|
+
uses: actions/setup-python@v5
|
|
12
|
+
with:
|
|
13
|
+
python-version: 3.13
|
|
14
|
+
- name: Install pyflyby
|
|
15
|
+
run: |
|
|
16
|
+
# Include build dependencies for run time; see
|
|
17
|
+
# https://mesonbuild.com/meson-python/how-to-guides/editable-installs.html#build-dependencies
|
|
18
|
+
# for details.
|
|
19
|
+
pip install meson-python meson ninja pybind11>=2.10.4
|
|
20
|
+
pip install --no-build-isolation -ve . --group lint
|
|
21
|
+
- name: Mypy
|
|
22
|
+
run: |
|
|
23
|
+
mypy lib/python --ignore-missing-imports
|
|
24
|
+
- name: lint
|
|
25
|
+
run: |
|
|
26
|
+
flake8 --exclude known_imports,etc,__init__.py --select=F;
|
|
27
|
+
flake8 --exclude known_imports,etc,__init__.py --select=F bin/*;
|
|
28
|
+
- name: Self-tidy-import
|
|
29
|
+
run: |
|
|
30
|
+
./bin/tidy-imports -d lib/python/ tests/
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: Run tests
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
test:
|
|
7
|
+
runs-on: ${{ matrix.os }}
|
|
8
|
+
timeout-minutes: 40
|
|
9
|
+
strategy:
|
|
10
|
+
fail-fast: false
|
|
11
|
+
matrix:
|
|
12
|
+
os: [ubuntu-latest]
|
|
13
|
+
python-version:
|
|
14
|
+
- "3.9"
|
|
15
|
+
- "3.10"
|
|
16
|
+
- "3.11"
|
|
17
|
+
- "3.12"
|
|
18
|
+
- "3.13"
|
|
19
|
+
include:
|
|
20
|
+
- os: macos-latest
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
|
|
23
|
+
env:
|
|
24
|
+
DEBUG_TEST_PYFLYBY: 1
|
|
25
|
+
ENVNAME: ${{matrix.os}}-${{matrix.python-version}}
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v5
|
|
29
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
30
|
+
uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: ${{ matrix.python-version }}
|
|
33
|
+
- name: Install pyflyby
|
|
34
|
+
run: |
|
|
35
|
+
# Include build dependencies for run time; see
|
|
36
|
+
# https://mesonbuild.com/meson-python/how-to-guides/editable-installs.html#build-dependencies
|
|
37
|
+
# for details.
|
|
38
|
+
pip install meson-python meson ninja pybind11>=2.10.4
|
|
39
|
+
pip install setuptools wheel # needed for epydoc
|
|
40
|
+
pip install --no-build-isolation -ve .[test]
|
|
41
|
+
- name: test release build
|
|
42
|
+
run: |
|
|
43
|
+
python -m build
|
|
44
|
+
- name: compileall
|
|
45
|
+
run: |
|
|
46
|
+
python -We:invalid -m compileall -f -q lib/ etc/;
|
|
47
|
+
|
|
48
|
+
- name: pytest Mac OS
|
|
49
|
+
if: ${{ matrix.os == 'macos-latest'}}
|
|
50
|
+
# json report can't be installed on Py2, and make macos super slow.
|
|
51
|
+
run: |
|
|
52
|
+
python -m pytest -v --cov=pyflyby --cov-report=xml --doctest-modules --maxfail=3 lib tests
|
|
53
|
+
- name: pytest (not MacOS)
|
|
54
|
+
if: ${{ matrix.os != 'macos-latest' }}
|
|
55
|
+
run: |
|
|
56
|
+
python -m pytest -v --cov=pyflyby --cov-report=xml\
|
|
57
|
+
--doctest-modules\
|
|
58
|
+
--maxfail=3\
|
|
59
|
+
--json-report\
|
|
60
|
+
--json-report-file=report-${ENVNAME}.json\
|
|
61
|
+
lib tests
|
|
62
|
+
- uses: actions/upload-artifact@v4
|
|
63
|
+
name: upload pytest timing reports as json
|
|
64
|
+
with:
|
|
65
|
+
name: pytest-timing-${{ matrix.os }}-${{ matrix.python-version }}
|
|
66
|
+
path: ./report-*.json
|
|
67
|
+
- uses: codecov/codecov-action@v5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
See https://github.com/deshaw/.github/blob/main/.github/CONTRIBUTING.md
|
|
@@ -1,23 +1,45 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pyflyby
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.1
|
|
4
4
|
Summary: pyflyby - Python development productivity tools, in particular automatic import management
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Project-URL: Documentation, https://deshaw.github.io/pyflyby/
|
|
10
|
-
Project-URL: Source, https://github.com/deshaw/pyflyby
|
|
11
|
-
Keywords: pyflyby py autopython autoipython productivity automatic imports autoimporter tidy-imports
|
|
12
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
5
|
+
Author-Email: Karl Chen <quarl@8166.clguba.z.quarl.org>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE.txt
|
|
8
|
+
Classifier: Programming Language :: Python
|
|
13
9
|
Classifier: Topic :: Software Development
|
|
14
10
|
Classifier: Topic :: Software Development :: Code Generators
|
|
15
11
|
Classifier: Topic :: Software Development :: Interpreters
|
|
16
12
|
Classifier: Intended Audience :: Developers
|
|
17
|
-
Classifier:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Project-URL: Homepage, https://pypi.org/project/pyflyby/
|
|
15
|
+
Project-URL: Documentation, https://deshaw.github.io/pyflyby/
|
|
16
|
+
Project-URL: Source, https://github.com/deshaw/pyflyby
|
|
17
|
+
Requires-Python: >=3.9
|
|
18
|
+
Requires-Dist: black
|
|
19
|
+
Requires-Dist: six
|
|
20
|
+
Requires-Dist: tomli; python_version < "3.11"
|
|
21
|
+
Requires-Dist: typing_extensions>=4.6; python_version < "3.12"
|
|
22
|
+
Requires-Dist: prompt_toolkit
|
|
23
|
+
Requires-Dist: platformdirs
|
|
24
|
+
Provides-Extra: test
|
|
25
|
+
Requires-Dist: build; extra == "test"
|
|
26
|
+
Requires-Dist: coverage; extra == "test"
|
|
27
|
+
Requires-Dist: flaky; extra == "test"
|
|
28
|
+
Requires-Dist: hypothesis; extra == "test"
|
|
29
|
+
Requires-Dist: ipykernel>=5.4.3; extra == "test"
|
|
30
|
+
Requires-Dist: ipython; extra == "test"
|
|
31
|
+
Requires-Dist: jupyter; extra == "test"
|
|
32
|
+
Requires-Dist: jupyter_console>=6.2; extra == "test"
|
|
33
|
+
Requires-Dist: notebook<6.1; extra == "test"
|
|
34
|
+
Requires-Dist: pexpect>=3.3; extra == "test"
|
|
35
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
36
|
+
Requires-Dist: pytest-json-report; extra == "test"
|
|
37
|
+
Requires-Dist: pytest<=8; extra == "test"
|
|
38
|
+
Requires-Dist: requests; extra == "test"
|
|
39
|
+
Requires-Dist: epydoc; extra == "test"
|
|
40
|
+
Requires-Dist: wheel; extra == "test"
|
|
41
|
+
Requires-Dist: setuptools; extra == "test"
|
|
42
|
+
Description-Content-Type: text/x-rst
|
|
21
43
|
|
|
22
44
|
#########
|
|
23
45
|
Pyflyby
|
|
@@ -29,7 +51,7 @@ License-File: LICENSE.txt
|
|
|
29
51
|
.. image:: https://travis-ci.org/deshaw/pyflyby.png?branch=master
|
|
30
52
|
:target: https://travis-ci.org/deshaw/pyflyby
|
|
31
53
|
|
|
32
|
-
Pyflyby is a set of Python programming productivity tools for Python 3.
|
|
54
|
+
Pyflyby is a set of Python programming productivity tools for Python 3.9+.
|
|
33
55
|
|
|
34
56
|
For command-line interaction:
|
|
35
57
|
* ``py``: command-line multitool
|
|
@@ -47,6 +69,8 @@ For editing python source code:
|
|
|
47
69
|
in the form of import statements.
|
|
48
70
|
* ``transform-imports``: renames imported modules/functions.
|
|
49
71
|
|
|
72
|
+
`Learn more about Pyflyby <https://www.deshaw.com/library/desco-quansight-improving-jupyter-efficiency>`_ in this blog post.
|
|
73
|
+
|
|
50
74
|
Installation
|
|
51
75
|
============
|
|
52
76
|
|
|
@@ -269,6 +293,10 @@ Other IPython magic commands work as well::
|
|
|
269
293
|
[PYFLYBY] from numpy import arange
|
|
270
294
|
[0 1 2 3]
|
|
271
295
|
|
|
296
|
+
.. warning::
|
|
297
|
+
|
|
298
|
+
Auto-import on ``Tab`` completion requires IPython 9.3 or newer.
|
|
299
|
+
|
|
272
300
|
|
|
273
301
|
Implementation details
|
|
274
302
|
----------------------
|
|
@@ -279,7 +307,7 @@ namespace never contains entries for names that are not yet imported.
|
|
|
279
307
|
This method of importing at parse time contrasts with previous implementations
|
|
280
308
|
of automatic importing that use proxy objects. Those implementations using
|
|
281
309
|
proxy objects don't work as well, because it is impossible to make proxy
|
|
282
|
-
objects behave perfectly. For example, instance(x, T) will return the wrong
|
|
310
|
+
objects behave perfectly. For example, ``instance(x, T)`` will return the wrong
|
|
283
311
|
answer if either x or T is a proxy object.
|
|
284
312
|
|
|
285
313
|
|
|
@@ -287,9 +315,8 @@ Compatibility
|
|
|
287
315
|
-------------
|
|
288
316
|
|
|
289
317
|
Tested with:
|
|
290
|
-
- Python 3.
|
|
291
|
-
- IPython
|
|
292
|
-
3.1, 3.2, 4.0., 7.11 (latest)
|
|
318
|
+
- Python 3.9, 3.10, 3.11, 3.12, 3.13
|
|
319
|
+
- IPython 8.18, 8.37.0, 9.4.0 (latest)
|
|
293
320
|
- IPython (text console), IPython Notebook, Spyder
|
|
294
321
|
|
|
295
322
|
|
|
@@ -475,7 +502,7 @@ Emacs support
|
|
|
475
502
|
|
|
476
503
|
* To get a ``M-x tidy-imports`` command in GNU Emacs, add to your ``~/.emacs``::
|
|
477
504
|
|
|
478
|
-
(load "
|
|
505
|
+
(load "/<site-packages>/pyflyby/share/emacs/site-lisp/pyflyby.el")
|
|
479
506
|
|
|
480
507
|
|
|
481
508
|
- Pyflyby.el doesn't yet work with XEmacs; patches welcome.
|
|
@@ -562,5 +589,3 @@ Release
|
|
|
562
589
|
|
|
563
590
|
8. Check/update https://github.com/conda-forge/pyflyby-feedstock for new pyflyby
|
|
564
591
|
release on conda-forge
|
|
565
|
-
|
|
566
|
-
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
.. image:: https://travis-ci.org/deshaw/pyflyby.png?branch=master
|
|
9
9
|
:target: https://travis-ci.org/deshaw/pyflyby
|
|
10
10
|
|
|
11
|
-
Pyflyby is a set of Python programming productivity tools for Python 3.
|
|
11
|
+
Pyflyby is a set of Python programming productivity tools for Python 3.9+.
|
|
12
12
|
|
|
13
13
|
For command-line interaction:
|
|
14
14
|
* ``py``: command-line multitool
|
|
@@ -26,6 +26,8 @@ For editing python source code:
|
|
|
26
26
|
in the form of import statements.
|
|
27
27
|
* ``transform-imports``: renames imported modules/functions.
|
|
28
28
|
|
|
29
|
+
`Learn more about Pyflyby <https://www.deshaw.com/library/desco-quansight-improving-jupyter-efficiency>`_ in this blog post.
|
|
30
|
+
|
|
29
31
|
Installation
|
|
30
32
|
============
|
|
31
33
|
|
|
@@ -248,6 +250,10 @@ Other IPython magic commands work as well::
|
|
|
248
250
|
[PYFLYBY] from numpy import arange
|
|
249
251
|
[0 1 2 3]
|
|
250
252
|
|
|
253
|
+
.. warning::
|
|
254
|
+
|
|
255
|
+
Auto-import on ``Tab`` completion requires IPython 9.3 or newer.
|
|
256
|
+
|
|
251
257
|
|
|
252
258
|
Implementation details
|
|
253
259
|
----------------------
|
|
@@ -258,7 +264,7 @@ namespace never contains entries for names that are not yet imported.
|
|
|
258
264
|
This method of importing at parse time contrasts with previous implementations
|
|
259
265
|
of automatic importing that use proxy objects. Those implementations using
|
|
260
266
|
proxy objects don't work as well, because it is impossible to make proxy
|
|
261
|
-
objects behave perfectly. For example, instance(x, T) will return the wrong
|
|
267
|
+
objects behave perfectly. For example, ``instance(x, T)`` will return the wrong
|
|
262
268
|
answer if either x or T is a proxy object.
|
|
263
269
|
|
|
264
270
|
|
|
@@ -266,9 +272,8 @@ Compatibility
|
|
|
266
272
|
-------------
|
|
267
273
|
|
|
268
274
|
Tested with:
|
|
269
|
-
- Python 3.
|
|
270
|
-
- IPython
|
|
271
|
-
3.1, 3.2, 4.0., 7.11 (latest)
|
|
275
|
+
- Python 3.9, 3.10, 3.11, 3.12, 3.13
|
|
276
|
+
- IPython 8.18, 8.37.0, 9.4.0 (latest)
|
|
272
277
|
- IPython (text console), IPython Notebook, Spyder
|
|
273
278
|
|
|
274
279
|
|
|
@@ -454,7 +459,7 @@ Emacs support
|
|
|
454
459
|
|
|
455
460
|
* To get a ``M-x tidy-imports`` command in GNU Emacs, add to your ``~/.emacs``::
|
|
456
461
|
|
|
457
|
-
(load "
|
|
462
|
+
(load "/<site-packages>/pyflyby/share/emacs/site-lisp/pyflyby.el")
|
|
458
463
|
|
|
459
464
|
|
|
460
465
|
- Pyflyby.el doesn't yet work with XEmacs; patches welcome.
|
|
@@ -541,5 +546,3 @@ Release
|
|
|
541
546
|
|
|
542
547
|
8. Check/update https://github.com/conda-forge/pyflyby-feedstock for new pyflyby
|
|
543
548
|
release on conda-forge
|
|
544
|
-
|
|
545
|
-
|
|
@@ -288,7 +288,8 @@ def main():
|
|
|
288
288
|
# Save the frames and metadata info to the file.
|
|
289
289
|
_save_frames_and_exception_info_to_file(
|
|
290
290
|
filename=filename, frames=frames, variables=variables,
|
|
291
|
-
exclude_variables=exclude_variables,
|
|
291
|
+
exclude_variables=exclude_variables,
|
|
292
|
+
exception_obj=err)
|
|
292
293
|
else:
|
|
293
294
|
raise SystemExit(
|
|
294
295
|
f"Error: No exception is raised by the program: {command_string!a}")
|
|
@@ -21,11 +21,8 @@ Only top-level import statements are touched.
|
|
|
21
21
|
# License: MIT http://opensource.org/licenses/MIT
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
from
|
|
25
|
-
|
|
26
|
-
import os
|
|
27
|
-
|
|
28
|
-
from pyflyby._cmdline import hfmt, parse_args, process_actions
|
|
24
|
+
from pyflyby._cmdline import (_get_pyproj_toml_config, hfmt,
|
|
25
|
+
parse_args, process_actions)
|
|
29
26
|
from pyflyby._import_sorting import sort_imports
|
|
30
27
|
from pyflyby._imports2s import (canonicalize_imports,
|
|
31
28
|
fix_unused_and_missing_imports,
|
|
@@ -33,34 +30,6 @@ from pyflyby._imports2s import (canonicalize_imports,
|
|
|
33
30
|
transform_imports)
|
|
34
31
|
from pyflyby._parse import PythonBlock
|
|
35
32
|
|
|
36
|
-
import toml
|
|
37
|
-
TOML_AVAIL = True
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def _get_pyproj_toml_config():
|
|
41
|
-
"""
|
|
42
|
-
Try to find current project pyproject.toml
|
|
43
|
-
in cwd or parents directories.
|
|
44
|
-
"""
|
|
45
|
-
if not TOML_AVAIL:
|
|
46
|
-
return None
|
|
47
|
-
|
|
48
|
-
from pathlib import Path
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
cwd = Path(os.getcwd())
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
for pth in [cwd] + list(cwd.parents):
|
|
55
|
-
pyproj_toml = pth /'pyproject.toml'
|
|
56
|
-
if pyproj_toml.exists() and pyproj_toml.is_file():
|
|
57
|
-
return pyproj_toml.read_text()
|
|
58
|
-
|
|
59
|
-
return None
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
33
|
|
|
65
34
|
def _addopts(parser):
|
|
66
35
|
"""
|
|
@@ -138,9 +107,9 @@ def _addopts(parser):
|
|
|
138
107
|
--no-add-mandatory.'''))
|
|
139
108
|
def main() -> None:
|
|
140
109
|
|
|
141
|
-
|
|
142
|
-
if
|
|
143
|
-
default_config =
|
|
110
|
+
config = _get_pyproj_toml_config()
|
|
111
|
+
if config:
|
|
112
|
+
default_config = config.get('tool', {}).get('pyflyby',{})
|
|
144
113
|
else:
|
|
145
114
|
default_config = {}
|
|
146
115
|
|
|
@@ -149,7 +118,10 @@ def main() -> None:
|
|
|
149
118
|
parser.set_defaults(**default_config)
|
|
150
119
|
|
|
151
120
|
options, args = parse_args(
|
|
152
|
-
_add_opts_and_defaults,
|
|
121
|
+
_add_opts_and_defaults,
|
|
122
|
+
import_format_params=True,
|
|
123
|
+
modify_action_params=True,
|
|
124
|
+
)
|
|
153
125
|
|
|
154
126
|
def modify(block:PythonBlock) -> PythonBlock:
|
|
155
127
|
if options.transformations:
|
|
@@ -166,13 +138,13 @@ def main() -> None:
|
|
|
166
138
|
# TODO: disable sorting until we figure out #287
|
|
167
139
|
# https://github.com/deshaw/pyflyby/issues/287
|
|
168
140
|
|
|
169
|
-
# here we get a (single?) PythonBlock, we can access each statement with
|
|
141
|
+
# here we get a (single?) PythonBlock, we can access each statement with
|
|
170
142
|
# >>> block.statements
|
|
171
143
|
# and each statement can have a:
|
|
172
144
|
# is_import
|
|
173
145
|
# or
|
|
174
146
|
# is_comment or blank
|
|
175
|
-
|
|
147
|
+
|
|
176
148
|
# TODO: we do Python(str(...)) in order to unparse-reparse and get proper ast node numbers.
|
|
177
149
|
if options.experimental_sort_imports:
|
|
178
150
|
sorted_imports = PythonBlock(str(sort_imports(block)))
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
coverage:
|
|
2
|
+
status:
|
|
3
|
+
project:
|
|
4
|
+
default:
|
|
5
|
+
threshold: 1%
|
|
6
|
+
target: 70%
|
|
7
|
+
patch:
|
|
8
|
+
default:
|
|
9
|
+
threshold: 1%
|
|
10
|
+
target: 0%
|
|
11
|
+
codecov:
|
|
12
|
+
notify:
|
|
13
|
+
after_n_builds: 6
|
|
14
|
+
comment:
|
|
15
|
+
require_changes: true # if true: only post the PR comment if coverage changes
|
|
16
|
+
after_n_builds: 6
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import os
|
|
5
|
+
import re
|
|
6
|
+
import sys
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
_already_ran_setup = False
|
|
11
|
+
|
|
12
|
+
def pytest_runtest_setup(item):
|
|
13
|
+
"""
|
|
14
|
+
Run the logger setup once.
|
|
15
|
+
"""
|
|
16
|
+
# Although we only bother doing this once (and never tearDown), we still
|
|
17
|
+
# do this in a pytest_runtest_setup, rather than e.g. pytest_configure()
|
|
18
|
+
# because otherwise tox+py.test can get confused by having already loaded
|
|
19
|
+
# pyflyby from a different location.
|
|
20
|
+
global _already_ran_setup
|
|
21
|
+
if _already_ran_setup:
|
|
22
|
+
return
|
|
23
|
+
_already_ran_setup = True
|
|
24
|
+
_setup_logger()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def pytest_ignore_collect(path, config):
|
|
28
|
+
""" return True to prevent considering this path for collection.
|
|
29
|
+
This hook is consulted for all files and directories prior to calling
|
|
30
|
+
more specific hooks.
|
|
31
|
+
"""
|
|
32
|
+
if str(path).endswith('_docxref.py'):
|
|
33
|
+
return True
|
|
34
|
+
|
|
35
|
+
def pytest_report_header(config):
|
|
36
|
+
import IPython
|
|
37
|
+
print("IPython %s" % (IPython.__version__))
|
|
38
|
+
import pyflyby
|
|
39
|
+
dir = os.path.dirname(pyflyby.__file__)
|
|
40
|
+
print("pyflyby %s from %s" % (pyflyby.__version__, dir))
|
|
41
|
+
|
|
42
|
+
if getattr(pytest, 'version_tuple', (0,0))[:2] >= (7, 0):
|
|
43
|
+
def pytest_load_initial_conftests(early_config, parser, args):
|
|
44
|
+
args[:] = ["--no-success-flaky-report", "--no-flaky-report"] + args
|
|
45
|
+
else:
|
|
46
|
+
def pytest_cmdline_preparse(config, args):
|
|
47
|
+
args[:] = ["--no-success-flaky-report", "--no-flaky-report"] + args
|
|
48
|
+
|
|
49
|
+
def _setup_logger():
|
|
50
|
+
"""
|
|
51
|
+
Set up the pyflyby logger to be doctest-friendly.
|
|
52
|
+
"""
|
|
53
|
+
import logging
|
|
54
|
+
import pyflyby
|
|
55
|
+
import sys
|
|
56
|
+
class TestStream(object):
|
|
57
|
+
def write(self, x):
|
|
58
|
+
sys.stdout.write(x)
|
|
59
|
+
sys.stdout.flush()
|
|
60
|
+
def flush(self):
|
|
61
|
+
pass
|
|
62
|
+
test_handler = logging.StreamHandler(TestStream())
|
|
63
|
+
test_handler.formatter = logging.Formatter("[PYFLYBY] %(message)s")
|
|
64
|
+
handler = pyflyby.logger.handlers[0]
|
|
65
|
+
handler.emit = test_handler.emit
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# Set $PYFLYBY_PATH to a predictable value. For other env vars, set to defaults.
|
|
69
|
+
PYFLYBY_HOME = os.path.dirname(os.path.realpath(__file__))
|
|
70
|
+
|
|
71
|
+
os.environ["PYFLYBY_PATH"] = os.path.join(PYFLYBY_HOME, "etc/pyflyby")
|
|
72
|
+
os.environ["PYFLYBY_KNOWN_IMPORTS_PATH"] = ""
|
|
73
|
+
os.environ["PYFLYBY_MANDATORY_IMPORTS_PATH"] = ""
|
|
74
|
+
os.environ["PYFLYBY_LOG_LEVEL"] = ""
|
|
75
|
+
os.environ["PYTHONSTARTUP"] = ""
|
|
76
|
+
|
|
77
|
+
# Make sure that the virtualenv path is first.
|
|
78
|
+
os.environ["PATH"] = "%s:%s" % (os.path.dirname(sys.executable),
|
|
79
|
+
os.environ["PATH"])
|
|
80
|
+
|
|
81
|
+
# Detect whether we're inside tox. (Any better way to do this?)
|
|
82
|
+
in_tox = '/.tox/' in sys.prefix
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
if in_tox:
|
|
86
|
+
# When in tox, we shouldn't have any usercustomize messing this up.
|
|
87
|
+
for k in list(sys.modules.keys()):
|
|
88
|
+
assert not k == "pyflyby" or k.startswith("pyflyby.")
|
|
89
|
+
|
|
90
|
+
import pyflyby
|
|
91
|
+
fn = pyflyby.__file__
|
|
92
|
+
assert fn.startswith(sys.prefix)
|
|
93
|
+
|
|
94
|
+
else:
|
|
95
|
+
# Unload any already-imported pyflyby. This could happen if the user's
|
|
96
|
+
# usercustomize imported pyflyby. That would probably be the "production"
|
|
97
|
+
# pyflyby rather than the one being developed & tested.
|
|
98
|
+
for k in list(sys.modules.keys()):
|
|
99
|
+
if k == "pyflyby" or k.startswith("pyflyby."):
|
|
100
|
+
del sys.modules[k]
|
|
101
|
+
|
|
102
|
+
# Make sure we import pyflyby from this repository, as opposed to any other
|
|
103
|
+
# copy of pyflyby. This does prevent us from testing using the test cases of
|
|
104
|
+
# one repository against the modules from another repository. But that's not
|
|
105
|
+
# a common case; better to avoid confusion in the more common case between
|
|
106
|
+
# production vs development pyflyby.
|
|
107
|
+
pylib = os.path.join(PYFLYBY_HOME, "lib/python")
|
|
108
|
+
sys.path.insert(0, pylib)
|
|
109
|
+
os.environ["PYTHONPATH"] = ":".join(
|
|
110
|
+
[pylib] + list(filter(None, os.environ.get("PYTHONPATH", "").split(":"))))
|
|
111
|
+
import pyflyby
|
|
112
|
+
|
|
113
|
+
fn = re.sub("[.]py[co]$", ".py", pyflyby.__file__)
|
|
114
|
+
expected_fn = os.path.join(PYFLYBY_HOME, "lib/python/pyflyby/__init__.py")
|
|
115
|
+
assert fn == expected_fn, "pyflyby got loaded from %s; expected %s" % (fn, expected_fn)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# The following block is a workaround for IPython 0.11 and earlier versions.
|
|
119
|
+
# These versions of IPython get confused by sys.stdin not being a regular
|
|
120
|
+
# file at import time.
|
|
121
|
+
saved_sys_stdin = sys.stdin
|
|
122
|
+
try:
|
|
123
|
+
sys.stdin = sys.__stdin__
|
|
124
|
+
import IPython
|
|
125
|
+
IPython # pyflakes
|
|
126
|
+
finally:
|
|
127
|
+
sys.stdin = saved_sys_stdin
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
# -- Path setup --------------------------------------------------------------
|
|
4
4
|
import os
|
|
5
|
+
import pathlib
|
|
6
|
+
import re
|
|
5
7
|
import sys
|
|
6
8
|
sys.path.insert(0, os.path.abspath('../lib/python'))
|
|
7
9
|
sys.path.insert(0, os.path.abspath('..'))
|
|
@@ -11,9 +13,21 @@ project = 'pyflyby'
|
|
|
11
13
|
copyright = '2019, Karl Chen'
|
|
12
14
|
author = 'Karl Chen'
|
|
13
15
|
# The full version, including alpha/beta/rc tags
|
|
14
|
-
import pyflyby
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
def find_version():
|
|
18
|
+
# Extract version information via regex to avoid importing
|
|
19
|
+
project_root = pathlib.Path(__file__).parent.parent
|
|
20
|
+
with open(project_root / "lib" / "python" / "pyflyby" / "_version.py") as f:
|
|
21
|
+
version_match = re.search(
|
|
22
|
+
r"^__version__ = ['\"](?P<version>.*)['\"]$",
|
|
23
|
+
f.read(),
|
|
24
|
+
re.M,
|
|
25
|
+
)
|
|
26
|
+
if version_match:
|
|
27
|
+
return version_match.group("version")
|
|
28
|
+
raise RuntimeError("Unable to find version string.")
|
|
29
|
+
|
|
30
|
+
release = find_version()
|
|
17
31
|
|
|
18
32
|
|
|
19
33
|
# -- General configuration ---------------------------------------------------
|
|
@@ -29,6 +43,12 @@ autodoc_default_options = {
|
|
|
29
43
|
'private-members': True
|
|
30
44
|
}
|
|
31
45
|
|
|
46
|
+
autodoc_mock_imports = [
|
|
47
|
+
"pyflyby._fast_iter_modules",
|
|
48
|
+
"platformdirs",
|
|
49
|
+
"prompt_toolkit",
|
|
50
|
+
]
|
|
51
|
+
|
|
32
52
|
html_theme_options = {
|
|
33
53
|
'collapse_navigation': False,
|
|
34
54
|
'navigation_depth': -1,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
local
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
gAAAAABfVnd-u7OJl_rosjRZ5eaALbVJwYnJMh6hu_2AVHxy5zUmNj__R464ih6BgThHhKkKFydiSfY59LzMN46vMteQ_8yJeKqxt6faHCgGKP4sBKwG783cd97jh7a4FvzGdQTHEKylDID5JsD44S3krH0zogsyfnTlxhSwhFKKejIbR4_Q6voxsxOx_EI8_hXLhJZvZJPh6GuY4lflFXV39te6LlPZjYDocGyHGVDXn50v-H6-elsmJFM-P5oqF1taOKS8I0ZASUcd0krCNrXBudRzr7zLE5Rk1p8JuqbU-HTZ0YfcLUXlUIQH8BnMWgVSoUxBsFXVvcxFVJozrQmeIT5zoMDCeWV4Gwj4VWLVLwDYgtSsp0Z2D6vpUX1N__NVXkg4E3baocNXTq85XaMe99HLo-1751sqsgZQbmgFPb8U0wyQBW8p_bNMO2wCp-H3zFGT1wZeWtVj46riO0aQuXAWvkcCB3LLpdFzk7wZaCLDW8irZ2Dt-nmRf80ODfncY3aqIUbg1h7_viaAY1G5Qre1mUYz0PtRjvtc6UN_kOG_zj-p-wtSnJdV9uBrA1G88N5nHRX9KXBaf8BLGQmL3hFhRmjs4do6jMbBTVH6wAuwuA_Fm3327BseUG9Ua_30pMW0FZrHK7ls3f4IGgVEpJ4GTSWOHK_UQvwoGnQn51NTnAIqDraUhy29eimki_2Sei8_xFT87uwfCjqwjRnB8bz4zLboKyfjdrqsCWPg8voYhuS8d-TfyfHv8HE5c7vTSLUu6OO_m8ODAT3s8m1_CdKoU5xF-wa9ysddg395FyEYLge1mBd8qI7ROKdusnpqMEC6ONxlzSFfs24gH-mFKJuqCayvuqF0rH5X7WHViPdhGaBnsavsg-yRGJ1DKeOgF821XMoXZVSeZJ6hHLHUuYZFCP-hWSfH-lGvfYvsauEyJLNAgEwmux3cHLaDKye0aeTG8bwbchCWYLqjs2ruKjIvfuIuQ0moynmw-O0_FlW1EchhEOkk17-7XMH-vLhmxSS_7bJ2a39Rwo9BgPX13blI14zwbFgQUQxpSnjaWCjpExRxPTFTx3yzwAngjEfV3NkHYJbgKPE10FcS4wTo2vC4Dm25lUkl-3t_XfPArmFxDMXFVCwcd6QNZemk0b2S8JHzWT_CIGAxTEO2ubJhycoMwkavP5lkgbM7yoOoKLHrxREfkuoNpCYltm4l1XVKy3lisdODLCjjqhui9TMikvoxlT9SShnPd1OjQhYNq7Iz9EIWi5Sfby3Lx6UYhivhGVhTx9QBpWRVSK0CnyA06wCx2JouqATdZg5awu6ZiRorO5QbgD2avaA0J8o55OCVEfzFdxajjt0RCYy69NY9PjL7CPtm1x2hkHCg7mBWz3AeuEggkyg1TLDIGlEcokgwl6mxonrj1zUL0Nau55A2_FXUcRhloiOsWv5LDakZ7T_af6nyg5m0rgWE8nn-0Wq5260tBHbCVTNTbi9BanhSN3-emcGOCoLzXeqNyKTNTHldXngBdsp_NCmU_hGtIUn-_AYu0jNvFlgUeD3JcfAx9_hcwd751D4_lkHDSMEXtRzj7jzEb-9saYdQmlEEG2vqiFEIk9y6lUwJ6DfeUF67R-fc8ccHmIy9xksRIFRkbH-vw7DosoZZy2g1qm5UzQMGTjgDjCQ1Bpg3XvgyLeUdek_I-fFtn5wNsmU8VbTbnreQ4eWLzbyfGX7jC0oBk8voVhgZvvRcJZ8qabKjs8mOmO9eRbVTiOA4YwMxLjGPGzX0oJbAAPWGmKDKIGoFdJurMaNihwxoAdVmTlyDS_fnPRTp7OCmiNDmij024-feD6NLoTDgrKxviFW0zf70lwhdsS2IC65ZUvPL1pUL8o9oI9DLVMiJKWWqf1z9aU_VPAhNsSxxmaB2AN0vSr-yWtvzzfM6kOJwbxu_nxxgJx02ZVn5iDdmfX111KO9rIHnmJtOVSwVvijn3Eu0u-7csuynQZtqFI07ql-xoUlRnYtZQUILzuBYHuQaw8y9gcTbuyRrgox9ySA5YpRFMej5j0AMSMb04dwOcO1PgIuziD16_o2AQt1czH-Bn2Xq7JUwliHE2fQDoi0yu_bBqT1Y_9etR8Z2aDtGFYCJ6k9083m_emvnJjOI9ZZYf4RJ14lQ7Xy2h0G7FcyTrIgH38_xqmH5PlzoYGmiejpbxAZ5eSBStGn40eFBK8a48Ei3TqSjCqyCUecqD8SW3KRgMo8mL87i4rTpuwWOjOyoYF3_qBFIhExEavo2CZj6fln7fS0fFkJtyteQqfiwHk9qx_WlvRX0cXWqbWnFZLLKPtcHerc-jBlurme7l6CC3QLOqNW78n9BYDrojqqbC-X5rW54F_dm_5Xm6BzV8wLOG77nMxJnUmhmH5_nu34ZDuW46vCmQJdKSlI4TSZL74rzfWP9CFhUyt8RF2kSesP4KieDH_4NPa4GXJfEC76r-7W9LwOOL5E5mPSSXHHJ5Zgfqiokck3-GypGXfdZ4fZKD6HPemLKSfAV1l3XvrfxPHYBQ0kvQtlp8dkyPJ4u5bQlUm3kwXw7tUsri64HoXUaWbryVGkPEo6WqRzVsBrKt-eLLmSbXle5qtwnez3JZU8U50S31TQZCyAUPudugKH0A2BBYMJSZUvxQX0sUbpozLCcu4aQvD27cbvrIzSgr-rcyM3oEOdLfGh-j8owkyg3H76c3UgmpMUwiplwh-kMor2Xo8S4HDbSSsPEoYNuybQAsXWEdNF44cu5EUM8Z7M41OBusEOi4712SXpJciA91ONNmnwrX8UYEw9j1Te90pC0EH2VViHJRtHEjh21WEwogAtBvUYCSKAZxcfrvDLL6Akz4a2DzsPtp--AxHVwSyGq2lZ_c10jSImvZ09HFiPRZl48nkph210J6TeWkoDnClEwNDyHiB_9o5zLbVOmIUebXESPC8xKjQLkZZV7D4NA3TvdQrcmqPl1jHC5EaCtV1B_D5pbKZMoHDTTOLRpikyPh-NCytadABpxtfqnXuATT9CKB1B2dkrV9cKLeLo3-tlzFsBg30Y0n3rGa3Qsk6N4fdAH4EEkrB-3cvH3d-TyiWfxZPHXFTfhxLK_fKZQ5539KLE7MgWi44CPTGGxH6ggoVrU0i5nZzvFZefmwvaWUv8UkeHiq3UhFUCcGrC3ZH5bdGLQZm11JotWqkLnhl_BR1n-sx0SnQk6ac3F9fFPZneYMaO8h5T7bYTUN812uFTYGLIHmBAxjyCkEWwFKpnwIAOmR8LR4wbuEScChao07UL43WgE_9x6xlDPDlt2GzE3cfAotISz9CwVq6CgKf607NgayvionEFj5aHsuo47jfa6jkJVnB15vKLWTtcplPh5IgJsPptR3rHcoLDSmi0Tq4gEBw9ur6MzY-EN-6vFKDelvTUpwr0DKtO0NtkASYE1pIW-SaXRb8uFmBphqjG73l0ZBQFe-B3RQECddPhr0fpODRV0hVrACFma78wBy3tzLUMb3AWMZz0RlXUN5RsAx05BkSqsFqWkcz4DsoJumpnz21XY3BTzNmyEdQ5pOEjPmoq0Dy1V2T1E8r65iFLi4G6eZ1udx50FxmOfpy6Mww3PAThJ2xn23ql_i8BkylEtagmi0clgF1279Ua0dOXxxIixcN4tFi1KqCyqXN86FubVTRdYOIx90NGwjVg4lPtoFUMNBAdqyXPHAPKJoxbLFmLjXvNt5_JardMRZzhX3rEUqIyLjGaOppHv9i7lhjf_yFxlwF9C_GPKCQ9hsmsqoUIufHoDOMUz7tMnW_5FO92FVCpmipDzzmz_rL6qRTRECSgrbOwTxpvV8JVhkuFtvTXuxTgBm8JShKvTU5HW6AIQT_UB_2jVKYj8AFoNRdUYEDL9opfPluqJftYcqVTcZFQyC24FhWq8gVaovDIqb32lWBwzYsiFzDNc61NvhIMA3PVvcti0yl0z1jzmV0kXzCKeM2sG6smtfUW3JuVzgHbJges9lNM4gD2xGYmg5Fnu0l6vHPcbEqYEnUwrhiKHFy5p5Xh45__l6U1RRs1lj5gIhq99kZcPRWD2R14CgnOZ3AhbeK05Bm7y4h17ASTuutz_i3CkBi4rVmGYu2QJ4GtahRT8UEBgVKLaOl89aUaL9_t3CD_C8qEc7OvvnivNI6mcbb3hKh-PoYxktexsBg0-LbaiOh1rDXMRJsm3Cyjr2OjuuExB-m-ywjMEq_PhgUiUzq9E0FzYve_3GBzO5GdwSAUfrnfz3AAuPFfrVtD823epql-SBXVw3nXKxrHbJvdmtUV6j8NZPi-LoIxh9_7lOa5C6ROE2ZY_6aRtYNDUlhlnkS1t62UteAg7kIKgxSjMEtaJabClQAoopLYxYkVm1Mm1dGwavYDZRXh0H2LuNkL_xURD0GzbOXAMIKj1KRNIeOFTcRghja5SRtVfNJ-hV_byRMTbHgSJYA==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pyflyby.egg-info
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.pyc
|
|
@@ -31,6 +31,7 @@ from pyflyby._interactive import (disable_auto_importer,
|
|
|
31
31
|
unload_ipython_extension)
|
|
32
32
|
from pyflyby._livepatch import livepatch, xreload
|
|
33
33
|
from pyflyby._log import logger
|
|
34
|
+
from pyflyby._modules import rebuild_import_cache
|
|
34
35
|
from pyflyby._parse import PythonBlock, PythonStatement
|
|
35
36
|
from pyflyby._saveframe import saveframe
|
|
36
37
|
from pyflyby._saveframe_reader \
|