| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647 | Metadata-Version: 2.1Name: pathspecVersion: 0.12.1Summary: Utility library for gitignore style pattern matching of file paths.Author-email: "Caleb P. Burns" <cpburnz@gmail.com>Requires-Python: >=3.8Description-Content-Type: text/x-rstClassifier: Development Status :: 4 - BetaClassifier: Intended Audience :: DevelopersClassifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)Classifier: Operating System :: OS IndependentClassifier: Programming Language :: PythonClassifier: Programming Language :: Python :: 3Classifier: Programming Language :: Python :: 3.8Classifier: Programming Language :: Python :: 3.9Classifier: Programming Language :: Python :: 3.10Classifier: Programming Language :: Python :: 3.11Classifier: Programming Language :: Python :: 3.12Classifier: Programming Language :: Python :: Implementation :: CPythonClassifier: Programming Language :: Python :: Implementation :: PyPyClassifier: Topic :: Software Development :: Libraries :: Python ModulesClassifier: Topic :: UtilitiesProject-URL: Documentation, https://python-path-specification.readthedocs.io/en/latest/index.htmlProject-URL: Issue Tracker, https://github.com/cpburnz/python-pathspec/issuesProject-URL: Source Code, https://github.com/cpburnz/python-pathspecPathSpec========*pathspec* is a utility library for pattern matching of file paths. Sofar this only includes Git's wildmatch pattern matching which itself isderived from Rsync's wildmatch. Git uses wildmatch for its `gitignore`_files... _`gitignore`: http://git-scm.com/docs/gitignoreTutorial--------Say you have a "Projects" directory and you want to back it up, but onlycertain files, and ignore others depending on certain conditions::	>>> import pathspec	>>> # The gitignore-style patterns for files to select, but we're including	>>> # instead of ignoring.	>>> spec_text = """	...	... # This is a comment because the line begins with a hash: "#"	...	... # Include several project directories (and all descendants) relative to	... # the current directory. To reference a directory you must end with a	... # slash: "/"	... /project-a/	... /project-b/	... /project-c/	...	... # Patterns can be negated by prefixing with exclamation mark: "!"	...	... # Ignore temporary files beginning or ending with "~" and ending with	... # ".swp".	... !~*	... !*~	... !*.swp	...	... # These are python projects so ignore compiled python files from	... # testing.	... !*.pyc	...	... # Ignore the build directories but only directly under the project	... # directories.	... !/*/build/	...	... """We want to use the ``GitWildMatchPattern`` class to compile our patterns. The``PathSpec`` class provides an interface around pattern implementations::	>>> spec = pathspec.PathSpec.from_lines(pathspec.patterns.GitWildMatchPattern, spec_text.splitlines())That may be a mouthful but it allows for additional patterns to be implementedin the future without them having to deal with anything but matching the pathssent to them. ``GitWildMatchPattern`` is the implementation of the actualpattern which internally gets converted into a regular expression. ``PathSpec``is a simple wrapper around a list of compiled patterns.To make things simpler, we can use the registered name for a pattern classinstead of always having to provide a reference to the class itself. The``GitWildMatchPattern`` class is registered as **gitwildmatch**::	>>> spec = pathspec.PathSpec.from_lines('gitwildmatch', spec_text.splitlines())If we wanted to manually compile the patterns we can just do the following::	>>> patterns = map(pathspec.patterns.GitWildMatchPattern, spec_text.splitlines())	>>> spec = PathSpec(patterns)``PathSpec.from_lines()`` is simply a class method which does just that.If you want to load the patterns from file, you can pass the file instancedirectly as well::	>>> with open('patterns.list', 'r') as fh:	>>>     spec = pathspec.PathSpec.from_lines('gitwildmatch', fh)You can perform matching on a whole directory tree with::	>>> matches = spec.match_tree('path/to/directory')Or you can perform matching on a specific set of file paths with::	>>> matches = spec.match_files(file_paths)Or check to see if an individual file matches::	>>> is_matched = spec.match_file(file_path)There is a specialized class, ``pathspec.GitIgnoreSpec``, which more closelyimplements the behavior of **gitignore**. This uses ``GitWildMatchPattern``pattern by default and handles some edge cases differently from the generic``PathSpec`` class. ``GitIgnoreSpec`` can be used without specifying the patternfactory::	>>> spec = pathspec.GitIgnoreSpec.from_lines(spec_text.splitlines())License-------*pathspec* is licensed under the `Mozilla Public License Version 2.0`_. See`LICENSE`_ or the `FAQ`_ for more information.In summary, you may use *pathspec* with any closed or open source projectwithout affecting the license of the larger work so long as you:- give credit where credit is due,- and release any custom changes made to *pathspec*... _`Mozilla Public License Version 2.0`: http://www.mozilla.org/MPL/2.0.. _`LICENSE`: LICENSE.. _`FAQ`: http://www.mozilla.org/MPL/2.0/FAQ.htmlSource------The source code for *pathspec* is available from the GitHub repo`cpburnz/python-pathspec`_... _`cpburnz/python-pathspec`: https://github.com/cpburnz/python-pathspecInstallation------------*pathspec* is available for install through `PyPI`_::	pip install pathspec*pathspec* can also be built from source. The following packages will berequired:- `build`_ (>=0.6.0)*pathspec* can then be built and installed with::	python -m build	pip install dist/pathspec-*-py3-none-any.whl.. _`PyPI`: http://pypi.python.org/pypi/pathspec.. _`build`: https://pypi.org/project/build/Documentation-------------Documentation for *pathspec* is available on `Read the Docs`_... _`Read the Docs`: https://python-path-specification.readthedocs.ioOther Languages---------------The related project `pathspec-ruby`_ (by *highb*) provides a similar library asa `Ruby gem`_... _`pathspec-ruby`: https://github.com/highb/pathspec-ruby.. _`Ruby gem`: https://rubygems.org/gems/pathspecChange History==============0.12.1 (2023-12-10)-------------------Bug fixes:- `Issue #84`_: PathSpec.match_file() returns None since 0.12.0... _`Issue #84`: https://github.com/cpburnz/python-pathspec/issues/840.12.0 (2023-12-09)-------------------Major changes:- Dropped support of EOL Python 3.7. See `Pull #82`_.API changes:- Signature of protected method `pathspec.pathspec.PathSpec._match_file()` (with a leading underscore) has been changed from `def _match_file(patterns: Iterable[Pattern], file: str) -> bool` to `def _match_file(patterns: Iterable[Tuple[int, Pattern]], file: str) -> Tuple[Optional[bool], Optional[int]]`.New features:- Added `pathspec.pathspec.PathSpec.check_*()` methods. These methods behave similarly to `.match_*()` but return additional information in the `pathspec.util.CheckResult` objects (e.g., `CheckResult.index` indicates the index of the last pattern that matched the file).- Added `pathspec.pattern.RegexPattern.pattern` attribute which stores the original, uncompiled pattern.Bug fixes:- `Issue #81`_: GitIgnoreSpec behaviors differ from git.- `Pull #83`_: Fix ReadTheDocs builds.Improvements:- Mark Python 3.12 as supported. See `Pull #82`_.- Improve test debugging.- Improve type hint on *on_error* parameter on `pathspec.pathspec.PathSpec.match_tree_entries()`.- Improve type hint on *on_error* parameter on `pathspec.util.iter_tree_entries()`... _`Issue #81`: https://github.com/cpburnz/python-pathspec/issues/81.. _`Pull #82`: https://github.com/cpburnz/python-pathspec/pull/82.. _`Pull #83`: https://github.com/cpburnz/python-pathspec/pull/830.11.2 (2023-07-28)-------------------New features:- `Issue #80`_: match_files with negated path spec. `pathspec.PathSpec.match_*()` now have a `negate` parameter to make using *.gitignore* logic easier and more efficient.Bug fixes:- `Pull #76`_: Add edge case: patterns that end with an escaped space- `Issue #77`_/`Pull #78`_: Negate with caret symbol as with the exclamation mark... _`Pull #76`: https://github.com/cpburnz/python-pathspec/pull/76.. _`Issue #77`: https://github.com/cpburnz/python-pathspec/issues/77.. _`Pull #78`: https://github.com/cpburnz/python-pathspec/pull/78/.. _`Issue #80`: https://github.com/cpburnz/python-pathspec/issues/800.11.1 (2023-03-14)-------------------Bug fixes:- `Issue #74`_: Include directory should override exclude file.Improvements:- `Pull #75`_: Fix partially unknown PathLike type.- Convert `os.PathLike` to a string properly using `os.fspath`... _`Issue #74`: https://github.com/cpburnz/python-pathspec/issues/74.. _`Pull #75`: https://github.com/cpburnz/python-pathspec/pull/750.11.0 (2023-01-24)-------------------Major changes:- Changed build backend to `flit_core.buildapi`_ from `setuptools.build_meta`_. Building with `setuptools` through `setup.py` is still supported for distributions that need it. See `Issue #72`_.Improvements:- `Issue #72`_/`Pull #73`_: Please consider switching the build-system to flit_core to ease setuptools bootstrap... _`flit_core.buildapi`: https://flit.pypa.io/en/latest/index.html.. _`Issue #72`: https://github.com/cpburnz/python-pathspec/issues/72.. _`Pull #73`: https://github.com/cpburnz/python-pathspec/pull/730.10.3 (2022-12-09)-------------------New features:- Added utility function `pathspec.util.append_dir_sep()` to aid in distinguishing between directories and files on the file-system. See `Issue #65`_.Bug fixes:- `Issue #66`_/`Pull #67`_: Package not marked as py.typed.- `Issue #68`_: Exports are considered private.- `Issue #70`_/`Pull #71`_: 'Self' string literal type is Unknown in pyright.Improvements:- `Issue #65`_: Checking directories via match_file() does not work on Path objects... _`Issue #65`: https://github.com/cpburnz/python-pathspec/issues/65.. _`Issue #66`: https://github.com/cpburnz/python-pathspec/issues/66.. _`Pull #67`: https://github.com/cpburnz/python-pathspec/pull/67.. _`Issue #68`: https://github.com/cpburnz/python-pathspec/issues/68.. _`Issue #70`: https://github.com/cpburnz/python-pathspec/issues/70.. _`Pull #71`: https://github.com/cpburnz/python-pathspec/pull/710.10.2 (2022-11-12)-------------------Bug fixes:- Fix failing tests on Windows.- Type hint on *root* parameter on `pathspec.pathspec.PathSpec.match_tree_entries()`.- Type hint on *root* parameter on `pathspec.pathspec.PathSpec.match_tree_files()`.- Type hint on *root* parameter on `pathspec.util.iter_tree_entries()`.- Type hint on *root* parameter on `pathspec.util.iter_tree_files()`.- `Issue #64`_: IndexError with my .gitignore file when trying to build a Python package.Improvements:- `Pull #58`_: CI: add GitHub Actions test workflow... _`Pull #58`: https://github.com/cpburnz/python-pathspec/pull/58.. _`Issue #64`: https://github.com/cpburnz/python-pathspec/issues/640.10.1 (2022-09-02)-------------------Bug fixes:- Fix documentation on `pathspec.pattern.RegexPattern.match_file()`.- `Pull #60`_: Remove redundant wheel dep from pyproject.toml.- `Issue #61`_: Dist failure for Fedora, CentOS, EPEL.- `Issue #62`_: Since version 0.10.0 pure wildcard does not work in some cases.Improvements:- Restore support for legacy installations using `setup.py`. See `Issue #61`_... _`Pull #60`: https://github.com/cpburnz/python-pathspec/pull/60.. _`Issue #61`: https://github.com/cpburnz/python-pathspec/issues/61.. _`Issue #62`: https://github.com/cpburnz/python-pathspec/issues/620.10.0 (2022-08-30)-------------------Major changes:- Dropped support of EOL Python 2.7, 3.5, 3.6. See `Issue #47`_.- The *gitwildmatch* pattern `dir/*` is now handled the same as `dir/`. This means `dir/*` will now match all descendants rather than only direct children. See `Issue #19`_.- Added `pathspec.GitIgnoreSpec` class (see new features).- Changed build system to `pyproject.toml`_ and build backend to `setuptools.build_meta`_ which may have unforeseen consequences.- Renamed GitHub project from `python-path-specification`_ to `python-pathspec`_. See `Issue #35`_.API changes:- Deprecated: `pathspec.util.match_files()` is an old function no longer used.- Deprecated: `pathspec.match_files()` is an old function no longer used.- Deprecated: `pathspec.util.normalize_files()` is no longer used.- Deprecated: `pathspec.util.iter_tree()` is an alias for `pathspec.util.iter_tree_files()`.- Deprecated: `pathspec.iter_tree()` is an alias for `pathspec.util.iter_tree_files()`.-	Deprecated: `pathspec.pattern.Pattern.match()` is no longer used. Use or implement	`pathspec.pattern.Pattern.match_file()`.New features:- Added class `pathspec.gitignore.GitIgnoreSpec` (with alias `pathspec.GitIgnoreSpec`) to implement *gitignore* behavior not possible with standard `PathSpec` class. The particular *gitignore* behavior implemented is prioritizing patterns matching the file directly over matching an ancestor directory.Bug fixes:- `Issue #19`_: Files inside an ignored sub-directory are not matched.- `Issue #41`_: Incorrectly (?) matches files inside directories that do match.- `Pull #51`_: Refactor deprecated unittest aliases for Python 3.11 compatibility.- `Issue #53`_: Symlink pathspec_meta.py breaks Windows.- `Issue #54`_: test_util.py uses os.symlink which can fail on Windows.- `Issue #55`_: Backslashes at start of pattern not handled correctly.- `Pull #56`_: pyproject.toml: include subpackages in setuptools config- `Issue #57`_: `!` doesn't exclude files in directories if the pattern doesn't have a trailing slash.Improvements:- Support Python 3.10, 3.11.- Modernize code to Python 3.7.- `Issue #52`_: match_files() is not a pure generator function, and it impacts tree_*() gravely... _`python-path-specification`: https://github.com/cpburnz/python-path-specification.. _`python-pathspec`: https://github.com/cpburnz/python-pathspec.. _`pyproject.toml`: https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml/.. _`setuptools.build_meta`: https://setuptools.pypa.io/en/latest/build_meta.html.. _`Issue #19`: https://github.com/cpburnz/python-pathspec/issues/19.. _`Issue #35`: https://github.com/cpburnz/python-pathspec/issues/35.. _`Issue #41`: https://github.com/cpburnz/python-pathspec/issues/41.. _`Issue #47`: https://github.com/cpburnz/python-pathspec/issues/47.. _`Pull #51`: https://github.com/cpburnz/python-pathspec/pull/51.. _`Issue #52`: https://github.com/cpburnz/python-pathspec/issues/52.. _`Issue #53`: https://github.com/cpburnz/python-pathspec/issues/53.. _`Issue #54`: https://github.com/cpburnz/python-pathspec/issues/54.. _`Issue #55`: https://github.com/cpburnz/python-pathspec/issues/55.. _`Pull #56`: https://github.com/cpburnz/python-pathspec/pull/56.. _`Issue #57`: https://github.com/cpburnz/python-pathspec/issues/570.9.0 (2021-07-17)------------------- `Issue #44`_/`Pull #50`_: Raise `GitWildMatchPatternError` for invalid git patterns.- `Pull #45`_: Fix for duplicate leading double-asterisk, and edge cases.- `Issue #46`_: Fix matching absolute paths.- API change: `util.normalize_files()` now returns a `Dict[str, List[pathlike]]` instead of a `Dict[str, pathlike]`.- Added type hinting... _`Issue #44`: https://github.com/cpburnz/python-pathspec/issues/44.. _`Pull #45`: https://github.com/cpburnz/python-pathspec/pull/45.. _`Issue #46`: https://github.com/cpburnz/python-pathspec/issues/46.. _`Pull #50`: https://github.com/cpburnz/python-pathspec/pull/500.8.1 (2020-11-07)------------------- `Pull #43`_: Add support for addition operator... _`Pull #43`: https://github.com/cpburnz/python-pathspec/pull/430.8.0 (2020-04-09)------------------- `Issue #30`_: Expose what patterns matched paths. Added `util.detailed_match_files()`.- `Issue #31`_: `match_tree()` doesn't return symlinks.- `Issue #34`_: Support `pathlib.Path`\ s.- Add `PathSpec.match_tree_entries` and `util.iter_tree_entries()` to support directories and symlinks.- API change: `match_tree()` has been renamed to `match_tree_files()`. The old name `match_tree()` is still available as an alias.- API change: `match_tree_files()` now returns symlinks. This is a bug fix but it will change the returned results... _`Issue #30`: https://github.com/cpburnz/python-pathspec/issues/30.. _`Issue #31`: https://github.com/cpburnz/python-pathspec/issues/31.. _`Issue #34`: https://github.com/cpburnz/python-pathspec/issues/340.7.0 (2019-12-27)------------------- `Pull #28`_: Add support for Python 3.8, and drop Python 3.4.- `Pull #29`_: Publish bdist wheel... _`Pull #28`: https://github.com/cpburnz/python-pathspec/pull/28.. _`Pull #29`: https://github.com/cpburnz/python-pathspec/pull/290.6.0 (2019-10-03)------------------- `Pull #24`_: Drop support for Python 2.6, 3.2, and 3.3.- `Pull #25`_: Update README.rst.- `Pull #26`_: Method to escape gitwildmatch... _`Pull #24`: https://github.com/cpburnz/python-pathspec/pull/24.. _`Pull #25`: https://github.com/cpburnz/python-pathspec/pull/25.. _`Pull #26`: https://github.com/cpburnz/python-pathspec/pull/260.5.9 (2018-09-15)------------------- Fixed file system error handling.0.5.8 (2018-09-15)------------------- Improved type checking.- Created scripts to test Python 2.6 because Tox removed support for it.- Improved byte string handling in Python 3.- `Issue #22`_: Handle dangling symlinks... _`Issue #22`: https://github.com/cpburnz/python-pathspec/issues/220.5.7 (2018-08-14)------------------- `Issue #21`_: Fix collections deprecation warning... _`Issue #21`: https://github.com/cpburnz/python-pathspec/issues/210.5.6 (2018-04-06)------------------- Improved unit tests.- Improved type checking.- `Issue #20`_: Support current directory prefix... _`Issue #20`: https://github.com/cpburnz/python-pathspec/issues/200.5.5 (2017-09-09)------------------- Add documentation link to README.0.5.4 (2017-09-09)------------------- `Pull #17`_: Add link to Ruby implementation of *pathspec*.- Add sphinx documentation... _`Pull #17`: https://github.com/cpburnz/python-pathspec/pull/170.5.3 (2017-07-01)------------------- `Issue #14`_: Fix byte strings for Python 3.- `Pull #15`_: Include "LICENSE" in source package.- `Issue #16`_: Support Python 2.6... _`Issue #14`: https://github.com/cpburnz/python-pathspec/issues/14.. _`Pull #15`: https://github.com/cpburnz/python-pathspec/pull/15.. _`Issue #16`: https://github.com/cpburnz/python-pathspec/issues/160.5.2 (2017-04-04)------------------- Fixed change log.0.5.1 (2017-04-04)------------------- `Pull #13`_: Add equality methods to `PathSpec` and `RegexPattern`... _`Pull #13`: https://github.com/cpburnz/python-pathspec/pull/130.5.0 (2016-08-22)------------------- `Issue #12`_: Add `PathSpec.match_file()`.- Renamed `gitignore.GitIgnorePattern` to `patterns.gitwildmatch.GitWildMatchPattern`.- Deprecated `gitignore.GitIgnorePattern`... _`Issue #12`: https://github.com/cpburnz/python-pathspec/issues/120.4.0 (2016-07-15)------------------- `Issue #11`_: Support converting patterns into regular expressions without compiling them.- API change: Subclasses of `RegexPattern` should implement `pattern_to_regex()`... _`Issue #11`: https://github.com/cpburnz/python-pathspec/issues/110.3.4 (2015-08-24)------------------- `Pull #7`_: Fixed non-recursive links.- `Pull #8`_: Fixed edge cases in gitignore patterns.- `Pull #9`_: Fixed minor usage documentation.- Fixed recursion detection.- Fixed trivial incompatibility with Python 3.2... _`Pull #7`: https://github.com/cpburnz/python-pathspec/pull/7.. _`Pull #8`: https://github.com/cpburnz/python-pathspec/pull/8.. _`Pull #9`: https://github.com/cpburnz/python-pathspec/pull/90.3.3 (2014-11-21)------------------- Improved documentation.0.3.2 (2014-11-08)------------------- `Pull #5`_: Use tox for testing.- `Issue #6`_: Fixed matching Windows paths.- Improved documentation.- API change: `spec.match_tree()` and `spec.match_files()` now return iterators instead of sets... _`Pull #5`: https://github.com/cpburnz/python-pathspec/pull/5.. _`Issue #6`: https://github.com/cpburnz/python-pathspec/issues/60.3.1 (2014-09-17)------------------- Updated README.0.3.0 (2014-09-17)------------------- `Pull #3`_: Fixed trailing slash in gitignore patterns.- `Pull #4`_: Fixed test for trailing slash in gitignore patterns.- Added registered patterns... _`Pull #3`: https://github.com/cpburnz/python-pathspec/pull/3.. _`Pull #4`: https://github.com/cpburnz/python-pathspec/pull/40.2.2 (2013-12-17)------------------- Fixed setup.py.0.2.1 (2013-12-17)------------------- Added tests.- Fixed comment gitignore patterns.- Fixed relative path gitignore patterns.0.2.0 (2013-12-07)------------------- Initial release.
 |