Metadata-Version: 2.1
Name: flywheel-gear-cli
Version: 0.1.0a7
Summary: CLI for gear operations
License: MIT
Author: Flywheel
Author-email: support@flywheel.io
Requires-Python: >=3.8,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Dist: colorama (>=0.4.4,<0.5.0)
Requires-Dist: docker (>=5.0.0,<6.0.0)
Requires-Dist: flywheel-gear-toolkit (>=0.3.2,<0.4.0)
Requires-Dist: humanize (>=3.9.0,<4.0.0)
Requires-Dist: pydantic (>=1.8.2,<2.0.0)
Description-Content-Type: text/markdown

# Gear toolkit CLI

## Usage

> __WARNING__:
> The Gear-CLI is actively being developed and is in alpha version.
> Parts of it may be broken.  Please use cautiously.
> If you notice a broken part, please either create an issue on this repo
> or email support@flywheel.io "ATTN: Nate Richman" (CODEOWNER, primary developer)

### Installation

The gear-cli is currently in alpha version, it can be installed via `pip install --pre flywheel-gear-cli`

### Gear commands

* `gearcli gear build`: Build a gear image. Basically a wrapper for docker build
which pulls necessary values from the manifest in the specified directory.
* `gearcli gear config`: Create/modify gear config.json for running a gear locally.
* `gearcli gear run`: Run a gear locally, replaces `fw gear run`, uses the config.json
generated by `gear_cli gear config`.
* `gearcli gear update-env`: Update environment from Docker container into manifest.json.
* ~~`gearcli gear upload`: Upload a gear to one or more Flywheel sites.~~
  * Currently waiting for updated SDK release
* `gearcli gear validate-manifest`: Validate `manifest.json` file in current working
  directory.

### Job commands

* `gearcli job pull`: Pull job configuration, assets and build a run script for local testing.

## Directory structure

 Importing of commands happens in the python-cli commands/__init__.py
 Each command in the gear-cli will live in a separate file named
 [command_group]_[command].py, within its command group directory

```bash
flywheel_gear_cli
├── job
│   └── job_pull.py
└── gear
    ├── gear_upload.py
    ├── gear_build.py
    ...
    └── gear_run.py
```

Within each file [command_group]_[command].py, there needs to be an
add_command() function exposed such as the following:

```python

def add_command(subparsers, parents):
    parser = subparsers.add_parser(
        "[command]",parents=parents,help=[help]
    )
    parser.add_argument(...)
    ...
    other arguments
    ...

    parser.set_defaults(func=[command])
    parser.set_defaults(parser=parser)
    return parser

def [command](args):
    pass
```

The previous function signatures can be used as a template.

## Testing

Within the testing folder, for each command there will be unit and integration tests,
for example for `gear_build.py`, the directory will be structured as follows:

```bash
tests
| ...
└── cli
    ├── unit_tests
    |   | ...
    |   └── gear_upload.py
    └── integration_tests
        | ...
        └── gear_upload.py
```

