{ "info": { "author": "Matth Ingersoll", "author_email": "matth@mtingers.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: System :: Archiving :: Mirroring" ], "description": "# Opacify\n\nOpacify reads a file and builds a manifest of external URLs to rebuild said file.\n\n[![asciicast](https://asciinema.org/a/AubzHtwn5qSRTFuFL1lV72w5h.png)](https://asciinema.org/a/AubzHtwn5qSRTFuFL1lV72w5h)\n\n# Install\n```\npip install opacify\n```\n\n# Must Knows\n\n1. Opacify is slow (and probably always will be)!\n2. A cache is built locally to speedup both pacify and satisfy. It is removed on completed unless you specify ```--keep```.\n3. *The cache is built from downloading the data from the urls list.* TODO: Add cache limit flag.\n4. It probably could be used for illegal purposes. Please do not do this.\n5. ```--threads N``` option will help speedup the pacify command.\n\n# Why\n\nWhy not? Some reasons:\n\n1. For fun\n2. Storing a backup in a terrible manner\n3. Hiding or obfuscating data\n4. Avoid censorship\n\n\n# Examples\n\nPlease note that the example output may not be accurate at this time as it is a work\nin progress.\n\n## Pacify A File\n```\n$ opacify pacify --input test.txt --manifest test.manifest --cache cache/ --urls urls.txt --keep --threads 4 --force\nProgress: |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| * 100.0% thread-2 0.00m remaining\n\nWrote manifest to: test.manifest\n Avg chunk size: 3.40\n Total chunks: 2107\n Manifest size: 164291\n Original size: 7173\n Input sha256: 44060449ed92a19e59231d48ab634cbe89d7328f1c24ac7b48b4992b1256657f\n Duration: 7.170s\n```\n\n## Satisfy A File\n```\n$ opacify satisfy --out test.txt.out --manifest test.manifest --cache dcache/ --force\nProgress: |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| . 100.0% 0.00m remaining\n\n Manifest size: 164291\n Output sha256: 44060449ed92a19e59231d48ab634cbe89d7328f1c24ac7b48b4992b1256657f\n Output size: 7173\n Duration: 15.079s\n$ shasum test.txt.out test.txt\n85c7bd6f40ba36326f9acd695779db7847434db4 test.txt.out\n85c7bd6f40ba36326f9acd695779db7847434db4 test.txt\n```\n\n## Build Url List from Reddit\nPlease note that Reddit data is volatile and often disappears.\n```\n$ opacify reddit --out reddit-urls.txt --count 20\nGenerating urls from reddit data...\nWrote urls data to: reddit-urls.txt\n\n$ wc -l reddit-urls.txt\n 20 reddit-urls.txt\n```\n\n## Validate Manifest\nAs time goes by, external sources may disappear or content may change. The following will check that the source\nexists (has a valid HTTP response) and check that the source provides enough data of offset+length:\n```\n$ opacify verify --manifest test.opacify\nValidating external sources listed in manifest ...\nStatus: 100% ... Complete!\n```\n\n# Usage\n```\nusage: opacify [-h] [-V] {pacify,satisfy,verify,reddit} ...\n\nOpacify : v0.3.0\nProject : http://github.com/mtingers/opacify\nAuthor : Matth Ingersoll \n\npositional arguments:\n {pacify,satisfy,verify,reddit}\n pacify Run in pacify mode (builds manifest from input file)\n satisfy Run in satisfy mode (extracts file using manifest)\n verify Validate manifest URLs and response length\n reddit Auto-generate a urls file from reddit links\n\noptional arguments:\n -h, --help show this help message and exit\n -V, --version Display Opacify version info\n\nExamples:\n $ opacify pacify --input test.txt --urls urls.txt --manifest test.opm --cache /tmp/cache/\n $ opacify satisfy --out test.txt.out --urls urls.txt --manifest test.opm --cache /tmp/dcache/\n```\n\n```\nusage: opacify pacify [-h] -i INPUT -u URLS -m MANIFEST -c CACHE [-k] [-f]\n [-d] [-t THREADS] [-s CHUNKSIZE]\n\nRun in pacify mode (builds manifest from input file)\n\noptional arguments:\n -h, --help show this help message and exit\n -i INPUT, --input INPUT\n Path to input file\n -u URLS, --urls URLS Path to urls file\n -m MANIFEST, --manifest MANIFEST\n Output path of manifest file\n -c CACHE, --cache CACHE\n Path to cache directory\n -k, --keep Do not remove cache after completed. Useful for\n testing\n -f, --force Overwrite manifest if it exists\n -d, --debug Turn on debug output\n -t THREADS, --threads THREADS\n Run processing multiple threads\n -s CHUNKSIZE, --chunksize CHUNKSIZE\n Specify a different chunk size (default is 1 byte)\n```\n\n```\nusage: opacify satisfy [-h] -m MANIFEST -o OUT -c CACHE [-k] [-f] [-d]\n\nRun in satisfy mode (rebuilds file using manifest)\n\noptional arguments:\n -h, --help show this help message and exit\n -m MANIFEST, --manifest MANIFEST\n Path of manifest file\n -o OUT, --out OUT Path to write output file to\n -c CACHE, --cache CACHE\n Path to cache directory\n -k, --keep Do not remove cache after completed. Useful for\n testing\n -f, --force Overwrite output file if it exists\n -d, --debug Turn on debug output\n```\n\n```\nusage: opacify verify [-h] -m MANIFEST [-d]\n\nValidate manifest URLs and response length\n\noptional arguments:\n -h, --help show this help message and exit\n -m MANIFEST, --manifest MANIFEST\n Path of manifest file\n -d, --debug Turn on debug output\n```\n\n```\nusage: opacify reddit [-h] -o OUT -c COUNT\n\nAuto-generate a urls file from reddit links\n\noptional arguments:\n -h, --help show this help message and exit\n -o OUT, --out OUT Path to write urls to\n -c COUNT, --count COUNT\n How many links to get\n```\n\n# Errors\nSee [Error Codes](/ERRORS.md) for a list of errors and meanings.\n\n# Manifest Format\n\nThe manifest consists of a header and body.\n\n## Header\nThe header is one line with a ':' delimiter. It contains the following in order as of this writing:\n version:source-file-sha256:source-file-length\n\n* version: The version of Opacify that the manifest was built with.\n* source-file-sha256: The sha256 of the input file. This is used to validate on satisfy.\n* source-file-length: The length of the input file. This is also used to validate on satisfy.\n\n## Body\n\nEach line represents an item and has a space as a delimiter. The lines are in order of the input\nfile data. Example:\n```\nhttp://foo/bar.png 23 55\nhttp://bar/foo.png 100 32\n```\n\nThe body items (each line) consist of the following parts:\n1. encoded url\n2. external source data offset\n3. external source data length\n\n\nThis example describes the following process to rebuild the input file from the above example:\n1. Read 55 bytes from http://foo/bar.png starting at an offset of 23 bytes.\n2. Append this data to the output file.\n3. Read 32 bytes from http://bar/foo.png starting at an offset of 100 bytes.\n4. Append this data to the output file.\n\n\n# TODO\n\n## Backup\n\nAdd ```--backup-level N``` option to create multiple manifest items for a buffer.\nThis is like having replication/a backup for part of a file. If one URL source fails, a backup\nURL can be used.\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mtingers/opacify", "keywords": "", "license": "BSD 2-Clause License", "maintainer": "", "maintainer_email": "", "name": "Opacify", "package_url": "https://pypi.org/project/Opacify/", "platform": "", "project_url": "https://pypi.org/project/Opacify/", "project_urls": { "Homepage": "https://github.com/mtingers/opacify" }, "release_url": "https://pypi.org/project/Opacify/0.3.2/", "requires_dist": [ "enum34", "requests" ], "requires_python": "", "summary": "", "version": "0.3.2" }, "last_serial": 4743182, "releases": { "0.2.5": [ { "comment_text": "", "digests": { "md5": "6ddfb70237661406f3f566c72e04d4f4", "sha256": "5a7915d2f9052192887817c545bed4af9eb8ff1879f3aeff2546bbf7b16f81cc" }, "downloads": -1, "filename": "Opacify-0.2.5.tar.gz", "has_sig": false, "md5_digest": "6ddfb70237661406f3f566c72e04d4f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12037, "upload_time": "2019-01-25T04:49:24", "url": "https://files.pythonhosted.org/packages/9a/dd/b0de04e02aba4a634f1d9564ec73da522e5bb30f92640a2a587186e84153/Opacify-0.2.5.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "bb4290ac47d0d4c8a7b04b8cf77b529b", "sha256": "7139152e64e5b30effcf500b4d6feb4ea48847949da0b10aa73cbf93a00de201" }, "downloads": -1, "filename": "Opacify-0.3.0-py3.7.egg", "has_sig": false, "md5_digest": "bb4290ac47d0d4c8a7b04b8cf77b529b", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 24908, "upload_time": "2019-01-25T09:08:29", "url": "https://files.pythonhosted.org/packages/25/4d/29ec17c75e8b376571a2380b3c28d7020da3ef75f7729fbb8aa40a2cd2e0/Opacify-0.3.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "0fff44a49086a24df1044db1e70d25a6", "sha256": "e1c8ac02f66d39f4b1022ac0ba3ccaa89b12fb6f2bdef6988e4930dadce5055e" }, "downloads": -1, "filename": "Opacify-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0fff44a49086a24df1044db1e70d25a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12611, "upload_time": "2019-01-25T09:08:30", "url": "https://files.pythonhosted.org/packages/e3/e8/19d2f84b161108e2e3606ca846f454bfffa38c3ec2469ec5f057f90850ec/Opacify-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "7438ef865eaeddbad845dd8732d61a97", "sha256": "16d4757a64cbb9f7fc88fdc206304c379bca4944992b7657416163f5bf000f42" }, "downloads": -1, "filename": "Opacify-0.3.1-py3.7.egg", "has_sig": false, "md5_digest": "7438ef865eaeddbad845dd8732d61a97", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 24976, "upload_time": "2019-01-25T09:25:25", "url": "https://files.pythonhosted.org/packages/97/a9/173f49e45f8c26bc89a4488c712e7ed1d4cd712af4c973b31bbab757bf96/Opacify-0.3.1-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "0d5defc7b460895eff18be5299870898", "sha256": "2f1789942795ce24931810ebbb299c888c9a81849c3ed7612bc055a39afffdcd" }, "downloads": -1, "filename": "Opacify-0.3.1.tar.gz", "has_sig": false, "md5_digest": "0d5defc7b460895eff18be5299870898", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12618, "upload_time": "2019-01-25T09:25:26", "url": "https://files.pythonhosted.org/packages/d9/53/408aa5115feab78121a5749c1d226069e161d78dd44e78f8398554edd41a/Opacify-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "8a03dda45805efdc75ae184eea6ef37d", "sha256": "fa8fb1762478f2c5fc89fe0c0d8b10e3418d54037ba4d93b649c3fced2a1ff8d" }, "downloads": -1, "filename": "Opacify-0.3.2.macosx-10.9-x86_64.tar.gz", "has_sig": false, "md5_digest": "8a03dda45805efdc75ae184eea6ef37d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21735, "upload_time": "2019-01-26T07:20:49", "url": "https://files.pythonhosted.org/packages/d5/b2/06f965a95feff3375dc00f6e5acf0a380d4ea5c565b846acb04423743cee/Opacify-0.3.2.macosx-10.9-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "089689b64eb5a049dd6be66720f4a4b0", "sha256": "03912081eb8b7d79d9e3d0f9f9b3f1bec0a3babf63c5a6feece8735d30c8504e" }, "downloads": -1, "filename": "Opacify-0.3.2-py2-none-any.whl", "has_sig": false, "md5_digest": "089689b64eb5a049dd6be66720f4a4b0", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 16517, "upload_time": "2019-01-26T07:20:47", "url": "https://files.pythonhosted.org/packages/cf/7b/9813495281c9233cffe7b5011eddd9efd9c39fa7756878b0eaaa00d380fa/Opacify-0.3.2-py2-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8a03dda45805efdc75ae184eea6ef37d", "sha256": "fa8fb1762478f2c5fc89fe0c0d8b10e3418d54037ba4d93b649c3fced2a1ff8d" }, "downloads": -1, "filename": "Opacify-0.3.2.macosx-10.9-x86_64.tar.gz", "has_sig": false, "md5_digest": "8a03dda45805efdc75ae184eea6ef37d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21735, "upload_time": "2019-01-26T07:20:49", "url": "https://files.pythonhosted.org/packages/d5/b2/06f965a95feff3375dc00f6e5acf0a380d4ea5c565b846acb04423743cee/Opacify-0.3.2.macosx-10.9-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "089689b64eb5a049dd6be66720f4a4b0", "sha256": "03912081eb8b7d79d9e3d0f9f9b3f1bec0a3babf63c5a6feece8735d30c8504e" }, "downloads": -1, "filename": "Opacify-0.3.2-py2-none-any.whl", "has_sig": false, "md5_digest": "089689b64eb5a049dd6be66720f4a4b0", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 16517, "upload_time": "2019-01-26T07:20:47", "url": "https://files.pythonhosted.org/packages/cf/7b/9813495281c9233cffe7b5011eddd9efd9c39fa7756878b0eaaa00d380fa/Opacify-0.3.2-py2-none-any.whl" } ] }