Metadata-Version: 2.1
Name: zxpy
Version: 1.2.4
Summary: UNKNOWN
Home-page: https://github.com/tusharsadhwani/zxpy
Author: Tushar Sadhwani
Author-email: tushar.sadhwani000@gmail.com
License: MIT
Description: # zxpy
        
        Shell scripts made simple 🐚
        
        Inspired by Google's [zx](https://github.com/google/zx), but made much simpler and more accessible using Python.
        
        ## Rationale
        
        Bash is cool, and it's extremely powerful when paired with linux coreutils and pipes. But apart from that, it's a whole another language to learn, and has a (comparatively) unintuitive syntax for things like conditionals and loops.
        
        `zxpy` aims to supercharge bash by allowing you to write scripts in Python, but with native support for bash commands and pipes:
        
        ```python
        #! /usr/bin/env zxpy
        todo_comments = ~"git grep -n TODO"
        for todo in todo_comments.splitlines():
            filename, lineno, code = todo.split(':', 2)
            *_, comment = code.partition('TODO')
            print(f"{filename:<40} on line {lineno:<4}: {comment.lstrip(': ')}")
        ```
        
        Running this, we get:
        
        ```console
        $ ./todo_check.py
        README.md                                on line 154 : move this content somewhere more sensible.
        instachat/lib/models/message.dart        on line 7   : rename to uuid
        instachat/lib/models/update.dart         on line 13  : make int
        instachat/lib/services/chat_service.dart on line 211 : error handling
        server/api/api.go                        on line 94  : move these to /chat/@:address
        server/api/user.go                       on line 80  : check for errors instead of relying on zero value
        ```
        
        ## Installation <a href="https://pypi.org/project/zxpy"><img src="https://img.shields.io/badge/pypi-zxpy-blue?style=flat"></a>
        
        ```console
        pip install zxpy
        ```
        
        ## Example
        
        Make a file `script.py` (The name and extension can be anything):
        
        ```python
        #! /usr/bin/env zxpy
        ~'echo Hello world!'
        
        file_count = ~'ls -1 | wc -l'
        print("file count is:", file_count)
        ```
        
        And then run it:
        
        ```bash
        $ chmod +x ./script.py
        
        $ ./script.py
        Hello world!
        file count is: 3
        ```
        
        > Run `>>> help('zx')` in Python REPL to find out more ways to use zxpy.
        
        A more involved example: [run_all_tests.py](./examples/run_all_tests.py)
        
        ```python
        #! /usr/bin/env zxpy
        test_files = (~"find -name '*_test\.py'").splitlines()
        
        for filename in test_files:
            try:
                print(f'Running {filename:.<50}', end='')
                output = ~f'python {filename}'  # variables in your shell commands :D
                assert output == ''
                print('Test passed!')
            except:
                print(f'Test failed.')
        ```
        
        Output:
        
        ```bash
        $ ./run_all_tests.py
        Running ./tests/python_version_test.py....................Test failed.
        Running ./tests/platform_test.py..........................Test passed!
        Running ./tests/imports_test.py...........................Test passed!
        ```
        
        Examples are all in the [examples folder](./examples).
        
        ## Interactive mode
        
        ```pycon
        $ zxpy
        zxpy shell
        Python 3.8.5 (default, Jan 27 2021, 15:41:15)
        [GCC 9.3.0]
        
        >>> ~"ls | grep '\.py'"
        __main__.py
        setup.py
        zx.py
        >>>
        ```
        
        > Also works with `path/to/python -m zx`
        
        It can also be used to start a zxpy session in an already running REPL.
        Simply do:
        
        ```pycon
        >>> import zx; zx.install()
        ```
        
        and zxpy should be enabled in the existing session.
        
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Python: >=3.6
Description-Content-Type: text/markdown
