Metadata-Version: 2.1
Name: cloudmesh-common
Version: 4.1.10
Summary: A set of useful APIs for cloudmesh
Home-page: https://github.com/cloudmesh/cloudmesh-common
Author: Gregor von Laszewski
Author-email: laszewski@gmail.com
License: Apache 2.0
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Environment :: MacOS X
Classifier: Environment :: OpenStack
Classifier: Environment :: Other Environment
Classifier: Environment :: Plugins
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: User Interfaces
Classifier: Topic :: System
Classifier: Topic :: System :: Distributed Computing
Classifier: Topic :: System :: Shells
Classifier: Topic :: Utilities
Description-Content-Type: text/markdown
Requires-Dist: six
Requires-Dist: nose
Requires-Dist: pytest
Requires-Dist: python-hostlist
Requires-Dist: simplejson
Requires-Dist: oyaml
Requires-Dist: colorama
Requires-Dist: psutil
Requires-Dist: hypothesis
Requires-Dist: ruamel.yaml
Requires-Dist: pathlib
Requires-Dist: pathlib2
Requires-Dist: future
Requires-Dist: humanize

# Cloudmesh Common

[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2656703.svg)](https://doi.org/10.5281/zenodo.2656703)
[![Version](https://img.shields.io/pypi/v/cloudmesh-common.svg)](https://pypi.python.org/pypi/cloudmesh-common)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/cloudmesh/cloudmesh-common/blob/master/LICENSE)
[![Python](https://img.shields.io/pypi/pyversions/cloudmesh-common.svg)](https://pypi.python.org/pypi/cloudmesh-common)
[![Format](https://img.shields.io/pypi/format/cloudmesh-common.svg)](https://pypi.python.org/pypi/cloudmesh-common)
[![Format](https://img.shields.io/pypi/status/cloudmesh-common.svg)](https://pypi.python.org/pypi/cloudmesh-common)
[![Travis](https://travis-ci.com/cloudmesh/cloudmesh-common.svg?branch=master)](https://travis-ci.com/cloudmesh/cloudmesh-common)

## Instalation and Documentation

Please note that several packages are available which are pointed to in the
instalation documentation.

|  | Links |
|---------------|-------|
| Documentation | <https://cloudmesh.github.io/cloudmesh-cloud> |
| Code | <https://github.com/cloudmesh/cloudmesh-cloud> |
| Instalation Instructions | <https://github.com/cloudmesh/get> |

## Highlighted features

This library contains a number of useful functions and APIs that we highlight
here. They are used to interact with the system and provide a number of
functions to implement command line programs and shells.

## Console

The console provides convenient way to print colored messages types in the
terminal, such as errors, info, and regular messages

* [cloudmesh.common.console](https://github.com/cloudmesh/cloudmesh-common/blob/master/cloudmesh/common/console.py)

```python
from cloudmesh.common.console import Console

Console.error("this is an error printed in red wth prefix ERROR:")
Console.msg("this is a msg printed in black")
Console.ok("this is an ok message printed in green")
``` 


## Shell

We have lots of shell commands that call linux commands, but also have a
convenient execution command that returns the results in a string.

For more information we like you to inspect the source code:

* [cloudmesh.common.Shell](https://github.com/cloudmesh/cloudmesh-common/blob/master/cloudmesh/common/Shell.py)


```python
from cloudmesh.common.Shell import Shell

shell = Shell()

print(shell.terminal_type())

# prints after the command is finished
r = shell.execute('pwd') 
print(r)

# prints while the command is executed
r = shell.live('pwd') 
print(r)

# open a new terminal and start the command ls in it (for OSX and Gnome)
shell.terminal("ls")

# an example of a build in command
shell.pip("install cloudmesh-common")
```

We have many such build in commands, please see the source


## Printer

A convenient way to pring dictionaries and lists with repeated
entries as tables, csv, json, yaml. The dictionaries can even be hirachical.

* [cloudmesh.common.Printer](https://github.com/cloudmesh/cloudmesh-common/blob/master/cloudmesh/common/Printer.py)

Let us assume we have 

```python
 data = [
    {
        "name": "Gregor",
        "address": {
            "street": "Funny Lane 11",
            "city": "Cloudville"
        }
    },
    {
        "name": "Albert",
        "address": {
            "street": "Memory Lane 1901",
            "city": "Cloudnine"
        }
    }
 ]
```

Then we can print it nicely with 

```python
print(Printer.flatwrite(self.data,
                    sort_keys=["name"],
                    order=["name", "address.street", "address.city"],
                    header=["Name", "Street", "City"],
                    output="table")
          )
```

Other formats such as csv, json, dict are also supported.

In addition we have also printers for printing attribute lists. Please consult
the source code.

## StopWatch


* [cloudmesh.common.StopWatch](https://github.com/cloudmesh/cloudmesh-common/blob/master/cloudmesh/common/StopWatch.py)

A convenient way on using named timers

```python
from cloudmesh.common.StopWatch import StopWatch
import os

watch = StopWatch()

watch.start("test")
os.sleep(1)
watch.stop("test")

print (watch["test"])
```


## dotdict


* [cloudmesh.common.dotdict](https://github.com/cloudmesh/cloudmesh-common/blob/master/cloudmesh/common/dotdict.py)

One dimensional Dictionaries in dot format. 

```python
from cloudmesh.common.dotdict import doctict

# convert a simple dict to a dotdict
d = dotdict({"name": "Gregor"})
# Now you can say
print(d["name])
print(d.name)
```

## ssh

* [cloudmesh.common.ssh](https://github.com/cloudmesh/cloudmesh-common/blob/master/cloudmesh/common/ssh)

  * managing ssh config files
  * managing authorized keys

## util

Very useful funtions are included in util


* [cloudmesh.common.util](https://github.com/cloudmesh/cloudmesh-common/blob/master/cloudmesh/common/util.py)

Especially useful are

  * generating passwords
  * banners
  * yn_choices
  * path_expansion
  * grep (simple line matching)
  * HEADING() which without parameter identifies the name of the function and 
  prints its name within a banner


