# pathier
Extends the standard library pathlib.Path class.
## Installation
Install with:
```console
pip install pathier
```
## Usage
Functions the same as pathlib.Path, but with added functions and some altered default arguments.
#### Navigation
New paths can be obtained by:
* naming the parent with moveup()
* subtracting a number of levels from the current path
* naming the parent of the path you actually want with move_under()
* separating a relative path at a named parent with separate()
* set current working directory to path
```python
>>> from pathier import Pathier
>>> path = Pathier("C:/some/directory/to/some/file/on/the/system")
>>> path.moveup("directory")
WindowsPath('C:/some/directory')
>>> path - 3
WindowsPath('C:/some/directory/to/some/file')
>>> path.move_under("directory")
WindowsPath('C:/some/directory/to')
>>> path.separate("file")
WindowsPath('on/the/system')
>>> path.separate("file", True)
WindowsPath('file/on/the/system')
>>> path.mkcwd()
>>> Pathier.cwd()
WindowsPath('C:/some/directory/to/some/file/on/the/system')
```
#### Environment PATH Variable
Pathier objects can be added and removed from sys.path:
(The path will only be added if it isn't already in sys.path)
```python
>>> from pathier import Pathier
>>> path = Pathier.cwd()
>>> path.in_PATH
False
>>> path.add_to_PATH(0)
>>> path.in_PATH
True
>>> path.remove_from_PATH()
>>> path.in_PATH
False
>>> path.append_to_PATH()
>>> path.in_PATH
True
```
#### Read and Write
Can dump and load toml, json, and pickle files without needed to explicityly import and call functions from the respective libraries:
```python
from pathier import Pathier
path = Pathier("some_file.toml")
content = path.loads()
path.with_suffix(".json").dumps(content, indent=2)
```
`Pathier().mkdir()` creates parent directories and doesn't throw an error if the path already exists by default.
`Pathier().write_text()` and `Pathier().write_bytes()` will create parent directories by default if they won't exist.
`Pathier().write_text()` will also try to cast the data to be written to a string if a TypeError is thrown.
`Pathier().delete()` will delete a file or directory, event if that directory isn't empty.
`Pathier().copy()` will copy a file or a directory tree to a new destination and return a Pathier object for the new path
By default, files in the destination will not be overwritten.
`Pathier().backup()` will create a copy of the path with `_backup` appended to the stem.
If the optional parameter, `timestamp`, is `True`, a datetime string will be added after `_backup` to prevent overwriting previous backup files.
`Pathier().replace_strings()` takes a list of string pairs and will read the file the instance points to, replace the first of each pair with the second of each pair, and then write it back to the file.
Essentially just condenses reading the file, using str.replace(), and then writing the new content into one function call.
`Pathier().execute()` wraps calling `os.system()` on the path pointed to be the `Pathier` instance.
Optional strings that should come before and after the path string can be specified with the `command` and `args` params, respectively.
`Pathier("file.py").execute("py", "--iterations 10")` is equivalent to `os.system("py file.py --iterations 10")`
`Pathier().append()` will append the given string to the file pointed at by the instance.
`Pathier().join(data)` is equivalent to calling `Pathier().write_text("\n".join(data))`.
The joining string can be specified with the `sep` parameter.
`Pathier().split()` is equivalent to calling `Pathier().read_text().splitlines()`.
Optionally, line endings can be kept with `Pathier().split(keepends=True)`.
#### Stats and Comparisons
```python
>>> from pathier import Pathier
>>> p = Pathier.cwd() / "pathier.py"
>>> i = p.parent / "__init__.py"
>>> p.dob
datetime.datetime(2023, 3, 31, 18, 43, 12, 360000)
>>> p.age
8846.024934
>>> p.mod_date
datetime.datetime(2023, 3, 31, 21, 7, 30)
>>> p.mod_delta
207.488857
>>> p.size
10744
>>> p.format_bytes(p.size)
'10.74 kb'
>>> p.formatted_size
'10.74 kb'
>>> p.is_larger(i)
True
>>> p.is_older(i)
False
>>> p.modified_more_recently(i)
True
```
#### CLI Scripts
Execute `sizeup` from a terminal to get a grid of sub-directories and their sizes.
```console
P:\python\projects\pathier>sizeup
Sizing up 7 directories...
Scanning 'dist' [____________________________________________________________________________________________________________________________________________]-100.00%
+---------------+-----------+
| Dir | Size |
+===============+===========+
| docs | 362.74 kb |
+---------------+-----------+
| tests | 63.69 kb |
+---------------+-----------+
| dist | 61.78 kb |
+---------------+-----------+
| src | 50.91 kb |
+---------------+-----------+
| .git | 24.25 kb |
+---------------+-----------+
| .pytest_cache | 540 bytes |
+---------------+-----------+
| .vscode | 197 bytes |
+---------------+-----------+
Total size of 'P:\python\projects\pathier': 564.11 kb
sizeup average execution time: 37ms 895us
```
Raw data
{
"_id": null,
"home_page": null,
"name": "pathier",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.12,>=3.10",
"maintainer_email": null,
"keywords": "extender, extension, json, path, pathlib, shutil, toml",
"author": null,
"author_email": "Matt Manes <mattmanes@pm.me>",
"download_url": "https://files.pythonhosted.org/packages/a0/64/ffe5d3ba9b336e9327f1bc4447ccacc8b9544718de04b30b275c49cbd371/pathier-1.5.4.tar.gz",
"platform": null,
"description": "# pathier\n\nExtends the standard library pathlib.Path class.\n\n## Installation\n\nInstall with:\n\n```console\npip install pathier\n```\n\n## Usage\n\nFunctions the same as pathlib.Path, but with added functions and some altered default arguments. \n\n#### Navigation\n\nNew paths can be obtained by: \n\n* naming the parent with moveup()\n* subtracting a number of levels from the current path\n* naming the parent of the path you actually want with move_under()\n* separating a relative path at a named parent with separate()\n* set current working directory to path\n\n```python\n>>> from pathier import Pathier\n>>> path = Pathier(\"C:/some/directory/to/some/file/on/the/system\")\n>>> path.moveup(\"directory\")\nWindowsPath('C:/some/directory')\n>>> path - 3\nWindowsPath('C:/some/directory/to/some/file')\n>>> path.move_under(\"directory\")\nWindowsPath('C:/some/directory/to')\n>>> path.separate(\"file\")\nWindowsPath('on/the/system')\n>>> path.separate(\"file\", True)\nWindowsPath('file/on/the/system')\n>>> path.mkcwd()\n>>> Pathier.cwd()\nWindowsPath('C:/some/directory/to/some/file/on/the/system')\n```\n\n#### Environment PATH Variable\n\nPathier objects can be added and removed from sys.path: \n(The path will only be added if it isn't already in sys.path)\n\n```python\n>>> from pathier import Pathier\n>>> path = Pathier.cwd()\n>>> path.in_PATH\nFalse\n>>> path.add_to_PATH(0)\n>>> path.in_PATH\nTrue\n>>> path.remove_from_PATH()\n>>> path.in_PATH\nFalse\n>>> path.append_to_PATH()\n>>> path.in_PATH\nTrue\n```\n\n#### Read and Write\n\nCan dump and load toml, json, and pickle files without needed to explicityly import and call functions from the respective libraries:\n\n```python\nfrom pathier import Pathier\npath = Pathier(\"some_file.toml\")\ncontent = path.loads()\npath.with_suffix(\".json\").dumps(content, indent=2)\n```\n\n`Pathier().mkdir()` creates parent directories and doesn't throw an error if the path already exists by default. \n\n`Pathier().write_text()` and `Pathier().write_bytes()` will create parent directories by default if they won't exist. \n\n`Pathier().write_text()` will also try to cast the data to be written to a string if a TypeError is thrown. \n\n`Pathier().delete()` will delete a file or directory, event if that directory isn't empty. \n\n`Pathier().copy()` will copy a file or a directory tree to a new destination and return a Pathier object for the new path \nBy default, files in the destination will not be overwritten. \n\n`Pathier().backup()` will create a copy of the path with `_backup` appended to the stem.\nIf the optional parameter, `timestamp`, is `True`, a datetime string will be added after `_backup` to prevent overwriting previous backup files. \n\n`Pathier().replace_strings()` takes a list of string pairs and will read the file the instance points to, replace the first of each pair with the second of each pair, and then write it back to the file. \nEssentially just condenses reading the file, using str.replace(), and then writing the new content into one function call. \n\n`Pathier().execute()` wraps calling `os.system()` on the path pointed to be the `Pathier` instance. \nOptional strings that should come before and after the path string can be specified with the `command` and `args` params, respectively. \n`Pathier(\"file.py\").execute(\"py\", \"--iterations 10\")` is equivalent to `os.system(\"py file.py --iterations 10\")` \n\n`Pathier().append()` will append the given string to the file pointed at by the instance. \n\n`Pathier().join(data)` is equivalent to calling `Pathier().write_text(\"\\n\".join(data))`. \nThe joining string can be specified with the `sep` parameter. \n\n`Pathier().split()` is equivalent to calling `Pathier().read_text().splitlines()`. \nOptionally, line endings can be kept with `Pathier().split(keepends=True)`. \n\n#### Stats and Comparisons\n\n```python\n>>> from pathier import Pathier\n>>> p = Pathier.cwd() / \"pathier.py\"\n>>> i = p.parent / \"__init__.py\"\n>>> p.dob\ndatetime.datetime(2023, 3, 31, 18, 43, 12, 360000)\n>>> p.age\n8846.024934\n>>> p.mod_date\ndatetime.datetime(2023, 3, 31, 21, 7, 30)\n>>> p.mod_delta\n207.488857\n>>> p.size\n10744\n>>> p.format_bytes(p.size)\n'10.74 kb'\n>>> p.formatted_size\n'10.74 kb'\n>>> p.is_larger(i)\nTrue\n>>> p.is_older(i)\nFalse\n>>> p.modified_more_recently(i)\nTrue\n```\n\n#### CLI Scripts\n\nExecute `sizeup` from a terminal to get a grid of sub-directories and their sizes.\n\n```console\nP:\\python\\projects\\pathier>sizeup\nSizing up 7 directories...\nScanning 'dist' [____________________________________________________________________________________________________________________________________________]-100.00%\n+---------------+-----------+\n| Dir | Size |\n+===============+===========+\n| docs | 362.74 kb |\n+---------------+-----------+\n| tests | 63.69 kb |\n+---------------+-----------+\n| dist | 61.78 kb |\n+---------------+-----------+\n| src | 50.91 kb |\n+---------------+-----------+\n| .git | 24.25 kb |\n+---------------+-----------+\n| .pytest_cache | 540 bytes |\n+---------------+-----------+\n| .vscode | 197 bytes |\n+---------------+-----------+\nTotal size of 'P:\\python\\projects\\pathier': 564.11 kb\nsizeup average execution time: 37ms 895us\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Extends the standard library pathlib.Path class.",
"version": "1.5.4",
"project_urls": {
"Documentation": "https://github.com/matt-manes/pathier/tree/main/docs",
"Homepage": "https://github.com/matt-manes/pathier",
"Source code": "https://github.com/matt-manes/pathier/tree/main/src/pathier"
},
"split_keywords": [
"extender",
" extension",
" json",
" path",
" pathlib",
" shutil",
" toml"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "06ce7afa1246a56f87691c2c558c2020bebe89a58237377fce332070f8348f58",
"md5": "a78258ad57f443749d47fa862c616170",
"sha256": "fd2d682bae2f0bee40130987c849ade0f9c518200ec45389f776a75c6dc01d34"
},
"downloads": -1,
"filename": "pathier-1.5.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a78258ad57f443749d47fa862c616170",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.12,>=3.10",
"size": 10755,
"upload_time": "2024-07-16T01:30:11",
"upload_time_iso_8601": "2024-07-16T01:30:11.573261Z",
"url": "https://files.pythonhosted.org/packages/06/ce/7afa1246a56f87691c2c558c2020bebe89a58237377fce332070f8348f58/pathier-1.5.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a064ffe5d3ba9b336e9327f1bc4447ccacc8b9544718de04b30b275c49cbd371",
"md5": "7f31737672e72a18a2b58930a01719d6",
"sha256": "64c56464db7f0db48cacebe686496b933c6f00bf43bdfbee8dccb819577d580e"
},
"downloads": -1,
"filename": "pathier-1.5.4.tar.gz",
"has_sig": false,
"md5_digest": "7f31737672e72a18a2b58930a01719d6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.12,>=3.10",
"size": 108223,
"upload_time": "2024-07-16T01:30:13",
"upload_time_iso_8601": "2024-07-16T01:30:13.357285Z",
"url": "https://files.pythonhosted.org/packages/a0/64/ffe5d3ba9b336e9327f1bc4447ccacc8b9544718de04b30b275c49cbd371/pathier-1.5.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-16 01:30:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "matt-manes",
"github_project": "pathier",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pathier"
}