{ "info": { "author": "Anthon van der Neut", "author_email": "a.van.der.neut@ruamel.eu", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "ruamel.std.pathlib\n==================\n\n`package ruamel.std.pathlib `_ is a drop-in\nreplacement to extend the Python standard `pathlib`` module.\n\nYou can just replace::\n\n from pathlib import PosixPath, Path\n\nwith::\n\n from ruamel.std.pathlib import PosixPath, Path\n\nFor older versions of Python it also functions as dependency check\nto install ``pathlib2`` from PyPI. You just have to make\nyour package dependent on ``ruamel.std.pathlib`` and ``pathlib2``\nwill be installed when this is necessary.\n\nExtra Path functionality\n------------------------\n\n* alias ``remove`` for ``unlink`` on Path\n* add ``copy()`` and ``rmtree()`` from shutil to Path\n* add ``hash()`` to path return the ``hashlib.new()`` value on the\n file content (defaults to 'sha224', other algorithms can be given as\n parameter: ``print(p.hash('md5').hexdigest())``)\n\n\nTransition helper\n-----------------\n\nIf you are starting to use the standard pathlib library, it is cumbersome to\nchange everything at once, and also to change all the arguments to calls to\n``os.path.join``, ``os.rename``, ``os.path.dirname`` to be made encapsulated in ``str()``\n\nBy making an instance of ``PathLibConversionHelper`` named ``pl`` you can change\n``os.path.join()`` to ``pl.path.join()``, etc., and then start passing in Path\ninstances instead of strings.\n\n``PathLibConversionHelper`` currently supports the following replacements for `os`,\n `os.path`, `shutil` and built-in functions::\n\n .chdir() replaces: os.chdir()\n .copy() replaces: shutil.copy()\n .glob() replaces: glob.glob()\n .listdir() replaces: os.listdir()\n .makedirs() replaces: os.makedirs()\n .mkstemp() replaces: tempfile.mkstemp()\n .open() replaces: built-in open()\n .path.basename() replaces: os.path.basename()\n .path.dirname() replaces: os.path.dirname()\n .path.exists() replaces: os.path.exists()\n .path.expanduser() replaces: os.path.expanduser()\n .path.getmtime() replaces: os.path.getmtime()\n .path.isdir() replaces: os.path.isdir()\n .path.join() replaces: os.path.join()\n .path.splitext() replaces: os.path.splitext()\n .remove() replaces: os.remove()\n .rename() replaces: os.rename()\n .rmdir() replaces: os.rmdir()\n .rmtree() replaces: shutil.rmtree()\n .walk() replaces: os.walk()\n\n\n.. example output methods.py\n\nYou can provide a check level when you create the\n`PathLibConversionHelper()` instance.\n\n- If check is non-zero, all calls are being logged and the invocations\n can be dumped e.g. at the end of the program with\n ``pl.dump(stream, show_all=False)`` This will include\n the number of invocations not using Path (and using Path uniquely as well\n if ``show_all=True``)\n- If check is greater than 1, first usage is dumped immediately.\n\n\nIf you start with the following code::\n\n # coding: utf-8\n \n from __future__ import print_function\n \n import os\n import glob\n import tempfile\n import shutil\n import random\n \n \n class TempDir(object):\n \"\"\"self removing (unless keep=True) temporary directory\"\"\"\n def __init__(self, keep=False, basedir=None, prefix=None):\n self._keep = keep\n # mkdtemp creates with permissions rwx------\n kw = dict(dir=basedir)\n if prefix is not None:\n kw['prefix'] = prefix\n # mkdtemp doesn't do the right thing if None is passed in\n # as it has prefix=template in definition\n self._tmpdir = tempfile.mkdtemp(**kw)\n \n def remove(self):\n shutil.rmtree(self._tmpdir)\n \n def chdir(self):\n os.chdir(self._tmpdir)\n \n def tempfilename(self, extension=''):\n fd, name = tempfile.mkstemp(suffix=extension, dir=self._tmpdir)\n os.close(fd)\n return name\n \n def tempfilename2(self, extension=''):\n while True:\n name = os.path.join(\n self._tmpdir,\n '%08d' % random.randint(0, 100000) + extension\n )\n if not os.path.exists(name):\n break\n return name\n \n @property\n def directory(self):\n return self._tmpdir\n \n def __enter__(self):\n return self\n \n def __exit__(self, exc_type, exc_val, exc_tb):\n if not self._keep:\n self.remove()\n \n \n def main():\n \"\"\"contrived example using TempDir\"\"\"\n org_dir = os.getcwd()\n with TempDir() as td:\n for n in range(3):\n t1 = td.tempfilename(extension='.sample')\n with open(t1, 'w') as fp:\n fp.write('content\\n')\n t2 = td.tempfilename2(extension='.sample2')\n with open(t2, 'w') as fp:\n fp.write('content\\n')\n os.chdir(td.directory)\n count = 0\n for file_name in glob.glob('*.samp*'):\n full_name = os.path.join(os.getcwd(), file_name) # noqa\n # print(full_name)\n count += 1\n os.chdir('/tmp') # not using Path\n os.chdir(org_dir)\n print('{} files found in temporary directory'.format(count))\n \n main()\n\n.. example code original.py\n\nyou get::\n\n 4 files found in temporary directory\n\n\n.. example output original.py\n\nWhen you start to change ``TempDir()`` to store the\nactual directory as a Path, things start to break immediately::\n\n # coding: utf-8\n \n from __future__ import print_function\n \n import os\n import glob\n import tempfile\n import shutil\n import random\n \n from ruamel.std.pathlib import Path # added\n \n \n class TempDir(object):\n \"\"\"self removing (unless keep=True) temporary directory\"\"\"\n def __init__(self, keep=False, basedir=None, prefix=None):\n self._keep = keep\n # mkdtemp creates with permissions rwx------\n kw = dict(dir=basedir)\n if prefix is not None:\n kw['prefix'] = prefix\n # mkdtemp doesn't do the right thing if None is passed in\n # as it has prefix=template in definition\n self._tmpdir = Path(tempfile.mkdtemp(**kw)) # changed\n \n def remove(self):\n shutil.rmtree(self._tmpdir)\n \n def chdir(self):\n os.chdir(self._tmpdir)\n \n def tempfilename(self, extension=''):\n fd, name = tempfile.mkstemp(suffix=extension, dir=self._tmpdir)\n os.close(fd)\n return name\n \n def tempfilename2(self, extension=''):\n while True:\n name = os.path.join(\n self._tmpdir,\n '%08d' % random.randint(0, 100000) + extension\n )\n if not os.path.exists(name):\n break\n return name\n \n @property\n def directory(self):\n return self._tmpdir\n \n def __enter__(self):\n return self\n \n def __exit__(self, exc_type, exc_val, exc_tb):\n if not self._keep:\n self.remove()\n \n \n def main():\n \"\"\"contrived example using TempDir\"\"\"\n org_dir = os.getcwd()\n with TempDir() as td:\n for n in range(3):\n t1 = td.tempfilename(extension='.sample')\n with open(t1, 'w') as fp:\n fp.write('content\\n')\n t2 = td.tempfilename2(extension='.sample2')\n with open(t2, 'w') as fp:\n fp.write('content\\n')\n os.chdir(td.directory)\n count = 0\n for file_name in glob.glob('*.samp*'):\n full_name = os.path.join(os.getcwd(), file_name) # noqa\n # print(full_name)\n count += 1\n os.chdir('/tmp') # not using Path\n os.chdir(org_dir)\n print('{} files found in temporary directory'.format(count))\n \n main()\n\n.. example code stage1.py\n\nWith some errors::\n\n Traceback (most recent call last):\n File \"_example/stage1.py\", line 80, in \n main()\n File \"_example/stage1.py\", line 77, in main\n os.chdir(org_dir)\n File \"_example/stage1.py\", line 56, in __exit__\n self.remove()\n File \"_example/stage1.py\", line 27, in remove\n shutil.rmtree(self._tmpdir)\n File \"/opt/python/2.7.13/lib/python2.7/shutil.py\", line 228, in rmtree\n if os.path.islink(path):\n File \"/home/venv/dev/lib/python2.7/posixpath.py\", line 135, in islink\n st = os.lstat(path)\n TypeError: coercing to Unicode: need string or buffer, PosixPath found\n\n\n.. example error_output stage1.py\n\nInstead of changing every usage in your program in one go, and\nhope it will work again, you replace the routines from the standard\nmodule::\n\n # coding: utf-8\n \n from __future__ import print_function\n \n import os\n import glob\n import tempfile\n import shutil # noqa\n import random\n \n from ruamel.std.pathlib import Path, PathLibConversionHelper # changed\n pl = PathLibConversionHelper() # added\n \n \n class TempDir(object):\n \"\"\"self removing (unless keep=True) temporary directory\"\"\"\n def __init__(self, keep=False, basedir=None, prefix=None):\n self._keep = keep\n # mkdtemp creates with permissions rwx------\n kw = dict(dir=basedir)\n if prefix is not None:\n kw['prefix'] = prefix\n # mkdtemp doesn't do the right thing if None is passed in\n # as it has prefix=template in definition\n self._tmpdir = Path(tempfile.mkdtemp(**kw))\n \n def remove(self):\n pl.rmtree(self._tmpdir)\n \n def chdir(self):\n os.chdir(self._tmpdir)\n \n def tempfilename(self, extension=''):\n fd, name = pl.mkstemp(suffix=extension, dir=self._tmpdir) # changed\n os.close(fd)\n return name\n \n def tempfilename2(self, extension=''):\n while True:\n name = pl.path.join(\n self._tmpdir,\n '%08d' % random.randint(0, 100000) + extension\n )\n if not pl.path.exists(name): # changed\n break\n return name\n \n @property\n def directory(self):\n return self._tmpdir\n \n def __enter__(self):\n return self\n \n def __exit__(self, exc_type, exc_val, exc_tb):\n if not self._keep:\n self.remove()\n \n \n def main():\n \"\"\"contrived example using TempDir\"\"\"\n org_dir = os.getcwd()\n with TempDir() as td:\n for n in range(3):\n t1 = td.tempfilename(extension='.sample')\n with open(t1, 'w') as fp:\n fp.write('content\\n')\n t2 = td.tempfilename2(extension='.sample2')\n with pl.open(t2, 'w') as fp:\n c = 'content\\n' # added\n if not isinstance(fp, file): # added\n c = unicode(c) # added\n fp.write(c) # changed\n pl.chdir(td.directory)\n count = 0\n for file_name in glob.glob('*.samp*'):\n full_name = pl.path.join(os.getcwd(), file_name) # noqa # changed\n # print(full_name)\n count += 1\n pl.chdir('/tmp') # not using Path\n pl.chdir(org_dir) # changed\n print('{} files found in temporary directory'.format(count))\n \n main()\n\n.. example code stage2.py\n\ngiving (again)::\n\n 4 files found in temporary directory\n\n\n.. example output stage2.py\n\nChange back just the creation of ``self._tempdir`` to the original::\n\n self._tmpdir = tempfile.mkdtemp(**kw)\n\nand the output stays::\n\n 4 files found in temporary directory\n\n\n.. example output stage2org.py\n\n\nIf you now change the creation of ``pl`` to::\n\n pl = PathLibConversionHelper(check=2)\n\nyou get as output::\n\n update .mkstemp to use Path.mkstemp() [_example/stage3.py:34 / Path (True,)]\n update .path.join to use \"/\" [_example/stage3.py:42 / Path (True, False)]\n update .exists to use Path.exists() [_example/stage3.py:44 / Path (True,)]\n update .open to use Path.open() [_example/stage3.py:69 / Path (True,)]\n update .chdir to use Path.chdir() or os.chdir(str(Path)) [_example/stage3.py:74 / Path (True,)]\n update .path.join to use \"/\" [_example/stage3.py:77 / Path (False, False)]\n update .chdir to use Path.chdir() or os.chdir(str(Path)) [_example/stage3.py:80 / Path (False,)]\n update .chdir to use Path.chdir() or os.chdir(str(Path)) [_example/stage3.py:81 / Path (False,)]\n update .rmtree to use Path.rmtree() or shutil.rmtree(str(Path)) [_example/stage3.py:28 / Path (True,)]\n 4 files found in temporary directory\n\n\n.. example output stage3.py\n\nIf you use ``check=1`` and at the end ``pl.dump()``, you get::\n\n 4 files found in temporary directory\n update .path.join to use \"/\" [_example/stage4.py:42 / 1 / Path (True, False)]\n update .chdir to use Path.chdir() or os.chdir(str(Path)) [_example/stage4.py:81 / 1 / Path (False,)]\n update .path.join to use \"/\" [_example/stage4.py:77 / 4 / Path (False, False)]\n update .chdir to use Path.chdir() or os.chdir(str(Path)) [_example/stage4.py:80 / 1 / Path (False,)]\n\n\n.. example output stage4.py\n\nshowing where you still use string based paths/filenames.\n\nThe message\npart ``file_name.py: 123 / 2 / Path (True, False)`` means that there\nwere two calls on line 123 in ``file_name.py`` and that they were called with\nthe first parameter being a Path, the second not being a Path (when replacing\n``os.path.join()`` with Path's ``\"/\"`` concatenation operator that would\nbe a good starting point, for other situation you might want to convert\nthe second parameter to a Path instance as well).\n\nExtending ``PathLibConversionHelper``\n-------------------------------------\n\nIf ``PathLibConversionHelper`` doesn't contain a particular function (yet)\nyou can easily subclass it and add your own::\n\n from ruamel.std.pathlib import Path, PathLibConversionHelper\n \n \n class MyPLCH(PathLibConversionHelper):\n # an example, ruamel.std.pathlib already adds mkstemp\n def mkstemp(self, suffix=\"\", prefix=None, dir=None, text=False):\n import tempfile\n # would be much better if prefix defaults to built-in value (int, None, string)\n if prefix is None:\n prefix = tempfile.template\n self.__add_usage(dir, 'update .mkstemp to use Path.mkstemp()')\n if isinstance(dir, Path):\n dir = str(dir)\n return tempfile.mkstemp(suffix, prefix, dir, text)\n \n pl = MyPLCH(check=1)\n\n.. example code extend.py\n\nThe first parameter for ``self.add_usage()`` is used to determine if\na Path is used or not. This should be a list of all relevant variables\n(that could be ``Path`` instances or not). If the list would only have a\nsingle element it doesn't have to be passed in as a list (as in the\nexample). The second parameter should be a string with some help on further\ngetting rid of the call to ``.mkstemp()``.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/ruamel/std.pathlib", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "ruamel.std.pathlib", "package_url": "https://pypi.org/project/ruamel.std.pathlib/", "platform": "", "project_url": "https://pypi.org/project/ruamel.std.pathlib/", "project_urls": { "Homepage": "https://bitbucket.org/ruamel/std.pathlib" }, "release_url": "https://pypi.org/project/ruamel.std.pathlib/0.6.4/", "requires_dist": null, "requires_python": "", "summary": "improvements over the standard pathlib module and pathlib2 package", "version": "0.6.4" }, "last_serial": 5412063, "releases": { "0.4.0": [ { "comment_text": "", "digests": { "md5": "d081c425a865623a52ef97f07dc734e7", "sha256": "90f65cae8a9b5632f019da6d865fd7b7e6ad25e0df5311786bc2029103aea674" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d081c425a865623a52ef97f07dc734e7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14890, "upload_time": "2016-01-24T08:59:20", "url": "https://files.pythonhosted.org/packages/f5/14/5bb2e957a110ad3921a95af8ca37ddfe53b4ae8e556f399d0f7fae51ec2d/ruamel.std.pathlib-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "047bb623709841756f55f7eb8d09622a", "sha256": "13e270d7b96d48671b4957f3f5290a16d92c0f6ff127004c846a747a66fadad4" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.4.0.tar.gz", "has_sig": false, "md5_digest": "047bb623709841756f55f7eb8d09622a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18383, "upload_time": "2016-01-24T08:59:26", "url": "https://files.pythonhosted.org/packages/76/84/f8c9007eb6bf44a55fc5d436034f7a8af97602c66a97c2a6531c7c01d62a/ruamel.std.pathlib-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "a042ce0803faebd9a7e45fa6c6358c31", "sha256": "04314b832efe22a3f8a369b74fa8221b754bccfdee3ac83b62453d7ee15e77b0" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a042ce0803faebd9a7e45fa6c6358c31", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13340, "upload_time": "2016-01-25T13:14:13", "url": "https://files.pythonhosted.org/packages/bb/0e/565e89c93650dddec3bd894dd6fabfe848748063ccf24cc80380b7233013/ruamel.std.pathlib-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77fe5db585449912f66d72cb190fc701", "sha256": "fdc04d22b7c36928272de4402612b531e5dea62155f56c252e4b247076851b32" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.4.1.tar.gz", "has_sig": false, "md5_digest": "77fe5db585449912f66d72cb190fc701", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17940, "upload_time": "2016-01-25T13:13:43", "url": "https://files.pythonhosted.org/packages/59/9e/95c6b21ff71391aa40a78c2044244c99207bdc61086dc417ef3169863aa9/ruamel.std.pathlib-0.4.1.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "6f21ac77cde052f94be4034c10347659", "sha256": "0f65eb6adb1c72d96971870df5e3c2673e2f51174d823760794b69ede900b799" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.4.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6f21ac77cde052f94be4034c10347659", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13376, "upload_time": "2016-11-01T16:46:14", "url": "https://files.pythonhosted.org/packages/fa/c1/8953b6ac30c53ff2136c199e2723f056994e4f529f29a268e9d68e5606e3/ruamel.std.pathlib-0.4.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09f7582454be36beb2ac0cd1b5438cee", "sha256": "ae81aa6886ee9a9de3456cfa5f9699c3970961e13e42024038d09934fe2a4f36" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.4.4.tar.gz", "has_sig": false, "md5_digest": "09f7582454be36beb2ac0cd1b5438cee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18431, "upload_time": "2016-11-01T16:46:17", "url": "https://files.pythonhosted.org/packages/e8/97/2693969fd48305a2c3f4c9af22afef22dcf13694881ed3f699038466f93e/ruamel.std.pathlib-0.4.4.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "7d0d38b76d9e79e46657d8199118200a", "sha256": "62341314ee1443a9a230f575d2bf713c7e4cf95b743167c489e82c4b38dfd1bb" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7d0d38b76d9e79e46657d8199118200a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15409, "upload_time": "2017-07-17T21:13:03", "url": "https://files.pythonhosted.org/packages/be/27/4bf702e486e32d7bed2c701bf1c9ebb0ddb602be8f59ae467a130b74727f/ruamel.std.pathlib-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b357bee7485272adba9f3323dc9794a", "sha256": "e6640b7cfb5811a8f4eab284da6eb7e0f610d28826e707d8185b839089dcc0d0" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.0.tar.gz", "has_sig": false, "md5_digest": "0b357bee7485272adba9f3323dc9794a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22093, "upload_time": "2017-07-17T21:13:05", "url": "https://files.pythonhosted.org/packages/88/da/17973f08953279c768790959f6f508299aa28ac9bbf90a5cb0dff944ef74/ruamel.std.pathlib-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "e746a4c23b26d934c30eeae34248f717", "sha256": "a3dea52c9cfdfa1fdde5b582a7965ca091071f1b83cd535b554192701fc8a399" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e746a4c23b26d934c30eeae34248f717", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15567, "upload_time": "2017-07-18T05:32:41", "url": "https://files.pythonhosted.org/packages/69/73/298ec859e5179e3ec296fbfbf5cb2a25fd20c76c69867f9b2fc3039a2f58/ruamel.std.pathlib-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a16074d716e65cc0fdef62d4b047331d", "sha256": "ecf57bfad478b177ed5d58d54e78e6fd6a327093aa80c2018328ae36f2b466f0" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.1.tar.gz", "has_sig": false, "md5_digest": "a16074d716e65cc0fdef62d4b047331d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22234, "upload_time": "2017-07-18T05:32:42", "url": "https://files.pythonhosted.org/packages/b2/0a/a954840d638f6d8ca60c528f569a005cc7eb625183adbaac2dd0f610e08f/ruamel.std.pathlib-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "5c59a2bb036c7c0601f420ebb380ce17", "sha256": "5b188c46d34f8ad58a79c3a75dc794ea6a248656e11b486d160dc3cb9855b96e" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5c59a2bb036c7c0601f420ebb380ce17", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15575, "upload_time": "2017-07-18T06:52:53", "url": "https://files.pythonhosted.org/packages/6e/e1/dbe6e0dd54ca106a59dc623f5853d5b280bd4312c63463afc915df912f44/ruamel.std.pathlib-0.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3fbe225b108c08077ffedf6c84b2be87", "sha256": "e1737981e821c31167fd629233205e679d531d45d297c453eec28fe8d3afb5dc" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.2.tar.gz", "has_sig": false, "md5_digest": "3fbe225b108c08077ffedf6c84b2be87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22248, "upload_time": "2017-07-18T06:52:55", "url": "https://files.pythonhosted.org/packages/46/d5/a2c35581beb6c521ca5c2a844deb95b548308f3910133799e752cdd9ced8/ruamel.std.pathlib-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "68e5f44cdebca81b06b177f67d94fb28", "sha256": "cc5cb8dabd02e109aff2bbcce233164936aca472772ce2c9e05ca1bc7a6307ca" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "68e5f44cdebca81b06b177f67d94fb28", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15553, "upload_time": "2017-07-20T08:20:31", "url": "https://files.pythonhosted.org/packages/8c/44/cbe416a864949348b63fc944278bf97905e8edf6a0323e350f05ce87b24e/ruamel.std.pathlib-0.6.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f73cf5aea0190e4aee7347348a6a5d11", "sha256": "e5a162cb9454aa5b3e63e0e342b503522b05a96442de7419ab57fabcb0a72165" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.3.tar.gz", "has_sig": false, "md5_digest": "f73cf5aea0190e4aee7347348a6a5d11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22237, "upload_time": "2017-07-20T08:20:33", "url": "https://files.pythonhosted.org/packages/c4/06/700ea1564d0e679d722ebc1d641c15f4a0320c0ed4c6d7c481168ccd29e5/ruamel.std.pathlib-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "66b15944c56c82f98f62357363c0c8c6", "sha256": "884f19881b5242e5c4cf4742859202d1df45a39cc7e87b5107dd52565ea6348a" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "66b15944c56c82f98f62357363c0c8c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15641, "upload_time": "2019-06-17T20:31:14", "url": "https://files.pythonhosted.org/packages/0d/89/086f5a150fcefb765c26d02c80d968406b727fd928d881a5bb6f45fab632/ruamel.std.pathlib-0.6.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "630b87c171c9ced90783673d9d640311", "sha256": "50375c9a8058e5b5d9a125348e82a6fac1a0e5172333d81595a33ddb85f9d3ad" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.4.tar.gz", "has_sig": false, "md5_digest": "630b87c171c9ced90783673d9d640311", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23325, "upload_time": "2019-06-17T20:31:12", "url": "https://files.pythonhosted.org/packages/81/90/3d1c9b51b99626f91c7afb17eeed6a46a213701b232dc61d3b40edc8635c/ruamel.std.pathlib-0.6.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "66b15944c56c82f98f62357363c0c8c6", "sha256": "884f19881b5242e5c4cf4742859202d1df45a39cc7e87b5107dd52565ea6348a" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "66b15944c56c82f98f62357363c0c8c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15641, "upload_time": "2019-06-17T20:31:14", "url": "https://files.pythonhosted.org/packages/0d/89/086f5a150fcefb765c26d02c80d968406b727fd928d881a5bb6f45fab632/ruamel.std.pathlib-0.6.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "630b87c171c9ced90783673d9d640311", "sha256": "50375c9a8058e5b5d9a125348e82a6fac1a0e5172333d81595a33ddb85f9d3ad" }, "downloads": -1, "filename": "ruamel.std.pathlib-0.6.4.tar.gz", "has_sig": false, "md5_digest": "630b87c171c9ced90783673d9d640311", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23325, "upload_time": "2019-06-17T20:31:12", "url": "https://files.pythonhosted.org/packages/81/90/3d1c9b51b99626f91c7afb17eeed6a46a213701b232dc61d3b40edc8635c/ruamel.std.pathlib-0.6.4.tar.gz" } ] }