Metadata-Version: 2.1 Name: pathvalidate Version: 3.2.3 Summary: pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc. Home-page: https://github.com/thombashi/pathvalidate Author: Tsuyoshi Hombashi Author-email: tsuyoshi.hombashi@gmail.com License: MIT License Project-URL: Changelog, https://github.com/thombashi/pathvalidate/blob/master/CHANGELOG.md Project-URL: Documentation, https://pathvalidate.rtfd.io/ Project-URL: Source, https://github.com/thombashi/pathvalidate Project-URL: Tracker, https://github.com/thombashi/pathvalidate/issues Keywords: file,path,validation,validator,sanitization,sanitizer Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Information Technology Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: System :: Filesystems Classifier: Topic :: Text Processing Classifier: Typing :: Typed Requires-Python: >=3.9 Description-Content-Type: text/x-rst License-File: LICENSE Provides-Extra: docs Requires-Dist: sphinx_rtd_theme>=1.2.2; extra == "docs" Requires-Dist: Sphinx>=2.4; extra == "docs" Requires-Dist: urllib3<2; extra == "docs" Provides-Extra: readme Requires-Dist: readmemaker>=1.2.0; extra == "readme" Requires-Dist: path<18,>=13; extra == "readme" Provides-Extra: test Requires-Dist: allpairspy>=2; extra == "test" Requires-Dist: click>=6.2; extra == "test" Requires-Dist: Faker>=1.0.8; extra == "test" Requires-Dist: pytest>=6.0.1; extra == "test" Requires-Dist: pytest-md-report>=0.6.2; extra == "test" .. contents:: **pathvalidate** :backlinks: top :depth: 2 Summary ========= `pathvalidate `__ is a Python library to sanitize/validate a string such as filenames/file-paths/etc. |PyPI pkg ver| |conda pkg ver| |Supported Python ver| |Supported Python impl| |CI status| |Test coverage| |CodeQL| .. |PyPI pkg ver| image:: https://badge.fury.io/py/pathvalidate.svg :target: https://badge.fury.io/py/pathvalidate :alt: PyPI package version .. |conda pkg ver| image:: https://anaconda.org/conda-forge/pathvalidate/badges/version.svg :target: https://anaconda.org/conda-forge/pathvalidate :alt: conda package version .. |Supported Python ver| image:: https://img.shields.io/pypi/pyversions/pathvalidate.svg :target: https://pypi.org/project/pathvalidate :alt: Supported Python versions .. |Supported Python impl| image:: https://img.shields.io/pypi/implementation/pathvalidate.svg :target: https://pypi.org/project/pathvalidate :alt: Supported Python implementations .. |CI status| image:: https://github.com/thombashi/pathvalidate/actions/workflows/ci.yml/badge.svg :target: https://github.com/thombashi/pathvalidate/actions/workflows/ci.yml :alt: CI status of Linux/macOS/Windows .. |Test coverage| image:: https://coveralls.io/repos/github/thombashi/pathvalidate/badge.svg?branch=master :target: https://coveralls.io/github/thombashi/pathvalidate?branch=master :alt: Test coverage: coveralls .. |CodeQL| image:: https://github.com/thombashi/pathvalidate/actions/workflows/github-code-scanning/codeql/badge.svg :target: https://github.com/thombashi/pathvalidate/actions/workflows/github-code-scanning/codeql :alt: CodeQL Features --------- - Sanitize/Validate a string as a: - file name - file path - Sanitize will do: - Remove invalid characters for a target platform - Replace reserved names for a target platform - Normalize - Remove unprintable characters - Argument validator/sanitizer for ``argparse`` and ``click`` - Multi platform support: - ``Linux`` - ``Windows`` - ``macOS`` - ``POSIX``: POSIX-compliant systems (Linux, macOS, etc.) - ``universal``: platform independent - Multibyte character support CLI tool --------- You can find this package's command line interface tool at the `pathvalidate-cli `__ repository. Examples ========== Sanitize a filename --------------------- :Sample Code: .. code-block:: python from pathvalidate import sanitize_filename fname = "fi:l*e/p\"a?t>h|.t {sanitize_filename(fname)}\n") fname = "\0_a*b:ce%f/(g)h+i_0.txt" print(f"{fname} -> {sanitize_filename(fname)}\n") :Output: .. code-block:: fi:l*e/p"a?t>h|.t filepath.txt _a*b:ce%f/(g)h+i_0.txt -> _abcde%f(g)h+i_0.txt The default target ``platform`` is ``universal``. i.e. the sanitized file name is valid for any platform. Sanitize a filepath --------------------- :Sample Code: .. code-block:: python from pathvalidate import sanitize_filepath fpath = "fi:l*e/p\"a?t>h|.t {sanitize_filepath(fpath)}\n") fpath = "\0_a*b:ce%f/(g)h+i_0.txt" print(f"{fpath} -> {sanitize_filepath(fpath)}\n") :Output: .. code-block:: fi:l*e/p"a?t>h|.t file/path.txt _a*b:ce%f/(g)h+i_0.txt -> _abcde%f/(g)h+i_0.txt Validate a filename --------------------- :Sample Code: .. code-block:: python import sys from pathvalidate import ValidationError, validate_filename try: validate_filename("fi:l*e/p\"a?t>h|.th|.th|.t None: if filename: click.echo(f"filename: {filename}") if filepath: click.echo(f"filepath: {filepath}") if __name__ == "__main__": cli() :Output: .. code-block:: $ ./examples/click_validate.py --filename ab filename: ab $ ./examples/click_validate.py --filepath e?g Usage: click_validate.py [OPTIONS] Try 'click_validate.py --help' for help. Error: Invalid value for '--filename': [PV1100] invalid characters found: invalids=('?'), value='e?g', platform=Windows filename/filepath sanitizer for ``click`` ------------------------------------------- :Sample Code: .. code-block:: python import click from pathvalidate.click import sanitize_filename_arg, sanitize_filepath_arg @click.command() @click.option("--filename", callback=sanitize_filename_arg) @click.option("--filepath", callback=sanitize_filepath_arg) def cli(filename, filepath): if filename: click.echo(f"filename: {filename}") if filepath: click.echo(f"filepath: {filepath}") if __name__ == "__main__": cli() :Output: .. code-block:: $ ./examples/click_sanitize.py --filename a/b filename: ab For more information ---------------------- More examples can be found at https://pathvalidate.rtfd.io/en/latest/pages/examples/index.html Installation ============ Installation: pip ------------------------------ :: pip install pathvalidate Installation: conda ------------------------------ :: conda install conda-forge::pathvalidate Installation: apt ------------------------------ :: sudo add-apt-repository ppa:thombashi/ppa sudo apt update sudo apt install python3-pathvalidate Dependencies ============ Python 3.9+ no external dependencies. Documentation =============== https://pathvalidate.rtfd.io/ Sponsors ==================================== |chasbecker| |shiguredo| |b4tman| |Arturi0| |github| .. |chasbecker| image:: https://avatars.githubusercontent.com/u/44389260?s=48&u=6da7176e51ae2654bcfd22564772ef8a3bb22318&v=4 :target: https://github.com/chasbecker :alt: ex-sponsor: Charles Becker (chasbecker) .. |shiguredo| image:: https://avatars.githubusercontent.com/u/2549434?s=48&v=4 :target: https://github.com/shiguredo :alt: ex-sponsor: 時雨堂 (shiguredo) .. |b4tman| image:: https://avatars.githubusercontent.com/u/3658062?s=48&v=4 :target: https://github.com/b4tman :alt: onetime: Dmitry Belyaev (b4tman) .. |Arturi0| image:: https://avatars.githubusercontent.com/u/46711571?s=48&u=57687c0e02d5d6e8eeaf9177f7b7af4c9f275eb5&v=4 :target: https://github.com/Arturi0 :alt: onetime: Arturi0 .. |github| image:: https://avatars.githubusercontent.com/u/9919?s=48&v=4 :target: https://github.com/github :alt: onetime: GitHub (github) `Become a sponsor `__