Metadata-Version: 1.0
Name: ssh-lite
Version: 1.9
Summary: An easy encapsulation for paramiko library which contains only common operations (ssh, sftp, expect..)
Home-page: https://github.com/rainydew/ssh-lite
Author: Rainy Chan
Author-email: rainydew@qq.com
License: UNKNOWN
Description: SSH-Lite
        ========
        
        An easy encapsulation for paramiko library which contains only common
        operations, useful for automatic test and CI/CD deploy.
        
        Updates:
        
        -  Version 1.9 supports python2 code for old projects.
        -  Version 1.7 is a bugfix version that fixes bugs in doc and lower the
           chance of messy code (bc multi bytes character splits into different
           segments).
        -  Version 1.5 is a bugfix version that handles possible
           *UnicodeEncodeError* of terminal output when using an actually
           bytesIO terminal as *debug_file* (i.e. stdout).
        -  Version 1.4 is an enhance version that supports debug info
           redirection and expect-fail-assertion.
        -  Version 1.2 is a bugfix version that supports servers without SFTP
           service (e.g. Gateway Servers).
        
        Features
        --------
        
        -  Interactive shell commands without blocking
        
           -  *send* for sending a command only
           -  *send_and_read* is the most common, for sending a command and read
              all returnes in a timeout period (timeout will be updated after
              receiving any bytes)
           -  *get_buff* for reading all buffers from the terminal in a timeout
              period
        
        -  Uploading or downloading files between local and remote server
        -  Expect function (may raise an exception for timeout or any unexpect
           pattern you set)
        -  Grep function and keys abbreviations
        -  Output redirection
        
        QuickStart
        ----------
        
        install
        
        .. code:: shell
        
           pip install ssh-lite
        
        or update
        
        .. code:: shell
        
           pip install -U ssh-lite
        
        a simple example
        
        .. code:: python
        
           from ssh_lite import Server
        
           ci = Server("127.0.0.1", "123456", "root")
           ci.send_and_read("")    # waiting connection output done, avoid getting extra output before "ls -l" like "Last login: Tue ..."
           print(ci.send_and_read("ls -l"))
           del ci
        
        the effect is like
        
        ::
        
           ls -l
           total 1736
           -rw-r--r-- 1 root  root  1775417 Aug 25  2019 get-pip.py
           -rwxrwxrwx 1 root  root      289 Feb 20 12:00 temp.py
           -rwxrwxrwx 1 root  root      136 Nov 22 21:18 upload
        
        another little complex example to explain the functions
        
        .. code:: python
        
           from ssh_lite import Server, KeyAbbr
        
           remote = "/docker_binding_path"
           file = "test.file"
        
           with Server("127.0.0.1", "123456", "root", port=22, key_path=None) as ci:  # type: Server  # rsa keys are supported
               ci.debug = True     # to see server inputs and outputs
               ci.get_file("/a_log_file_to_get", ".")      # getting files doesn't need destination filename 
               ci.send_and_read("mkdir -p " + remote, timeout=1)
               ci.send_and_read("rm -f {}*".format(remote), timeout=1)
               ci.put_file("prepare/" + file, remote + file)      # putting files strictly need destination filename
               ci.send_and_read("", timeout=1)
               cmd = 'docker exec -i container_name curl -v "http://127.0.0.1:9990/upload?file=/reference_path/{}&uri=me"'.format(
                   file)
               print("inner cmd is: {}".format(cmd))
               ci.send(cmd)
               ci.expect("< HTTP/1.1 200 OK", timeout=30, failpat=["< HTTP/1.1 4", "< HTTP/1.1 5"])      
               # will raise an exception if we cannot see 200 OK response in 30 secs or if we find any 4xx 5xx response
               ci.send(KeyAbbr.CTRL_C, end="")      # sending a CTRL+C to exit the HTTP2 long connection
               ci.send('exit')       # exit from container to release the connection
        
        Bug report
        ----------
        
        -  Issues and bugs report to rainydew@qq.com.
        -  Homepage icon leads to my Github project page, issues / PRs / stars
           are welcomed :)
        
Keywords: ssh sftp easy paramiko non-blocking
Platform: UNKNOWN
