ebx-checkbox 1.0.1
CheckBox and OptionBox to Python
Requires Python: >=3.6

# CheckBox / OptionBox

Python class for creating list of CheckBox and OptionBox.
CheckBox has the feature of being multi choice and OptionBox of simple choice.

## Prerequisites

Developed and tested in Linux and Python 3.6


## Installing


    pip3 install ebx_checkbox

or from source:

    python3 -m pip install [your_path]/ebx_checkbox/


## Functions

### get_CheckList

get_CheckList(str_Title, InitialLine, InitialColumn, SizeLimit, Options, ClearLine=True, Options_sets=[]):

Description: Create a list of checkBox and multiple choices, return a list of 1 (check) and 0 (uncheck) for all itens (on same order) of Options parameter

| Parameter | Description |
| --- | --- |
|**str_Title**:|Title of the list|
|**InitialLine**:|First line on screen where the list will br printed.|
|**InitialColumn**:|Column on screen where the list will br printed.|
|**SizeLimit**:|Limit (quantity) in lines that will be shown on screen, navigation is by Up and Down arrows.|
|**Options**:|List of itens to be printed.|
|**ClearLine**:|(True or False) Clear entire line before print?.|
|**Options_sets**:|(Optional) List of predefined choices (mark) of 1 (Checked) or 0 (Unchecked). The list must have same len of Options, and set 1 on index that you want show checked.|


Return: List of 1 (check) and 0 (uncheck) for all itens (on same order) of Options parameter. -1 if canceled (Esc)

###Information:
* Ctrl + A To check entire list 
* Ctrl + N To uncheck entire list
* Space to select item
* Arrows:\
-&nbsp;&nbsp;&nbsp;&nbsp;Up: Move to the above item\
-&nbsp;&nbsp;&nbsp;&nbsp;Down: Move to the item below\
-&nbsp;&nbsp;&nbsp;&nbsp;Esc: Cancel selection and return -1
    

---


### get_OptionList

get_OptionList (str_Title, InitialLine, InitialColumn, SizeLimit, Options, ClearLine=True, Options_Index=-1)

Description: Create a list of OptionBox and only one choice, return a list of 1 (check) and 0 (uncheck) for all itens (on same order) of Options parameter

| Parameter | Description |
| --- | --- |
| **str_Title**: | Title of the list |
| **InitialLine**: | First line on screen where the list will br printed |
| **InitialColumn**: | Column on screen where the list will br printed |
| **SizeLimit** | Limit (quantity) in lines that will be shown on screen, navigation is by Up and Down arrows |
| **Options**: | List of itens to be printed |
| **ClearLine**: | (True or False) Clear entire line before print? |
| **Options_Index**: | (Optional) Index of predefined choice (mark) of 1 (Checked) or 0 (Unchecked). | 

Return: List of 1 (check) and 0 (uncheck) for all itens (on same order) of Options parameter. -1 if canceled (Esc)

Information:
###Information:
* Space to select item
* Arrows:\
-&nbsp;&nbsp;&nbsp;&nbsp;Up: Move to the above item\
-&nbsp;&nbsp;&nbsp;&nbsp;Down: Move to the item below\
-&nbsp;&nbsp;&nbsp;&nbsp;Esc: Cancel selection and return -1
    
---


## Examples of use

