"""
|
|
Jeffery Russell
|
|
4-27-18
|
|
|
|
Deals with the configuration file for bash manager
|
|
|
|
Config file:
|
|
servers: /path/to/servers
|
|
quotes: /path/to/quotes.txt
|
|
mounts: /path/to/ssh/mounts.txt
|
|
|
|
|
|
config dictionary
|
|
{servers: "/", quotes: "/", mounts:"/"}
|
|
"""
|
|
|
|
import os.path
|
|
|
|
from utils import module
|
|
|
|
CONFIG_FILE = os.path.dirname(__file__) + "/config.txt"
|
|
|
|
|
|
def config_exists():
|
|
"""
|
|
Function which checks to see if the config file exists
|
|
:return: whether file returns
|
|
"""
|
|
if not os.path.exists(CONFIG_FILE):
|
|
print("config file not found in " + CONFIG_FILE)
|
|
return False
|
|
return True
|
|
|
|
|
|
def single_conf_input(param):
|
|
"""
|
|
helper function for create_config() which reads the value of a single
|
|
file location from the user
|
|
"""
|
|
print("\nPlease enter the absolute path for your " + param + " file if you leave this blank,")
|
|
print("by default it will be "
|
|
+ os.path.dirname(__file__) + "/" + param + ".txt")
|
|
i = input("Enter selection:")
|
|
|
|
if i.strip() == "":
|
|
return param + ": " + os.path.dirname(__file__) + "/" + param + ".txt"
|
|
else:
|
|
return param + ": " + i
|
|
|
|
|
|
def create_config():
|
|
"""
|
|
Creates a new configuration file
|
|
"""
|
|
print("Creating new configuration file under " + CONFIG_FILE)
|
|
|
|
f = open(CONFIG_FILE, "w")
|
|
f.write(single_conf_input("servers") + '\n')
|
|
f.write(single_conf_input("quotes") + '\n')
|
|
f.write(single_conf_input("mounts") + '\n')
|
|
f.close()
|
|
|
|
|
|
def read_config():
|
|
"""
|
|
Reads the config file and creates a config dictionary
|
|
"""
|
|
config = {}
|
|
with open(CONFIG_FILE) as file:
|
|
for line in file:
|
|
temp = line.split(" ")
|
|
|
|
if len(temp) >= 1:
|
|
temp[1] = temp[1].strip('\n')
|
|
|
|
if line.find("servers:") != -1:
|
|
if len(temp) <= 1:
|
|
print("Error reading servers file from config")
|
|
return
|
|
config["servers"] = temp[1]
|
|
if line.find("quotes:") != -1:
|
|
if len(temp) <= 1:
|
|
print("Error reading quotes file from config")
|
|
return
|
|
config["quotes"] = temp[1]
|
|
if line.find("mounts:") != -1:
|
|
if len(temp) <= 1:
|
|
print("Error reading mounts file from config")
|
|
return
|
|
config["mounts"] = temp[1]
|
|
return config
|
|
|
|
|
|
def valid_config(config):
|
|
"""
|
|
Checks to see if a configuration is valid
|
|
"""
|
|
return 'servers' in config and 'quotes' in config and 'mounts' in config
|
|
|
|
|
|
def create_config_dependent_files(config):
|
|
"""
|
|
Finds missing files and creates them
|
|
"""
|
|
if os.path.isfile(config["servers"]) == False:
|
|
print("Creating missing servers file in " + config["servers"])
|
|
module.create_empty_file(config["servers"])
|
|
if os.path.isfile(config["quotes"]) == False:
|
|
print("Creating missing quotes file in " + config["quotes"])
|
|
module.create_empty_file(config["quotes"])
|
|
if os.path.isfile(config["mounts"]) == False:
|
|
print("Creating missing mounts file in " + config["mounts"])
|
|
module.create_empty_file(config["mounts"])
|
|
|
|
|
|
def get_config():
|
|
"""
|
|
Returns the config file for the main to use
|
|
"""
|
|
if not config_exists():
|
|
module.create_empty_file(CONFIG_FILE)
|
|
create_config()
|
|
config = read_config()
|
|
|
|
if valid_config(config):
|
|
create_config_dependent_files(config)
|
|
|
|
return config
|
|
else:
|
|
create_config()
|
|
return get_config()
|
|
|
|
|
|
def generate_bash_aliases():
|
|
"""
|
|
Generates the bash aliases to add to the bash congig
|
|
:return: list of strings with bash aliases
|
|
"""
|
|
aliases = []
|
|
path = os.path.dirname(os.path.abspath(__file__)) + "/"
|
|
aliases.append("alias roosay=\"python3 " + path + "roosay.py\"")
|
|
aliases.append("alias ss=\"python3 " + path + "ssh_manager.py\"")
|
|
aliases.append("alias ssh_manager=\"python3 " + path + "ssh_manager.py\"")
|
|
aliases.append("alias mm=\"python3 " + path + "mount_ssh_drive.py\"")
|
|
aliases.append("alias ssh-mount=\"python3 " + path + "mount_ssh_drive.py\"")
|
|
aliases.append("alias quote=\"python3 " + path + "quote.py\"")
|
|
|
|
return aliases
|
|
|
|
|
|
def generate_extra_sauce():
|
|
"""
|
|
Creates a list of bash configurations things that I use
|
|
:return: string list with all my extra bash sauce
|
|
"""
|
|
sauce = []
|
|
|
|
sauce.append("alias ls=\"ls -abp --color=auto\"")
|
|
sauce.append("function cd {")
|
|
sauce.append("\tbuiltin cd \"$@\" && ls")
|
|
sauce.append("}")
|
|
sauce.append("quote")
|
|
|
|
return sauce
|
|
|
|
|
|
def view_shell_sauce():
|
|
"""
|
|
Displays the output of generate_bash_aliases() and generate_extra_sauce()
|
|
"""
|
|
print("\n#Bash Aliases:")
|
|
|
|
for line in generate_bash_aliases():
|
|
print(line)
|
|
|
|
print("\n")
|
|
print("#Extra Sauce")
|
|
|
|
for line in generate_extra_sauce():
|
|
print(line)
|
|
|
|
|
|
def write_to_bash_config(sauce):
|
|
"""
|
|
prompts user for name of shell config file and write contents of
|
|
sauce to it
|
|
"""
|
|
path = input("Enter name of shell (.bashrc or .zshrc):")
|
|
path = "~/" + path
|
|
|
|
for line in sauce:
|
|
module.append_file(path, line)
|
|
|
|
print("Added the following to " + path)
|
|
|
|
for line in sauce:
|
|
print("\t" + line)
|
|
|
|
|
|
def main():
|
|
"""
|
|
Prompts user to either update the config file, or make aliases
|
|
in the bash configuration
|
|
"""
|
|
|
|
options = []
|
|
options.append("1) Update Configuration File")
|
|
options.append("2) Make Aliases")
|
|
options.append("3) Add Extra Sauce")
|
|
options.append("4) View proposed shell conf")
|
|
options.append("5) Exit")
|
|
i = '0'
|
|
|
|
while i != '5':
|
|
module.print_menu("Configuration Manager", options)
|
|
i = input("Enter Option:")
|
|
if i == '1':
|
|
create_config()
|
|
elif i == '2':
|
|
write_to_bash_config(generate_bash_aliases())
|
|
elif i == '3':
|
|
write_to_bash_config(generate_extra_sauce())
|
|
elif i == '4':
|
|
view_shell_sauce()
|
|
|
|
|
|
"""
|
|
Makes sure that other programs don't execute the main
|
|
"""
|
|
if __name__ == '__main__':
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
pass
|