Skip to main content

Tool for manual file selection

Project description

mansel

mansel is a Python library and command line tool for manually selecting files and directories from a tree view.

Features

  • Graphical user interface with a tree view of the directory structure.
  • Support for pre-selection of paths in the directory tree.
  • Running total of the size of selected directories and files.
  • Running total of selection size calculated in a background thread.

Installation

mansel can be installed with pip:

pip install mansel

The mansel package depends on PySide2 which packages the Qt runtime and Python bindings to it. Alternatively, the mansel command line tool can be installed with

pip install mansel-pyqt

mansel-pyqt depends on PyQt5 and requires that the Qt runtime be installed separately.

Both mansel and mansel-pyqt depend on the mansel-lib package which can be installed directly if you want to use mansel's features in another project without installing the command line tool.

Usage

mansel can be run from the command-line with

mansel --path PATH --selection SELECTION

where PATH is the root path to use for file selection and SELECTION is a file containing a newline delimited list of paths relative to PATH which should be selected when the file selection window opens. Invoking mansel opens a dialog window with the contents of PATH shown as an expandable tree view with checkboxes by every file and directory. Individual files and directories can be selected and unselected and directories can be expanded to select individual files on paths below PATH. When OK is pressed to exit the window, the list of selected files and directories is printed to stdout.

Usage notes

  • If SELECTION is -, then the selection list is read from stdin.
  • A running tally of the current selection size is shown at the bottom of the window. The calculation is performed on a background thread. The size total is followed by "(Calculating)" while the selection size is being re-tallied.
  • Cancel, Ctrl+W, Ctrl+Q all close the window without printing to stdout.
  • Ctrl+Enter is equivalent to pressing OK.
  • mansel-cli is a wrapper for mansel. Effectively, installing mansel-cli instealls mansel and PySide2 (mansel does not list PySide2 as a dependency to allow it to be used with PyQt5 as well) and sets up a wrapper sript that calls python -m mansel.

API

When using mansel in a larger Qt project, there are two main classes for interfaces for working with the manual file selection:

  1. UIDialog(root_path, selection, parent): a complete dialog window displaying a tree view of a file system with checkboxes for all entries.
  • root_path: top level directory to show in the tree view of the file ssytem.
  • selection: list of paths relative to the root_path of files that should be selected when the dialog window is first shown.
  • parent: parent Qt object for the dialog window.
  1. CheckableFileSystemModel: a data model of a file system that supports selecting items from a tree view.

Contributing

mansel is distributed under the permissive 0BSD license. Outside contirubtions are welcome. Contributions should be licensed under the 0BSD license. If you want your name added to the contributors list, add it to AUTHORS.md as part of your submission.

While the license does not require acknowledgement, acknowledgement is still appreciated if you use mansel in your project. If you make improvements to mansel, please share them if sharing is feasible.

Related projects

  • treesel provides a terminal-based tree view of a directory for selecting a file to print to stdout. However, it only allows for a single file to be selected. Before writing mansel some effort was spent looking for an existing project that could select and print files but treesel was not found. It was found later when doing a search to see if the name treeselect was available for a Python package.
  • Urwid is a Python terminal interface library. One of the example projects in the Urwid documentation is a file browser naemd browse.py which allows for multiple selection of files and then prints out the file paths on exit.
  • fzf is a terminal program that allows for selection of file paths through fuzzy finding of the path strings. There are many similar projects (see fzf's releated projects list). fzf does not have a tree view but it does allow selecting and printing multiple file paths to stdout.

Future directions

mansel meets its original design requirements (tree view file selection with the ability to preselect some files and with a running sum of the selected files' sizes). Here are some possible future improvements that could be made:

  • Implement a console version. This implementation would likely be based on treesel (using the curses module) or Urwid's browse.py. Alternatively, it could use Prompt Toolkit.

  • Improve continuous integration:

    • Run tests on new commits
    • Run nightly tests against latest versions of dependencies
    • Add pylint and pycodestyle tests
    • Add UI tests that click on checkboxes and buttons
  • Improve packaging:

    • Create PyPI package
    • Create conda package
    • Create other packages (PyInstaller? Linux snap package?)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mansel-0.1.0.tar.gz (3.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mansel-0.1.0-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file mansel-0.1.0.tar.gz.

File metadata

  • Download URL: mansel-0.1.0.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for mansel-0.1.0.tar.gz
Algorithm Hash digest
SHA256 69b81a1dbb3562ab0d45c7bb2e529a8d186e2f87afd380036f2976b739b685f6
MD5 4aa518fd97d5f4aa5a44185b3bf23224
BLAKE2b-256 2c2fbc29023bc1eaa89ae28e1d5525a74500bc3158382177753741421d595bc7

See more details on using hashes here.

File details

Details for the file mansel-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mansel-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for mansel-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 14fa0a8be39eff0ef3bba036eaf0227af37e1a15ffbe2ec45927076b08f844d4
MD5 3fa5de20d4b08e63e50b9b8f9b628c1a
BLAKE2b-256 980e1632ffb1cc39ca0482ec900e57b7f0a04266693ec0ebc42d83f9db44bdae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page