Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/python-mario/mario
Powerful Python pipelines for your shell
https://github.com/python-mario/mario
async cli pipes plugins python shell unix
Last synced: 3 months ago
JSON representation
Powerful Python pipelines for your shell
- Host: GitHub
- URL: https://github.com/python-mario/mario
- Owner: python-mario
- License: other
- Created: 2019-05-06T21:54:41.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-01-07T06:40:21.000Z (about 3 years ago)
- Last Synced: 2024-09-30T06:47:39.821Z (4 months ago)
- Topics: async, cli, pipes, plugins, python, shell, unix
- Language: Python
- Homepage: https://python-mario.readthedocs.io
- Size: 1.73 MB
- Stars: 504
- Watchers: 6
- Forks: 15
- Open Issues: 43
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
README
``````````````````````````````````````````````````````
Mario: Shell pipes in Python
``````````````````````````````````````````````````````.. image:: https://img.shields.io/github/stars/python-mario/mario?style=social
:target: https://github.com/python-mario/mario
:alt: GitHub.. image:: https://readthedocs.org/projects/python-mario/badge/?style=flat
:target: https://readthedocs.org/projects/python-mario
:alt: Documentation Status.. image:: https://img.shields.io/travis/com/python-mario/mario/master
:target: https://travis-ci.com/python-mario/mario#
:alt: Build status.. image:: https://img.shields.io/pypi/v/mario.svg
:target: https://pypi.python.org/pypi/mario
:alt: PyPI package.. image:: https://img.shields.io/codecov/c/github/python-mario/mario.svg
:target: https://codecov.io/gh/python-mario/mario
:alt: CoverageHave you ever wanted to use Python functions directly in your Unix shell? Mario can read and write csv, json, and yaml; traverse trees, and even do xpath queries. Plus, it supports async commands right out of the box. Build your own commands with a simple configuration file, and install plugins for even more!
Mario is the plumbing snake 🐍🔧 helping you build data pipelines in your shell 🐢.
.. image:: https://raw.githubusercontent.com/python-mario/mario/master/docs/time.png
:alt: What time is it in Sydney?&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Features
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&- Execute Python code in your shell.
- Pass Python objects through multi-stage pipelines.
- Read and write csv, json, yaml, toml, xml.
- Run async functions natively.
- Define your own commands in a simple configuration file or by writing Python code.
- Install plugins to get more commands.
- Enjoy high test coverage, continuous integration, and nightly releases.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Installation
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..
installation-inclusion-startMario
***********************************************************Windows support is hopefully coming soon. Linux and MacOS are supported now.
Get Mario with pip:
.. code-block:: bash
python3.7 -m pip install mario
If you're not inside a virtualenv, you might get a ``PermissionsError``. In that case, try using:
.. code-block:: bash
python3.7 -m pip install --user mario
or for more isolation, use `pipx `_:
.. code-block:: bash
pipx install --python python3.7 mario
Mario addons
***********************************************************The `mario-addons `__ package provides a number of useful commands not found in the base collection.
Get Mario addons with pip:
.. code-block:: bash
python3.7 -m pip install mario-addons
If you're not inside a virtualenv, you might get a ``PermissionsError``. In that case, try using:
.. code-block:: bash
python3.7 -m pip install --user mario-addons
or for more isolation, use `pipx `_:
.. code-block:: bash
pipx install --python python3.7 mario
pipx inject mario mario-addons..
installation-inclusion-end&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Quickstart
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Basics
***********************************************************Invoke with ``mario`` at the command line.
.. code-block:: bash
$ mario eval 1+1
2Given a csv like this:
.. code-block:: bash
$ cat < hackers.csv
name,age
Alice,21
Bob,22
Carol,23
EOFUse ``read-csv-dicts`` to read each row into a dict:
.. code-block:: bash
$ mario read-csv-dicts < hackers.csv
{'name': 'Alice', 'age': '21'}
{'name': 'Bob', 'age': '22'}
{'name': 'Carol', 'age': '23'}Use ``map`` to act on each input item ``x`` :
.. code-block:: bash
$ mario read-csv-dicts map 'x["name"]' < hackers.csv
Alice
Bob
CarolChain Python functions together with ``!``:
.. code-block:: bash
$ mario read-csv-dicts map 'x["name"] ! len' < hackers.csv
5
3
5or by adding another command
.. code-block:: bash
$ mario read-csv-dicts map 'x["name"]' map len < hackers.csv
5
3
5Use ``x`` as a placeholder for the input at each stage:
.. code-block:: bash
$ mario read-csv-dicts map 'x["age"] ! int ! x*2' < hackers.csv
42
44
46Automatically import modules you need:
.. code-block:: bash
$ mario map 'collections.Counter ! dict' <<`_ for the complete set, and get even more from `mario-addons `__.
``eval``
----------------------------------------------------Use ``eval`` to evaluate a Python expression.
.. code-block:: bash
% mario eval 'datetime.datetime.utcnow()'
2019-01-01 01:23:45.562736``map``
----------------------------------------------------Use ``map`` to act on each input item.
.. code-block:: bash
$ mario map 'x * 2' < 1' <`_.
For example, after generating a several rows of items,
.. code-block:: bash
$ mario read-csv-tuples <`_ for details.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Plugins
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Add new commands like ``map`` and ``reduce`` by installing Mario plugins. You can try them out without installing by adding them to any ``.py`` file in your ``~/.config/mario/modules/``.
Share popular commands by installing the `mario-addons `_ package.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Q & A
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..
Q&A-inclusion-startWhat's the status of this package?
************************************************************ This package is experimental and is subject to change without notice.
* Check the `issues page `_ for open tickets.Why another package?
***********************************************************A number of cool projects have pioneered in the Python-in-shell space. I wrote Mario because I didn't know these existed at the time, but now Mario has a bunch of features the others don't (user configuration, multi-stage pipelines, async, plugins, etc).
* https://github.com/Russell91/pythonpy
* http://gfxmonk.net/dist/doc/piep/
* https://spy.readthedocs.io/en/latest/intro.html
* https://github.com/ksamuel/Pyped
* https://github.com/ircflagship2/pype
* https://code.google.com/archive/p/pyp/..
Q&A-inclusion-end