{ "info": { "author": "Tommy Yu", "author_email": "y@metatoaster.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: System :: Filesystems" ], "description": "Introduction\n============\n\nThis package, ``explosive.fuse``, provides a command-line tool,\n``explode``, for mounting of archive files (such as zip) to a directory\nusing `FUSE`_, enabling access to individual file entries within the\ncompressed archives as normal files directly without the typical\nintermediate step of decompression to some temporary location, i.e. all\nfile decompression is done dynamically, on demand. This library is\nconstructed with modularity in mind to enable customization, such as how\nthe file entries within the archives are to be presented at the mounted\nlocation, and that the helper classes and functions within can be reused\nelsewhere.\n\n.. _FUSE: https://github.com/libfuse/libfuse\n\nCurrently, the following archive formats are supported:\n\n- zip (builtin package ``zipfile``)\n- rar (require third-party package |unrar|_)\n\n.. |unrar| replace:: ``unrar``\n.. _unrar: https://pypi.python.org/pypi/unrar/\n\nArchive formats that require third-party packages are not enabled by\ndefault. To enable, please install the packages as specified, and more\ninformation about them can be accessed via the links provided above.\n\n.. image:: https://travis-ci.org/metatoaster/explosive.fuse.svg?branch=0.5.x\n :target: https://travis-ci.org/metatoaster/explosive.fuse\n.. image:: https://coveralls.io/repos/metatoaster/explosive.fuse/badge.svg?branch=0.5.x\n :target: https://coveralls.io/r/metatoaster/explosive.fuse?branch=0.5.x\n\n\nInstallation\n============\n\nIf all system level dependencies are satisfied, the installation\nprocess is simply a single ``pip`` call, like so::\n\n $ pip install explosive.fuse\n\nThis can be done either at the system level (i.e. using ``sudo``) to\nmake this available for all users on the system, or inside a virtualenv\nfor just a single user.\n\nSystem level dependencies\n-------------------------\n\nExplosiveFUSE requires the FUSE kernel module for your operating system\nand its user space tools be available, and Python 2.7/3.3+/PyPy.\n\nFirst off, install the FUSE kernel module and user space tools if they\nare not already installed.\n\nLinux\n~~~~~\n\nArch Linux::\n\n $ sudo pacman -S fuse\n\nDebian/Ubuntu::\n\n $ sudo apt-get install fuse\n\nGentoo (also, please refer to its `wiki entry on FUSE`_)::\n\n $ sudo emerge --ask sys-fs/fuse\n\n.. _wiki entry on FUSE: https://wiki.gentoo.org/wiki/Filesystem_in_Userspace\n\nRedHat/CentOS/Fedora::\n\n $ sudo yum install fuse\n\nOS X\n~~~~\n\nThis has been somewhat tested through the experimental build features\nprovided by Travis-CI, with dependencies installed via `Homebrew`_.\nFor installation of Homebrew, please refer to instructions outlined at\nhttp://brew.sh/.\n\nOnce that's done, the packages for `FUSE for OS X`_ and `pyenv`_ (which\nprovides Python version management) can be installed using the following\ncommands::\n\n $ brew update\n $ brew install caskroom/cask/osxfuse\n $ brew install pyenv\n $ pyenv install 3.5.2 # or your desired version of Python\n $ pyenv global 3.5.2\n $ pyenv rehash\n\n.. _Homebrew: http://brew.sh\n.. _pyenv: https://github.com/yyuu/pyenv\n.. _FUSE for OS X: https://osxfuse.github.io/\n\nOther installation methods\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis may be installed into the default user specific library directory \n(typically ``~/.local``) using the following command::\n\n $ pip install --user explosive.fuse\n\nThe executable will then be available at ``~/.local/bin/explode``.\n\nOr be installed in a virtualenv, too::\n\n $ virtualenv ~/.venv\n $ source ~/.venv/bin/activate\n $ pip install explosive.fuse\n\nNaturally, installation from source can be done, and provided ``git`` is\ninstalled, the latest development version can be done like so::\n\n $ pip install git+https://github.com/metatoaster/explosive.fuse#egg=explosive.fuse\n\nAlternatively, manual usage of ``git`` and ``python setup.py develop``\nwill work also.\n\nUsage\n=====\n\nSimply invoking ``explode`` from the shell this help message will be\npresented::\n\n usage: explode [-h] [-l ] [--layout-info] [-d] [-f] [-m]\n [--manager-dir [MANAGER_DIR]] [--overwrite] [--omit-arcname]\n [-V]\n dir archives [archives ...]\n\nIn the most simple form the command can simply be invoked like so::\n\n $ mkdir /tmp/mnt\n $ explode /tmp/mnt demo1.zip\n\nThis will mount the contents of ``demo1.zip`` to ``/tmp/mnt``. To\nverify that this worked, a simple ``ls`` can be used::\n\n $ ls -l /tmp/mnt/\n total 0\n -r--r--r-- 1 user user 33 Oct 26 23:19 file1\n -r--r--r-- 1 user user 33 Oct 26 23:19 file2\n -r--r--r-- 1 user user 33 Oct 26 23:19 file3\n -r--r--r-- 1 user user 33 Oct 26 23:19 file4\n -r--r--r-- 1 user user 33 Oct 26 23:19 file5\n -r--r--r-- 1 user user 33 Oct 26 23:19 file6\n\nFiles are presented as being owned by the user that created this mount\npoint. For specifics on access permissions, please consult the fuse\nuser manual (i.e. ``man fuse``).\n\nTo unmount, simply call::\n\n $ fusermount -u /tmp/mnt/\n\nOr terminate the process if it was ran in the foreground.\n\nIt is possible to explode multiple archives onto the target directory::\n\n $ explode /tmp/mnt demo1.zip demo2.zip\n\nBy default, a new layout strategy will be used, which will include the\nname of the source archive file. This can be verified::\n\n $ ls -l /tmp/mnt/\n total 0\n dr-xr-xr-x 2 user user 0 Oct 26 23:22 demo1.zip\n dr-xr-xr-x 2 user user 0 Oct 26 23:22 demo2.zip\n\nLayout Strategies\n-----------------\n\nThe way the file entries are laid out in the resulting filesystem can be\nmodified by the use of a layout strategy. This is specified using the\n``-l`` or the ``--layout`` flag. Naturally, the final result is also\ninfluenced by the usage of the ``--overwrite`` and the\n``--omit-arcname`` flags and the arguments associated with each of the\nstrategies (which are specified by appending ``:``, followed by the\nvalue of each positional argument(s)). Detailed information on every\navailable strategies are available by calling ``explode --layout-info``,\nbut for completeness sake the following strategies are provided by a\ndefault installation:\n\ncodepage\n Decode the filename entries into unicode from the specified\n codepage. Example: ``-l codepage:shift_jis`` will decode filenames\n that look like ``\u00e9\u2592\u00e9\u00b1\u00e9\u2554\u00e9\u2510\u00e9\u2550`` into ``\u3053\u3093\u306b\u3061\u306f``.\n\ndefault\n Present file entries as they were within their respective directory\n structures to the root of its source archive.\n\nflatten\n Flattens the directory structure to the root of the mount point by\n replacing all path separators for each file entries with the ``_``\n character by default. This character can be specified by using the\n argument syntax (e.g. use ``-l flatten:-`` will replace all path\n separators with the ``-`` character.)\n\njunk\n Junk paths, keep only directories counting from root up to the level\n specified for a positive keep number, otherwise junking all but the\n absolute number of keep levels previous to the basename of the\n filename for a negative keep number. Default is to keep no\n directories. Useful value is ``1`` if it is desirable to keep the\n source archive name as a container directory (i.e. ``-l junk:1``) if\n ``--omit-arcname`` is not used.\n\nAn important note: by default, the basename of the archive file will be\nprepended to each of its file entries before being filtered through the\nlayout strategy, unless the ``--omit-arcname`` flag is used.\n\nFlags for fine-tuning filesystem behavior\n-----------------------------------------\n\n``--debug``\n Print debug messages to stdout.\n\n``--foreground``\n Run in foreground.\n\n``-m, --manager``\n Enable the symlink manager directory. This option exposes all the\n archive files under the management directory (defined by the\n ``--manager-dir`` flag, default is ``.manager`` under the root of\n the mount point) as symlinks. Creating symlinks to valid archive\n files will add the file entries in them to the filesystem, and\n removing the symlinks will remove its associated entries from the\n filesystem.\n\n``--omit-arcname``\n Sometimes it may be desirable to omit the name of the source archive\n files from the generated paths.\n\n For example, if we have multiple archive files with names\n ``SNS_001.zip`` up to ``SNS_100.zip``, and inside there we simply\n have files like ``01.jpg`` up to ``20.jpg`` lying at the root level,\n activating the ``--omit-arcname`` flag flag will result in only 20\n files from ``SNS_001.zip`` archive being accessible as by default as\n that was the first file specified to be loaded.\n\n``-s, --splitext-arcname``\n Sometimes it may be desirable to split the filename extenxion out of\n the name of the source archive files from the generated paths.\n\n``--overwrite``\n Useful when there are multiple file entries of the same name from\n multiple archives and only the latest one is desired, this flag will\n \"overwrite\" any existing entries the mapping process may encounter.\n\n\nTroubleshooting\n===============\n\nError messages\n--------------\n\nMounting shows the following error message::\n\n fusermount: failed to open /etc/fuse.conf: Permission denied\n\nThis can be safely ignored, or alternatively have your system's\nadministrator grant you read access to that file by putting your account\ninto the ``fuse`` user group or equivalent on your system, or change the\npermission to that file to world readable, as that file does not contain\nany sensitive information under typical usage.\n\nOther issues\n------------\n\nIf you encountered any other problems using this software please file an\nissue using the `issue tracker`_ for this project.\n\n.. _issue tracker: https://github.com/metatoaster/explosive.fuse/issues\n\n\nLicense\n=======\n\nThis work is licensed under `GNU Generic Public License, version 3`_.\n\n.. _GNU Generic Public License, version 3:\n http://opensource.org/licenses/gpl-3.0.html\n\nChangelog\n=========\n\n0.5 (2018-07-13)\n----------------\n\n- Support for dropping of the file name extension (mostly to improve the\n presentation of filename sorting for certain file managers); may be\n toggled through the ``-s`` or ``--splitext-arcname`` flag.\n- Be able to extract zip files that do not have a ``.zip`` file name\n extension, as this is now the default fallback to better support the\n exploding of common file formats that make use of ``zip``, e.g.\n ``odt`` or ``docx``.\n\n0.4 (2016-08-20)\n----------------\n\n- RAR archive format support added using the package ``unrar``.\n\n0.3 (2015-12-12)\n----------------\n\n- Mappings now use absolute path to ensure this works in daemon mode.\n- New layout strategy: codepage can be used to remap non-unicode name\n encodings to unicode.\n- File ownership now shown as being owned by the user that started the\n mount process.\n- Symlink management support added; this is enabled using the ``-m``\n flag, optionally with ``--manager-dir`` to explicitly change where\n that lies. This allows loading and unloading of files via the adding\n and removing of symlinks in the management directory.\n- Decreased memory consumption and performance from reads as inflate\n is called only on demand. This however requires single-thread mode\n for the mean time.\n\n0.2 (2015-10-31)\n----------------\n\n- Removed specialized archive layout strategies (i.e. the zip* ones)\n- By default, basename of archive will be prepended to the path for each\n file entries. This behavior can directly be disabled using the\n ``--omit-arcname`` flag. (Naturally, a layout strategy can still\n modify that path, like ``junk``.\n- All pathmaker callables are now actually factories that produce the\n actual pathmaker. They can now take arguments to influence how the\n produced pathmaker behaves. The arguments can be entered using the\n extended ``-l`` or ``--layout`` syntax. Details documented in\n ``--layout-info``.\n- Implemented the ``--overwrite`` flag, allowing newer entries to\n \"overwrite\" existing ones.\n- A number of other internal API changes.\n\n0.1 (2015-10-26)\n----------------\n\n- Initial release with just basic zip file support.\n- File extraction is naive, such that the entire contents of a single\n given file entry will be extracted to memory per read.\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/metatoaster/explosive.fuse", "keywords": "", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "explosive.fuse", "package_url": "https://pypi.org/project/explosive.fuse/", "platform": "", "project_url": "https://pypi.org/project/explosive.fuse/", "project_urls": { "Homepage": "https://github.com/metatoaster/explosive.fuse" }, "release_url": "https://pypi.org/project/explosive.fuse/0.5/", "requires_dist": [ "setuptools", "fusepy" ], "requires_python": "", "summary": "Mount archives as a filesystem.", "version": "0.5" }, "last_serial": 4058461, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "52a1a0ac0c340f1c003006889ad01560", "sha256": "284bc5ebb0b5b03d74303acee81a4f8d39bf0e48c2b315156f8073e181451aff" }, "downloads": -1, "filename": "explosive.fuse-0.1.tar.gz", "has_sig": false, "md5_digest": "52a1a0ac0c340f1c003006889ad01560", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8627, "upload_time": "2015-10-26T11:47:49", "url": "https://files.pythonhosted.org/packages/77/40/77827cfc74901af47b19661cfc6a0017da665c253a50b7a5a684d42601f5/explosive.fuse-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "3963bfcafdd1a6cffe2f707ae5008564", "sha256": "a85e010a183d8315c66b8e0bfa364cebc3e6aa6c6d7ba88f83990e720e8973a2" }, "downloads": -1, "filename": "explosive.fuse-0.2.tar.gz", "has_sig": false, "md5_digest": "3963bfcafdd1a6cffe2f707ae5008564", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14241, "upload_time": "2015-10-31T08:10:51", "url": "https://files.pythonhosted.org/packages/44/b6/267533115b56c456629a475c1298171b522c54dfa06bc956c0adb1550acd/explosive.fuse-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "5db77e19f30bd56ec483e4aa0f7a57b3", "sha256": "0536b00742ba5fa6f87acc7e53cc701a9d4fba4eedef5256021a432018fbc09c" }, "downloads": -1, "filename": "explosive.fuse-0.3.tar.gz", "has_sig": false, "md5_digest": "5db77e19f30bd56ec483e4aa0f7a57b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20336, "upload_time": "2015-12-12T06:04:24", "url": "https://files.pythonhosted.org/packages/cd/73/214f66c3ba7c1c86f43432ac35eeaa44eade96818935711b22b5ca166548/explosive.fuse-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "3536a69bbcea945f5eb406d56d10a43e", "sha256": "ea988aed28c850850f28f1d90e48396cf064bfd1700398ae27fbbb04306b1bdc" }, "downloads": -1, "filename": "explosive.fuse-0.4.tar.gz", "has_sig": false, "md5_digest": "3536a69bbcea945f5eb406d56d10a43e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21684, "upload_time": "2016-08-20T06:24:26", "url": "https://files.pythonhosted.org/packages/fc/95/bd566b9eeb1f931879f5a0a72a18ed15ad576cb6c44b4d09df0e99c56a0e/explosive.fuse-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "5bb191c2aa3c86421489160b6a7b27dd", "sha256": "d4e076a79b8239f4402558051b36aab5eb01fddd8bd0c5e89e4180bdeb19391b" }, "downloads": -1, "filename": "explosive.fuse-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5bb191c2aa3c86421489160b6a7b27dd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20108, "upload_time": "2018-07-13T15:54:56", "url": "https://files.pythonhosted.org/packages/0a/b0/b0936796ff5dd8f083704d01f15634b3a9f1ffa7b77bb9daea7e43b7565e/explosive.fuse-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf7998feb453fbcd249748781196f358", "sha256": "b868b6258a7cd80b573e68c4c3de2ea05dc21ea4f06a4dc37b64c29553a7a555" }, "downloads": -1, "filename": "explosive.fuse-0.5.zip", "has_sig": false, "md5_digest": "cf7998feb453fbcd249748781196f358", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32525, "upload_time": "2018-07-13T15:54:58", "url": "https://files.pythonhosted.org/packages/4a/e6/f7e70c5e29b123ee9b1911a94acad8c7a7e80f5eaacee87231f5ce6e78e6/explosive.fuse-0.5.zip" } ], "0.5.dev0": [ { "comment_text": "", "digests": { "md5": "18b81895e72c8be73bbfab133d8ad085", "sha256": "9491997dd59c150141669ec3a6dd3e412b2f5f1513f5df8275f52b79e64d7d9c" }, "downloads": -1, "filename": "explosive.fuse-0.5.dev0.tar.gz", "has_sig": false, "md5_digest": "18b81895e72c8be73bbfab133d8ad085", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21701, "upload_time": "2016-08-20T06:24:15", "url": "https://files.pythonhosted.org/packages/c9/9b/a4744509ca7abd9e39cd5046262f0127e4ad72681a9a48b94bf7debfa3e0/explosive.fuse-0.5.dev0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5bb191c2aa3c86421489160b6a7b27dd", "sha256": "d4e076a79b8239f4402558051b36aab5eb01fddd8bd0c5e89e4180bdeb19391b" }, "downloads": -1, "filename": "explosive.fuse-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5bb191c2aa3c86421489160b6a7b27dd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20108, "upload_time": "2018-07-13T15:54:56", "url": "https://files.pythonhosted.org/packages/0a/b0/b0936796ff5dd8f083704d01f15634b3a9f1ffa7b77bb9daea7e43b7565e/explosive.fuse-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf7998feb453fbcd249748781196f358", "sha256": "b868b6258a7cd80b573e68c4c3de2ea05dc21ea4f06a4dc37b64c29553a7a555" }, "downloads": -1, "filename": "explosive.fuse-0.5.zip", "has_sig": false, "md5_digest": "cf7998feb453fbcd249748781196f358", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32525, "upload_time": "2018-07-13T15:54:58", "url": "https://files.pythonhosted.org/packages/4a/e6/f7e70c5e29b123ee9b1911a94acad8c7a7e80f5eaacee87231f5ce6e78e6/explosive.fuse-0.5.zip" } ] }