meta_package_manager.bar_plugin package¶
Xbar and SwiftBar plugin for Meta Package Manager (i.e. the mpm CLI).
Default update cycle should be set to several hours so we have a chance to get user’s attention once a day. Higher frequency might ruin the system as all checks are quite resource intensive, and Homebrew might hit GitHub’s API calls quota.
Xbar automatically bridge plugin options between its UI and environment variable on script execution.
This is in progress for SwiftBar.
- meta_package_manager.bar_plugin.PYTHON_MIN_VERSION = (3, 9, 0)¶
Minimal requirement is aligned to macOS default.
See: https://kdeldycke.github.io/meta-package-manager/bar-plugin.html#python-3-9-required
- meta_package_manager.bar_plugin.SWIFTBAR_MIN_VERSION = (2, 1, 2)¶
SwiftBar v2.1.2 fix an issue with multiple parameters in the font strings.
- meta_package_manager.bar_plugin.XBAR_MIN_VERSION = (2, 1, 7)¶
Xbar v2.1.7-beta is the latest version available on Homebrew.
- meta_package_manager.bar_plugin.MPM_MIN_VERSION = (5, 0, 0)¶
Mpm v5.0.0 was the first version taking care of the complete layout rendering.
- class meta_package_manager.bar_plugin.Venv(*values)¶
Bases:
Enum
Type of virtualenv we are capable of detecting.
- PIPENV = 1¶
- UV = 2¶
- POETRY = 3¶
- VIRTUALENV = 4¶
- class meta_package_manager.bar_plugin.MPMPlugin[source]¶
Bases:
object
Implements the minimal code necessary to locate and call the
mpm
CLI on the system.Once
mpm
is located, we can rely on it to produce the main output of the plugin.The output must supports both Xbar dialect and SwiftBar dialect.
- static getenv_str(var, default=None)[source]¶
Utility to get environment variables.
Note that all environment variables are strings. Always returns a lowered-case string.
- static getenv_bool(var, default=False)[source]¶
Utility to normalize boolean environment variables.
Relies on
configparser.RawConfigParser.BOOLEAN_STATES
to translate strings into boolean. See: https://github.com/python/cpython/blob/89192c4/Lib/configparser.py#L597-L599- Return type:
- static normalize_params(font_string, valid_ids=None)[source]¶
Parse a multi-parameters string and return a normalized string.
The string is expected to be a space-separated list of parameters, each parameter being a key/value pair separated by an equal sign.
Only keeps the parameters that are in the
valid_ids
set and ignores the rest. By default, onlycolor
,font
andsize
are kept.Multiple values for the same parameter will be deduplicated, and the last one will be kept.
Available parameters are: - https://github.com/swiftbar/SwiftBar?tab=readme-ov-file#parameters - https://github.com/matryer/xbar-plugins/blob/main/CONTRIBUTING.md#parameters
- Return type:
- static str_to_version(version_string)[source]¶
Transforms a string into a tuple of integers representing a version.
- static version_to_str(version_tuple)[source]¶
Transforms a tuple of integers representing a version into a string.
- Return type:
- property table_rendering: bool¶
Aligns package names and versions, like a table, for easier visual parsing.
If
True
, will aligns all items using a fixed-width font.
- property all_pythons: list[str]¶
Search for any Python on the system.
Returns a generator of normalized and deduplicated
Path
to Python binaries.Filters out old Python interpreters.
We first try to locate Python by respecting the environment variables as-is, i.e. as defined by the user. Then we return the Python interpreter used to execute this script.
TODO: try to tweak the env vars to look for homebrew location etc?
- static search_venv(folder)[source]¶
Search for signs of a virtual env in the provided folder.
Returns the type of the detected venv and CLI arguments that can be used to run a command from the virtualenv context.
Returns
(None, None)
if the folder is not a venv.Inspired by autoswitch_virtualenv.plugin.zsh and `uv's get_interpreter_info.py https://github.com/astral-sh/uv/blob/f770b25/crates/uv-python/python/get_interpreter_info.py>`_.
- search_mpm()[source]¶
Iterate over possible CLI commands to execute
mpm
.Should be able to produce the full spectrum of alternative commands we can use to invoke
mpm
over different context.The order in which the candidates are returned by this method is conserved by the
ranked_mpm()
method below.We prioritize venv-based findings first, as they’re more likely to have all dependencies installed and sorted out. They’re also our prime candidates in unittests.
Then we search for system-wide installation. And finally Python modules.
- property ranked_mpm: list[tuple[tuple[str, ...], bool, bool, tuple[int, ...] | None, str | Exception | None]]¶
Rank the mpm candidates we found on the system.
Sort them by: - runnability - up-to-date status - version number - error
On tie, the order from
search_mpm
is respected.
- property best_mpm: tuple[tuple[str, ...], bool, bool, tuple[int, ...] | None, str | Exception | None]¶
- static pp(label, *args)[source]¶
Print one menu-line with the Xbar/SwiftBar dialect.
First argument is the menu-line label, separated by a pipe to all other non- empty parameters, themselves separated by a space.
Skip printing of the line if label is empty.
- Return type:
- print_error(message, submenu='')[source]¶
Print a formatted error message line by line.
A red, fixed-width font is used to preserve traceback and exception layout. For compactness, the block message is dedented and empty lines are skipped.
Message is always casted to a string as we allow passing of exception objects and have them rendered.
- Return type:
Print the main menu.
- Return type: