Metadata-Version: 2.1
Name: hpc-interact
Version: 0.1.1
Summary: Used for file transfer and sending predefined commands to an hpc cluster
Home-page: https://github.com/enviro-lab/hpc-interact.git
License: MIT
Keywords: upload,download,sftp,ssh,expect,file transfer
Author: Sam Kunkleman
Author-email: skunklem@uncc.edu
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
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Project-URL: Repository, https://github.com/enviro-lab/hpc-interact.git
Description-Content-Type: text/markdown

# hpc-interact
Used for scripting file transfer (sftp) and sending commands (ssh) to hpc - a wrapper for `expect`

## Requires `expect`
If needed, install via:
```
$ sudo apt install expect
```

## Install
From PyPI:
```console
pip install hpc-interact
```

Or just clone the repo and use `hpc_interact.py` directly.

## Usage
Instantiate a Scripter object:
```python
>>> # Connect via sftp
>>> from hpc_interact import Scripter
>>> scripter = Scripter(config="./login_config", site='somewhere.uni.edu', mode='sftp')
>>> # NOTE: If "./login_config" doesn't exist, you'll be prompted to create it
```

Prepare any steps to undertake
```python
>>> outdir = "/Users/me/somedir"
>>> scripter.cwd("/some/remote/directory")
>>> for file in ["file1.txt","file2.txt"]:
...     scripter.get(file,outdir)
```

### To see what steps you've added, run:
```
>>> scripter.preview_steps()
```
Output:
```console

Command preview:
(0, 'cd /some/remote/directory\n')
(1, 'mkdir /Users/me/somedir\n')
(2, 'cd /Users/me/somedir\n')
(3, 'put file1.txt \n\n')
(4, 'mkdir /Users/me/somedir\n')
(5, 'cd /Users/me/somedir\n')
(6, 'put file2.txt \n\n')
```

### To run:
```python
>>> scripter.run()
```

### Forgot something but don't want to create a new Scripter object?
```python
>>> scripter.clear()
>>> scripter.put("/Users/me/another-dir/cool_script.sh",outdir="/some/remote/directory",new_name="coolest_script_on_the_hpc.sh")
>>> scripter.run()
```

### Run a script on the cluster
```python
>>> # Connect via ssh
>>> from hpc_interact import cluster.Scripter
>>> scripter = Scripter(config="./login_config", site='somewhere.uni.edu', mode='ssh')
>>> 
>>> # run it
>>> scripter.basic_step("bash","/some/remote/directory/coolest_script_on_the_hpc.sh")
>>> scripter.run()
```

### Started as ssh but want need to transfer files?
```python
>>> scripter.reset_mode("sftp")
>>> add_some_steps(scripter)
>>> scripter.run()
```