### ex_checkbox.py:
```
import ebx_checklist

obj_Checklist = ebx_checklist.Options()

lst_Hosts = [{'IP': '15.128.89.74', 'DC': u'asia-dc'}, {'IP': '15.128.89.75', 'DC': u'asia-dc'}, {'IP': '15.128.89.76', 'DC': u'asia-dc'},
             {'IP': '15.128.89.77', 'DC': u'asia-dc'}, {'IP': '15.128.89.78', 'DC': u'asia-dc'}, {'IP': '15.128.89.79', 'DC': u'asia-dc'},
             {'IP': '15.128.89.80', 'DC': u'asia-dc'}, {'IP': '15.128.89.81', 'DC': u'asia-dc'}, {'IP': '15.128.89.88', 'DC': u'asia-dc'},
             {'IP': '15.128.89.89', 'DC': u'asia-dc'}, {'IP': '15.128.89.90', 'DC': u'asia-dc'}, {'IP': '15.128.89.91', 'DC': u'asia-dc'},
             {'IP': '15.128.89.92', 'DC': u'asia-dc'}, {'IP': '15.128.89.93', 'DC': u'asia-dc'}, {'IP': '15.128.89.94', 'DC': u'asia-dc'},
             {'IP': '15.128.89.95', 'DC': u'asia-dc'}, {'IP': '15.128.89.96', 'DC': u'asia-dc'}, {'IP': '15.128.89.97', 'DC': u'asia-dc'},
             {'IP': '15.128.89.98', 'DC': u'asia-dc'}, {'IP': '15.128.89.99', 'DC': u'asia-dc'}, {'IP': '15.128.89.100', 'DC': u'asia-dc'},
             {'IP': '15.128.89.101', 'DC': u'asia-dc'}, {'IP': '15.128.89.102', 'DC': u'asia-dc'}, {'IP': '15.128.89.103', 'DC': u'asia-dc'},
             {'IP': '15.130.89.74', 'DC': u'eu-dc'}, {'IP': '15.130.89.75', 'DC': u'eu-dc'}, {'IP': '15.130.89.76', 'DC': u'eu-dc'},
             {'IP': '15.130.89.77', 'DC': u'eu-dc'}, {'IP': '15.130.89.78', 'DC': u'eu-dc'}, {'IP': '15.130.89.79', 'DC': u'eu-dc'},
             {'IP': '15.130.89.80', 'DC': u'eu-dc'}, {'IP': '15.130.89.81', 'DC': u'eu-dc'}, {'IP': '15.130.89.82', 'DC': u'eu-dc'},
             {'IP': '15.130.89.83', 'DC': u'eu-dc'}, {'IP': '15.130.89.84', 'DC': u'eu-dc'}, {'IP': '15.130.89.85', 'DC': u'eu-dc'},
             {'IP': '15.130.89.92', 'DC': u'eu-dc'}, {'IP': '15.130.89.93', 'DC': u'eu-dc'}, {'IP': '15.130.89.94', 'DC': u'eu-dc'},
             {'IP': '15.130.89.95', 'DC': u'eu-dc'}, {'IP': '15.130.89.96', 'DC': u'eu-dc'}, {'IP': '15.130.89.97', 'DC': u'eu-dc'},
             {'IP': '15.130.89.98', 'DC': u'eu-dc'}, {'IP': '15.130.89.99', 'DC': u'eu-dc'}, {'IP': '15.130.89.100', 'DC': u'eu-dc'},
             {'IP': '15.130.89.101', 'DC': u'eu-dc'}, {'IP': '15.130.89.102', 'DC': u'eu-dc'}, {'IP': '15.130.89.103', 'DC': u'eu-dc'},
             {'IP': '15.135.51.19', 'DC': u'america-dc'}, {'IP': '15.135.51.20', 'DC': u'america-dc'}, {'IP': '15.135.51.21', 'DC': u'america-dc'},
             {'IP': '15.135.51.22', 'DC': u'america-dc'}, {'IP': '15.135.51.23', 'DC': u'america-dc'}, {'IP': '15.135.51.24', 'DC': u'america-dc'},
             {'IP': '15.135.187.74', 'DC': u'america-dc'}, {'IP': '15.135.187.75', 'DC': u'america-dc'}, {'IP': '15.135.187.76', 'DC': u'america-dc'},
             {'IP': '15.135.187.77', 'DC': u'america-dc'}, {'IP': '15.135.187.78', 'DC': u'america-dc'}, {'IP': '15.135.187.79', 'DC': u'america-dc'},
             {'IP': '15.135.187.86', 'DC': u'america-dc'}, {'IP': '15.135.187.87', 'DC': u'america-dc'}, {'IP': '15.135.187.88', 'DC': u'america-dc'},
             {'IP': '15.135.187.89', 'DC': u'america-dc'}, {'IP': '15.135.187.90', 'DC': u'america-dc'}, {'IP': '15.135.187.91', 'DC': u'america-dc'},
             {'IP': '15.135.187.92', 'DC': u'america-dc'}, {'IP': '15.135.187.93', 'DC': u'america-dc'}, {'IP': '15.135.187.94', 'DC': u'america-dc'},
             {'IP': '15.135.187.95', 'DC': u'america-dc'}, {'IP': '15.135.187.96', 'DC': u'america-dc'}, {'IP': '15.135.187.97', 'DC': u'america-dc'}]

lst_OptionDCs = [d['DC'] for d in {v['DC']:v for v in lst_Hosts}.values()]
print("\033c")

###################################################################################################################################

lst_DataCentersCheck = obj_Checklist.get_OptionList('DC to restart', 5, 20, 20, lst_OptionDCs, ClearLine=True, Options_Index=-1)

lst_indexes = [index for index in range(len(lst_DataCentersCheck)) if lst_DataCentersCheck[index] == 1]
lst_DataCentersFilter = [lst_OptionDCs[i] for i in lst_indexes]

lst_OptionHosts = [d['DC'] + ' - ' + d['IP'] for d in lst_Hosts if d['DC'] in lst_DataCentersFilter]

lst_HostsCheck = obj_Checklist.get_CheckList('Hosts to restart', 5, 120, 20, lst_OptionHosts, ClearLine=False, Options_sets=[])
   
lst_tmp_hosts = [d['IP'] for d in lst_Hosts if d['DC'] in lst_DataCentersFilter]
lst_indexes = [index for index in range(len(lst_HostsCheck)) if lst_HostsCheck[index] == 1]
lst_DataCentersFilter = [lst_tmp_hosts[i] for i in lst_indexes]

for host in lst_DataCentersFilter:
    print(host)
    
```

