{ "info": { "author": "Walter Purcaro", "author_email": "vuolter@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System", "Topic :: System :: Filesystems", "Topic :: Utilities" ], "description": "deplicate\n=========\n\nTable of contents\n-----------------\n\n- `Description`_\n- `Features`_\n- `Installation`_\n- `PIP Install`_\n- `Tarball Install`_\n- `Usage`_\n- `Quick Start`_\n- `Advanced Usage`_\n- `API Reference`_\n- `Exceptions`_\n- `Classes`_\n- `Functions`_\n\nDescription\n-----------\n\n``deplicate`` is an high-performance duplicate file finder written in\nPure Python with low memory impact and several advanced filters.\n\nFind out all the duplicate files in one or more directories, you can\nalso scan directly a bunch of files. Latest releases let you to remove\nthe spotted duplicates and/or apply a custom action over them.\n\nFeatures\n--------\n\n- [x] N-tree layout for low memory consumption\n- [x] Multi-threaded (partially)\n- [x] Raw drive access to maximize I/O performance (Unix only)\n- [x] xxHash algorithm for fast file identification\n- [x] File size and signature checking for quick duplicate exclusion\n- [x] Extended file attributes scanning\n- [x] Multi-filtering\n- [x] Full error handling\n- [x] Unicode decoding\n- [x] Safe from path walking loop\n- [ ] SSD detection\n- [x] Duplicates purging\n- [x] Support for moving dulicates to trash/recycle bin\n- [x] Custom action handling over deletion\n- [x] **Command Line Interface**\n (https://github.com/deplicate/deplicate-cli)\n- [x] Unified structured result\n- [x] Support posix\\_fadvise\n- [ ] Graphical User Interface\n (https://github.com/deplicate/deplicate-gui)\n- [ ] Incremental file chunk checking\n- [ ] Hard-link scanning\n- [ ] Duplicate directories recognition\n- [ ] Multi-processing\n- [x] Fully documented\n- [ ] PyPy support\n- [ ] [STRIKEOUT:Exif data scanning]\n\nInstallation\n------------\n\n **Note:** This will install just ``deplicate``, without its CLI\n and GUI.\n\n CLI *(Command Line Interface)*:\n https://github.com/deplicate/deplicate-cli.\n GUI *(Graphical User Interface)*:\n https://github.com/deplicate/deplicate-gui.\n\nThe easiest way to install ``deplicate`` on your system is the `PIP\nInstall way`_, but, if you want, you can try to install it from the\nsources as described in the `Tarball Install section`_.\n\nPIP Install\n~~~~~~~~~~~\n\nIf the command ``pip`` is not found in your system, install the latest\n``pip`` distribution: download `get-pip.py`_ and run it using the\n`Python Interpreter`_.\n\nThen, type in your command shell **with *administrator/root*\nprivileges**:\n\n::\n\n pip install deplicate\n\nIn Unix-based systems, you may have to type\n``sudo pip install deplicate``.\n\n\nIf the above command fails, consider installing with the option\n`--user`_:\n\n::\n\n pip install --user deplicate\n\nTarball Install\n~~~~~~~~~~~~~~~\n\n0. Make sure you have installed the `Python Interpreter`_ with the\n package ``setuptools`` **(>=20.8.1)**.\n1. Get the latest tarball of the source code in format `ZIP`_ or `TAR`_.\n2. Extract the downloaded archive.\n3. From the extracted path, execute the command\n ``python setup.py install``.\n\nUsage\n-----\n\nIn your script import the module ``duplicate``.\n\n::\n\n import duplicate\n\nCall its function ``find`` to search the duplicate files in the given\npath:\n\n::\n\n duplicate.find('/path')\n\nOr call the function ``purge`` if you want to remove them in addition:\n\n::\n\n duplicate.purge('/path')\n\nYoull get a ``duplicate.ResultInfo`` object as result, with the\nfollowing properties: - ``dups`` Tuples of paths of duplicate files. -\n``deldups`` Tuple of paths of purged duplicate files. - ``duperrors``\n Tuple of paths of files not filtered due errors. - ``scanerrors`` \nTuple of paths of files not scanned due errors. - ``delerrors`` Tuple\nof paths of files not purged due errors.\n\n **Note:** By default, directory paths are scanned recursively.\n\n **Note:** By default, files smaller than **100 KiB** or bigger than\n **100 GiB** are not scanned.\n\n **Note:** File paths are returned in canonical form.\n\n **Note:** Tuples of duplicate files are sorted in descending order\n according input priority, file modification time and name length.\n\nQuick Start\n~~~~~~~~~~~\n\nScan for duplicates a single directory:\n\n::\n\n import duplicate\n\n duplicate.find('/path/to/dir')\n\nScan for duplicates two files (at least):\n\n::\n\n import duplicate\n\n duplicate.find('/path/to/file1', '/path/to/file2')\n\nScan for duplicates a single directory and move them to the\ntrash/recycle bin:\n\n::\n\n import duplicate\n\n duplicate.purge('/path/to/dir')\n\nScan for duplicates a single directory and delete them:\n\n::\n\n import duplicate\n\n duplicate.purge('/path/to/dir', trash=False)\n\nScan more directories together:\n\n::\n\n import duplicate\n\n duplicate.find('/path/to/dir1', '/path/to/dir2', '/path/to/dir3')\n\nScan from iterable:\n\n::\n\n import duplicate\n\n iterable = ['/path/to/dir1', '/path/to/dir2', '/path/to/dir3']\n\n duplicate.find.from_iterable(iterable)\n\nScan ignoring the minimum file size threshold:\n\n::\n\n import duplicate\n\n duplicate.find('/path/to/dir', minsize=0)\n\nAdvanced Usage\n~~~~~~~~~~~~~~\n\nScan without recursing directories:\n\n::\n\n import duplicate\n\n duplicate.find('/path/to/file1', '/path/to/file2', '/path/to/dir1',\n recursive=False)\n\n **Note:** In *not-recursive mode*, like the case above, directory\n paths are simply ignored.\n\nScan checking file names and hidden files:\n\n::\n\n import duplicate\n\n duplicate.find.from_iterable('/path/to/file1', '/path/to/dir1',\n comparename=True, scanhidden=True)\n\nScan excluding files ending with extension ``.doc``:\n\n::\n\n import duplicate\n\n duplicate.find('/path/to/dir', exclude=\"*.doc\")\n\nScan including file links:\n\n::\n\n import duplicate\n\n duplicate.find('/path/to/file1', '/path/to/file2', '/path/to/file3',\n scanlinks=True)\n\nScan for duplicates, handling errors with a custom action (printing):\n\n::\n\n import duplicate\n\n def error_callback(exc, filename):\n print(filename)\n\n duplicate.find('/path/to/dir', onerror=error_callback)\n\nScan for duplicates and apply a custom action (printing), instead of\npurging:\n\n::\n\n import duplicate\n\n def purge_callback(filename):\n print(filename)\n raise duplicate.SkipException\n\n duplicate.purge('/path/to/dir', ondel=purge_callback)\n\nScan for duplicates, apply a custom action (printing) and move them to\nthe trash/recycle bin:\n\n::\n\n import duplicate\n\n def purge_callback(filename):\n print(filename)\n\n duplicate.purge('/path/to/dir', ondel=purge_callback)\n\nScan for duplicates, handling errors with a custom action (printing),\nand apply a custom action (moving to path), instead of purging:\n\n::\n\n import shutil\n import duplicate\n\n def error_callback(exc, filename):\n print(filename)\n\n def purge_callback(filename):\n shutil.move(filename, '/path/to/custom-dir')\n raise duplicate.SkipException\n\n duplicate.purge('/path/to/dir',\n ondel=purge_callback, onerror=error_callback)\n\nAPI Reference\n-------------\n\nExceptions\n~~~~~~~~~~\n\n- duplicate.\\ ``SkipException``\\ (*\\*args*, *\\*\\*kwargs*)\n- **Description**: Raised to skip file scanning, filtering or purging.\n- **Return**: Self instance.\n- **Parameters**: Same as built-in ``Exception``.\n- **Proprieties**: Same as built-in ``Exception``.\n- **Methods**: Same as built-in ``Exception``.\n\nClasses\n~~~~~~~\n\n- duplicate.\\ ``Cache``\\ (*maxlen*\\ =\\ ``DEFAULT_MAXLEN``)\n- **Description**: Internal shared cache class.\n- **Return**: Self instance.\n- **Parameters**:\n\n - ``maxlen`` Maximum number of entries stored.\n\n- **Proprieties**:\n\n - ``DEFAULT_MAXLEN``\n - **Description**: Default maximum number of entries stored.\n - **Value**: ``128``.\n\n- **Methods**:\n\n - \n - ``clear``\\ (*self*)\n - **Description**: Clear the cache if not acquired by any object.\n - **Return**: ``True`` if went cleared, otherwise ``False``.\n - **Parameters**: None.\n\n- duplicate.\\ ``Deplicate``\\ (*paths*,\n *minsize*\\ =\\ ``DEFAULT_MINSIZE``, *maxsize*\\ =\\ ``DEFAULT_MAXSIZE``,\n *include*\\ =\\ ``None``, *exclude*\\ =\\ ``None``,\n *comparename*\\ =\\ ``False``, *comparemtime*\\ =\\ ``False``,\n *comparemode*\\ =\\ ``False``, *recursive*\\ =\\ ``True``,\n *followlinks*\\ =\\ ``False``, *scanlinks*\\ =\\ ``False``,\n *scanempties*\\ =\\ ``False``, *scansystem*\\ =\\ ``True``,\n *scanarchived*\\ =\\ ``True``, *scanhidden*\\ =\\ ``True``)\n- **Description**: Duplicate main class.\n- **Return**: Self instance.\n- **Parameters**:\n\n - ``paths`` Iterable of directory and/or file paths.\n - ``minsize`` *(optional)* Minimum size in bytes of files to\n include in scanning.\n - ``maxsize`` *(optional)* Maximum size in bytes of files to\n include in scanning.\n - ``include`` *(optional)* Wildcard pattern of files to include in\n scanning.\n - ``exclude`` *(optional)* Wildcard pattern of files to exclude\n from scanning.\n - ``comparename`` *(optional)* Check file name.\n - ``comparemtime`` *(optional)* Check file modification time.\n - ``compareperms`` *(optional)* Check file mode (permissions).\n - ``recursive`` *(optional)* Scan directory recursively.\n - ``followlinks`` *(optional)* Follow symbolic links pointing to\n directory.\n - ``scanlinks`` *(optional)* Scan symbolic links pointing to file\n (hard-links included).\n - ``scanempties`` *(optional)* Scan empty files.\n - ``scansystems`` *(optional)* Scan OS files.\n - ``scanarchived`` *(optional)* Scan archived files.\n - ``scanhidden`` *(optional)* Scan hidden files.\n\n- **Proprieties**:\n\n - ``DEFAULT_MINSIZE``\n - **Description**: Minimum size of files to include in scanning (in\n bytes).\n - **Value**: ``102400``.\n - ``DEFAULT_MAXSIZE``\n - **Description**: Maximum size of files to include in scanning (in\n bytes).\n - **Value**: ``107374182400``.\n - ``result``\n\n - **Description**: Result of ``find`` or ``purge`` invocation (by\n default is ``None``).\n - **Value**: ``duplicate.ResultInfo``.\n\n- **Methods**:\n\n - ``find``\\ (*self*, *onerror*\\ =\\ ``None``, *notify*\\ =\\ ``None``)\n - **Description**: Find duplicate files.\n - **Return**: None.\n - **Parameters**:\n\n - ``onerror`` *(optional)* Callback function called with two\n arguments, ``exception`` and ``filename``, when an error occurs\n during file scanning or filtering.\n - ``notify`` *(internal)* Notifier callback.\n\n - ``purge``\\ (*self*, *trash*\\ =\\ ``True``, *ondel*\\ =\\ ``None``,\n *onerror*\\ =\\ ``None``, *notify*\\ =\\ ``None``)\n - **Description**: Find and purge duplicate files.\n - **Return**: None.\n - **Parameters**:\n\n - ``trash`` *(optional)* Move duplicate files to trash/recycle\n bin, instead of deleting.\n - ``ondel`` *(optional)* Callback function called with one\n arguments, ``filename``, before purging a duplicate file.\n - ``onerror`` *(optional)* Callback function called with two\n arguments, ``exception`` and ``filename``, when an error occurs\n during file scanning, filtering or purging.\n - ``notify`` *(internal)* Notifier callback.\n\n- duplicate.\\ ``ResultInfo``\\ (*dupinfo*, *delduplist*, *scnerrlist*,\n *delerrors*)\n- **Description**: Duplicate result class.\n- **Return**: ``collections.namedtuple``\\ (``'ResultInfo'``,\n ``'dups deldups duperrors scanerrors delerrors'``).\n- **Parameters**:\n\n - ``dupinfo`` *(internal)* Instance of\n ``duplicate.structs.DupInfo``.\n - ``delduplist`` *(internal)* Iterable of purged files (deleted or\n trashed).\n - ``scnerrlist`` *(internal)* Iterable of files not scanned (due\n errors).\n - ``delerrors`` *(internal)* Iterable of files not purged (due\n errors).\n\n- **Proprieties**: Same as ``collections.namedtuple``.\n- **Methods**: Same as ``collections.namedtuple``.\n\nFunctions\n~~~~~~~~~\n\n- duplicate.\\ ``find``\\ (*\\*paths*,\n *minsize*\\ =\\ ``duplicate.Deplicate.DEFAULT_MINSIZE``,\n *maxsize*\\ =\\ ``duplicate.Deplicate.DEFAULT_MAXSIZE``,\n *include*\\ =\\ ``None``, *exclude*\\ =\\ ``None``,\n *comparename*\\ =\\ ``False``, *comparemtime*\\ =\\ ``False``,\n *comparemode*\\ =\\ ``False``, *recursive*\\ =\\ ``True``,\n *followlinks*\\ =\\ ``False``, *scanlinks*\\ =\\ ``False``,\n *scanempties*\\ =\\ ``False``, *scansystem*\\ =\\ ``True``,\n *scanarchived*\\ =\\ ``True``, *scanhidden*\\ =\\ ``True``,\n *onerror*\\ =\\ ``None``, *notify*\\ =\\ ``None``)\n- **Description**: Find duplicate files.\n- **Return**: ``duplicate.ResultInfo``.\n- **Parameters**:\n\n - ``paths`` Iterable of directory and/or file paths.\n - ``minsize`` *(optional)* Minimum size in bytes of files to\n include in scanning.\n - ``maxsize`` *(optional)* Maximum size in bytes of files to\n include in scanning.\n - ``include`` *(optional)* Wildcard pattern of files to include in\n scanning.\n - ``exclude`` *(optional)* Wildcard pattern of files to exclude\n from scanning.\n - ``comparename`` *(optional)* Check file name.\n - ``comparemtime`` *(optional)* Check file modification time.\n - ``compareperms`` *(optional)* Check file mode (permissions).\n - ``recursive`` *(optional)* Scan directory recursively.\n - ``followlinks`` *(optional)* Follow symbolic links pointing to\n directory.\n - ``scanlinks`` *(optional)* Scan symbolic links pointing to file\n (hard-links included).\n - ``scanempties`` *(optional)* Scan empty files.\n - ``scansystems`` *(optional)* Scan OS files.\n - ``scanarchived`` *(optional)* Scan archived files.\n - ``scanhidden`` *(optional)* Scan hidden files.\n - ``onerror`` *(optional)* Callback function called with two\n arguments, ``exception`` and ``filename``, when an error occurs\n during file scanning or filtering.\n - ``notify`` \\_(internal)\\_ *(optional)* Notifier callback.\n\n- duplicate.\\ ``purge``\\ (*\\*paths*,\n *minsize*\\ =\\ ``duplicate.Deplicate.DEFAULT_MINSIZE``,\n *maxsize*\\ =\\ ``duplicate.Deplicate.DEFAULT_MAXSIZE``,\n *include*\\ =\\ ``None``, *exclude*\\ =\\ ``None``,\n *comparename*\\ =\\ ``False``, *comparemtime*\\ =\\ ``False``,\n *comparemode*\\ =\\ ``False``, *recursive*\\ =\\ ``True``,\n *followlinks*\\ =\\ ``False``, *scanlinks*\\ =\\ ``False``,\n *scanempties*\\ =\\ ``False``, *scansystem*\\ =\\ ``True``,\n *scanarchived*\\ =\\ ``True``, *scanhidden*\\ =\\ ``True``,\n *trash*\\ =\\ ``True``, *ondel*\\ =\\ ``None``, *onerror*\\ =\\ ``None``,\n *notify*\\ =\\ ``None``)\n- **Description**: Find and purge duplicate files.\n- **Return**: ``duplicate.ResultInfo``.\n- **Parameters**:\n\n - ``paths`` Iterable of directory and/or file paths.\n - ``minsize`` *(optional)* Minimum size in bytes of files to\n include in scanning.\n - ``maxsize`` *(optional)* Maximum size in bytes of files to\n include in scanning.\n - ``include`` *(optional)* Wildcard pattern of files to include in\n scanning.\n - ``exclude`` *(optional)* Wildcard pattern of files to exclude\n from scanning.\n - ``comparename`` *(optional)* Check file name.\n - ``comparemtime`` *(optional)* Check file modification time.\n - ``compareperms`` *(optional)* Check file mode (permissions).\n - ``recursive`` *(optional)* Scan directory recursively.\n - ``followlinks`` *(optional)* Follow symbolic links pointing to\n directory.\n - ``scanlinks`` *(optional)* Scan symbolic links pointing to file\n (hard-links included).\n - ``scanempties`` *(optional)* Scan empty files.\n - ``scansystems`` *(optional)* Scan OS files.\n - ``scanarchived`` *(optional)* Scan archived files.\n - ``scanhidden`` *(optional)* Scan hidden files.\n - ``trash`` *(optional)* Move duplicate files to trash/recycle\n bin, instead of deleting.\n - ``ondel`` *(optional)* Callback function called with one\n arguments, ``filename``, before purging a duplicate file.\n - ``onerror`` *(optional)* Callback function called with two\n arguments, ``exception`` and ``filename``, when an error occurs\n during file scanning, filtering or purging.\n - ``notify`` *(internal)* *(optional)* Notifier callback.\n\n.. _Description: #description\n.. _Features: #features\n.. _Installation: #installation\n.. _PIP Install: #pip-install\n.. _Tarball Install: #tarball-install\n.. _Usage: #usage\n.. _Quick Start: #quick-start\n.. _Advanced Usage: #advanced-usage\n.. _API Reference: #api-reference\n.. _Exceptions: #exceptions\n.. _Classes: #classes\n.. _Functions: #functions\n.. _PIP Install way: #pip-install\n.. _Tarball Install section: #tarball-install\n.. _get-pip.py: https://bootstrap.pypa.io/get-pip.py\n.. _Python Interpreter: https://www.python.org\n.. _--user: https://pip.pypa.io/en/latest/user_guide/#user-installs\n.. _ZIP: https://github.com/deplicate/deplicate/archive/master.zip\n.. _TAR: https://github.com/deplicate/deplicate/archive/master.tar.gz\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/deplicate/deplicate/releases", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/deplicate/deplicate", "keywords": "duplicate duplicatefinder duplicates dups", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "deplicate", "package_url": "https://pypi.org/project/deplicate/", "platform": "any", "project_url": "https://pypi.org/project/deplicate/", "project_urls": { "Download": "https://github.com/deplicate/deplicate/releases", "Homepage": "https://github.com/deplicate/deplicate" }, "release_url": "https://pypi.org/project/deplicate/1.2.3/", "requires_dist": [ "psutil", "send2trash", "xxhash (>=1)", "directio; os_name != \"nt\"", "pypiwin32 (>=154); os_name == \"nt\"", "enum34; python_version < \"3.4\"", "scandir; python_version < \"3.5\"", "pyobjc; sys_platform == \"darwin\"", "deplicate-cli; extra == 'cli'", "deplicate-cli; extra == 'full'" ], "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "summary": "Advanced Duplicate File Finder for Python. Nothing is impossible to solve.", "version": "1.2.3" }, "last_serial": 3166841, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "3b56103d9556f00877b0a5535cce092c", "sha256": "9ee3b2c9933ea872ca0362d2632ce6655e8a528d8d9a67743755ea29ca27adba" }, "downloads": -1, "filename": "deplicate-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3b56103d9556f00877b0a5535cce092c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 9952, "upload_time": "2017-07-10T13:03:19", "url": "https://files.pythonhosted.org/packages/01/8f/199aae7f64f4c5cbd25b4151abed26fa297928e07e9e514304fc2484b4b3/deplicate-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12fab9116ed744eed8e249590962e91b", "sha256": "cbb0cba60cd0b810c1d8873ddea5e4f4e41ec45b2083a907f9c81b3833776d5b" }, "downloads": -1, "filename": "deplicate-0.1.0.tar.gz", "has_sig": false, "md5_digest": "12fab9116ed744eed8e249590962e91b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 7606, "upload_time": "2017-07-10T13:03:20", "url": "https://files.pythonhosted.org/packages/9c/dd/13d08f8f5a3ab65464d908d639674f4058671d60bf93aeb69a36c4bba578/deplicate-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "6f87c780ca9c90e117815b5b647d3982", "sha256": "f25b288dc10ab859c8f80b7f978be22334401414b78b1e8b53b151fa45f15945" }, "downloads": -1, "filename": "deplicate-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6f87c780ca9c90e117815b5b647d3982", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 9949, "upload_time": "2017-07-10T15:06:44", "url": "https://files.pythonhosted.org/packages/04/72/e5dd12c10859dd4b301dd87a66b715e7dda2e3126c634b88963581626d84/deplicate-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "795c3d6d847d9d60b65cb4b853fae8e5", "sha256": "ce3259ff920475db33acaa0c0039f4e03f08cf045d13adffaf421ea3159d5f14" }, "downloads": -1, "filename": "deplicate-0.2.0.tar.gz", "has_sig": false, "md5_digest": "795c3d6d847d9d60b65cb4b853fae8e5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 8994, "upload_time": "2017-07-10T15:06:46", "url": "https://files.pythonhosted.org/packages/10/ec/c27118bf31969874bfc981578cc93abaa5425c69dd9c568749a3b987cf5c/deplicate-0.2.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "9a30ac69f68fd1a94ca6df6f143a7546", "sha256": "0dc9df9651a710c35cd12fb31e7751c66da503da5df77dc258c14d726f753153" }, "downloads": -1, "filename": "deplicate-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9a30ac69f68fd1a94ca6df6f143a7546", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13141, "upload_time": "2017-07-11T14:26:53", "url": "https://files.pythonhosted.org/packages/21/b4/1aced76183c277b32c425aa4fd46017505459a9f55cd91f80e6c5425728a/deplicate-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d8d6e26def542de2f256a5308996ed2", "sha256": "604eafdceba39eb2beb3d727ff0a1b3eb3ce5df161f48ef171dcd535cda7d03a" }, "downloads": -1, "filename": "deplicate-0.5.0.tar.gz", "has_sig": false, "md5_digest": "4d8d6e26def542de2f256a5308996ed2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 12424, "upload_time": "2017-07-11T14:26:54", "url": "https://files.pythonhosted.org/packages/94/b3/4759501771e8a59e3576669f1b2961ac37795ae6e7a8cd47eec0989c326a/deplicate-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "6083d6a788e1ffcea3be2980b503fe6e", "sha256": "4a8909d9ef84a5ccf808140baad85145ed0a8c08c27a1c4fca5dc178203c2e5f" }, "downloads": -1, "filename": "deplicate-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6083d6a788e1ffcea3be2980b503fe6e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13217, "upload_time": "2017-07-11T21:22:25", "url": "https://files.pythonhosted.org/packages/f4/8d/c02525bc710e5178bacc4cc506e9019bdbe3371ab91bcd8984df9f6ac566/deplicate-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff832440f1c99f5a8d7c7012777c20da", "sha256": "d67dfd442928d32f9eeb69ca16775e34850dbb85dc7a7703cd77cd2992eec88e" }, "downloads": -1, "filename": "deplicate-0.6.0.tar.gz", "has_sig": false, "md5_digest": "ff832440f1c99f5a8d7c7012777c20da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 11915, "upload_time": "2017-07-11T21:22:27", "url": "https://files.pythonhosted.org/packages/5a/e0/3791ba9f7276194644f8f1ba95ab498780e562ed8dba61b5fde3b0ffeb03/deplicate-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "6a607e7802bff70d0b8ecc8a016761a2", "sha256": "7bc67e1ca7e70572f450dfbb3dc7000209ee5e126067b6221432191175685a57" }, "downloads": -1, "filename": "deplicate-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6a607e7802bff70d0b8ecc8a016761a2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13271, "upload_time": "2017-07-11T22:00:47", "url": "https://files.pythonhosted.org/packages/f0/29/15a8a5286ee20cd8bf81699e4534eb6b36d5bf00526a27bebec1f31c16b2/deplicate-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "85e12c68d2a437b6555b486e359ce674", "sha256": "f2114b3260b745461c6d1bc4d467cbb2501b16a599a0fcd6c95a3de5b714d34c" }, "downloads": -1, "filename": "deplicate-0.6.1.tar.gz", "has_sig": false, "md5_digest": "85e12c68d2a437b6555b486e359ce674", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 11959, "upload_time": "2017-07-11T22:00:50", "url": "https://files.pythonhosted.org/packages/da/69/581ed1ec454f4f8067e48e80fc15ffdffbff20d3f7bbb86108cc857249ea/deplicate-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "9870814cfb58ffb5c6ff1bacf1bfe3ea", "sha256": "bd20a00036123d707839b8c4c8e22c10416af9cbe97d0e02b7ef661e2b5a35ed" }, "downloads": -1, "filename": "deplicate-0.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9870814cfb58ffb5c6ff1bacf1bfe3ea", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13412, "upload_time": "2017-07-12T14:44:00", "url": "https://files.pythonhosted.org/packages/35/fc/38af971fe922bee791ee066a55e87a15fbe487e0b4ee3ae1c6cc0ae9dc5e/deplicate-0.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "81de328f82ecef68b2108f3ce891f007", "sha256": "5ab52262fe26efafa529f446f5c111d9ea21120a2cf945c146564aa9d62df545" }, "downloads": -1, "filename": "deplicate-0.6.2.tar.gz", "has_sig": false, "md5_digest": "81de328f82ecef68b2108f3ce891f007", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 12121, "upload_time": "2017-07-12T14:44:01", "url": "https://files.pythonhosted.org/packages/fd/96/7d5edd387f67316c5c6b11a83135f0dc8e00525b97d72d45c844426a3d28/deplicate-0.6.2.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "19bbb22bb17bf0bbae3336b17d47349f", "sha256": "6cf20c34ee0a158e2c6637695fb3e4d569e5b0704c7b7d0e186ce9245c89635a" }, "downloads": -1, "filename": "deplicate-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "19bbb22bb17bf0bbae3336b17d47349f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 15445, "upload_time": "2017-07-15T10:21:48", "url": "https://files.pythonhosted.org/packages/2d/aa/dec14e984730ae7efa6a84b330c8a4bd98a27efcad64fece8d95b1e9fac7/deplicate-0.9.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e190d232d497cb4c56cff3b7f2faddcc", "sha256": "cecca74ffc5560fa9dc4f910493ca283a7302b5d7aa643c92eb3debd8353ceb4" }, "downloads": -1, "filename": "deplicate-0.9.0.tar.gz", "has_sig": false, "md5_digest": "e190d232d497cb4c56cff3b7f2faddcc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13709, "upload_time": "2017-07-15T10:21:49", "url": "https://files.pythonhosted.org/packages/64/94/9b13dcd37bc21cfe519a514fd8b50873f270d61bea794938031748886d84/deplicate-0.9.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "ed697a9c68c0df87ba6aa0c497e95f63", "sha256": "ab669c1f40908d9da9c30a1cdfff10dcfe886d04a11e6918c7f25abc8cf68aa9" }, "downloads": -1, "filename": "deplicate-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed697a9c68c0df87ba6aa0c497e95f63", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13834, "upload_time": "2017-07-18T16:22:00", "url": "https://files.pythonhosted.org/packages/b6/42/7005d10b0715274dabe29c3c26c0208f12e0ee78e44d79743da99c7e8b0f/deplicate-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a0a0ed9fd82fc84a8686374ebfecb42", "sha256": "f5660b559da96aaa2917f9063d0ef81bdf69d9ca765b3821a47d877fc1d097c8" }, "downloads": -1, "filename": "deplicate-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9a0a0ed9fd82fc84a8686374ebfecb42", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 12548, "upload_time": "2017-07-18T16:22:01", "url": "https://files.pythonhosted.org/packages/44/3a/be7e8e5f1278836d559f4dc21ed77723d5683217a1a3bd794e52a4924075/deplicate-1.1.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "bbf0ff987af47e20cfe7704e6fbf8565", "sha256": "df24823f647eb14e2ce84ae05c245a73430116a9aa855310f950ba26e81887f5" }, "downloads": -1, "filename": "deplicate-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bbf0ff987af47e20cfe7704e6fbf8565", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13930, "upload_time": "2017-07-20T02:56:00", "url": "https://files.pythonhosted.org/packages/59/c7/0cba39f477da8b9d48927b4efd0e2791ac3b3b3438e6f0b7929edb6a7ecf/deplicate-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "45fb7aa84535ff9a8f26654d5b5943c8", "sha256": "39392fee7ae2713555c330a532466d0504bcf1ffe7b6989db1d3a8ed96a7c306" }, "downloads": -1, "filename": "deplicate-1.2.1.tar.gz", "has_sig": false, "md5_digest": "45fb7aa84535ff9a8f26654d5b5943c8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 12630, "upload_time": "2017-07-20T02:56:01", "url": "https://files.pythonhosted.org/packages/5c/c3/b1cd1bbf7ef693d2c8a77e0ef73d1f3e2b14b4de91bbe66c7b33960d08a1/deplicate-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "0bc58a8f5060ee9c38d160733db91eb7", "sha256": "01897c43277b555ff5571077e8cec7e5087f4385bbb3f9ab7dd693886debb6f8" }, "downloads": -1, "filename": "deplicate-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0bc58a8f5060ee9c38d160733db91eb7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 13982, "upload_time": "2017-09-05T21:06:22", "url": "https://files.pythonhosted.org/packages/81/45/6dfc0853dccf98e1a81d1b57ed0423955a8f3db845d3495bdc3944e38679/deplicate-1.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4f52443ae6b232db1025d03bab54b4fb", "sha256": "1f1514c917b0ff8d30f910f886e5b99c07ebc541c37d2dc73721fc5e7746fdd8" }, "downloads": -1, "filename": "deplicate-1.2.2.tar.gz", "has_sig": false, "md5_digest": "4f52443ae6b232db1025d03bab54b4fb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 12710, "upload_time": "2017-09-05T21:06:23", "url": "https://files.pythonhosted.org/packages/a3/17/c467b720ab97ae0d4ecd5b29408fff2225312286c0a7ebce7b1ada54682b/deplicate-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "7302d55ec929a6031690cdbe6331f454", "sha256": "0e4c015255dd2174b96138d7256a065484e12dcb87adeb4ece245ee35aed7f1a" }, "downloads": -1, "filename": "deplicate-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7302d55ec929a6031690cdbe6331f454", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 17292, "upload_time": "2017-09-12T02:34:07", "url": "https://files.pythonhosted.org/packages/a6/1a/eb60476b32adf8adc6e14cc031f0230d1a94063b2d3a823b7a0d14b074f0/deplicate-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd9b939f06c723c947d8a20348faa3d7", "sha256": "475db548e2670752135ba25d45b083bfac9b1a15d3b3789bb309c96187d07590" }, "downloads": -1, "filename": "deplicate-1.2.3.tar.gz", "has_sig": false, "md5_digest": "dd9b939f06c723c947d8a20348faa3d7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 16909, "upload_time": "2017-09-12T02:34:09", "url": "https://files.pythonhosted.org/packages/9c/2d/c963741e99189312e677dbf57cf79b39744557462a283868ec79b47ca182/deplicate-1.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7302d55ec929a6031690cdbe6331f454", "sha256": "0e4c015255dd2174b96138d7256a065484e12dcb87adeb4ece245ee35aed7f1a" }, "downloads": -1, "filename": "deplicate-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7302d55ec929a6031690cdbe6331f454", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 17292, "upload_time": "2017-09-12T02:34:07", "url": "https://files.pythonhosted.org/packages/a6/1a/eb60476b32adf8adc6e14cc031f0230d1a94063b2d3a823b7a0d14b074f0/deplicate-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd9b939f06c723c947d8a20348faa3d7", "sha256": "475db548e2670752135ba25d45b083bfac9b1a15d3b3789bb309c96187d07590" }, "downloads": -1, "filename": "deplicate-1.2.3.tar.gz", "has_sig": false, "md5_digest": "dd9b939f06c723c947d8a20348faa3d7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6,!=3.0,!=3.1,!=3.2", "size": 16909, "upload_time": "2017-09-12T02:34:09", "url": "https://files.pythonhosted.org/packages/9c/2d/c963741e99189312e677dbf57cf79b39744557462a283868ec79b47ca182/deplicate-1.2.3.tar.gz" } ] }