Call python:
```
python3 ex_checkbox.py
```

```




                     DC to restart                                                                                       Hosts to restart

                        ( ) - asia-dc                                                                                       [ ] - eu-dc - 15.130.89.74
                        (O) - eu-dc                                                                                         [ ] - eu-dc - 15.130.89.75
                        ( ) - america-dc                                                                                    [ ] - eu-dc - 15.130.89.76
                                                                                                                            [X] - eu-dc - 15.130.89.77
                                                                                                                            [ ] - eu-dc - 15.130.89.78
                                                                                                                            [X] - eu-dc - 15.130.89.79
                                                                                                                            [ ] - eu-dc - 15.130.89.80
                                                                                                                            [X] - eu-dc - 15.130.89.81
                                                                                                                            [ ] - eu-dc - 15.130.89.82
                                                                                                                            [ ] - eu-dc - 15.130.89.83
                                                                                                                            [X] - eu-dc - 15.130.89.84
                                                                                                                            [ ] - eu-dc - 15.130.89.85
                                                                                                                            [X] - eu-dc - 15.130.89.92
                                                                                                                            [ ] - eu-dc - 15.130.89.93
                                                                                                                            [X] - eu-dc - 15.130.89.94
                                                                                                                            [ ] - eu-dc - 15.130.89.95
                                                                                                                            [ ] - eu-dc - 15.130.89.96
                                                                                                                            [ ] - eu-dc - 15.130.89.97
                                                                                                                            [ ] - eu-dc - 15.130.89.98
                                                                                                                            [ ] - eu-dc - 15.130.89.99
```

## Versioning
```
=======================================================================================
== Log Changes: 
== Date:            2021-05-13
== Author:          Fausto Branco
== Version:         1.0.1
== Description:     Initial Version
=================================================================================
```

## License