mirror of
https://github.com/th3r00t/pyShelf.git
synced 2026-04-28 01:59:35 -04:00
Added config backup and write operations
This commit is contained in:
13
config.json
vendored
13
config.json
vendored
@@ -1,12 +1 @@
|
|||||||
{
|
{"TITLE": "pyShelf E-Book Server", "VERSION": "0.3.0", "BOOKPATH": "~/Books", "DB_HOST": "localhost", "DB_PORT": "5432", "DATABASE": "pyshelf", "USER": "pyshelf", "PASSWORD": "pyshelf", "BOOKSHELF": "data/shelf.json", "ALLOWED_HOSTS": "*"}
|
||||||
"TITLE": "pyShelf E-Book Server",
|
|
||||||
"VERSION": "0.3.0",
|
|
||||||
"BOOKPATH": "books/",
|
|
||||||
"DB_HOST": "localhost",
|
|
||||||
"DB_PORT": "5432",
|
|
||||||
"DATABASE": "pyshelf",
|
|
||||||
"USER": "pyshelf",
|
|
||||||
"PASSWORD": "pyshelf",
|
|
||||||
"BOOKSHELF": "data/shelf.json",
|
|
||||||
"ALLOWED_HOSTS": "*"
|
|
||||||
}
|
|
||||||
43
install
vendored
43
install
vendored
@@ -1,35 +1,44 @@
|
|||||||
#!/usr/bin/python3.8
|
#!/usr/bin/python3.8
|
||||||
import json
|
import json
|
||||||
import pathlib
|
import pathlib
|
||||||
from pprint import pprint
|
import os
|
||||||
# from src.backend.lib.config import Config # Use ptShelfs configuration class or stay independant for portability?
|
|
||||||
from src.backend.lib.display import TerminalDisplay
|
from src.backend.lib.display import TerminalDisplay
|
||||||
|
|
||||||
# PRG_PATH = pathlib.Path.cwd()
|
|
||||||
# LIB_PATH = pathlib.Path.joinpath(PRG_PATH, "src", "backend", "lib")
|
|
||||||
# sys.path.insert(0, PRG_PATH)
|
|
||||||
|
|
||||||
# Call for the ui and installer questions.
|
|
||||||
install_answers = TerminalDisplay().installer()
|
|
||||||
|
|
||||||
|
|
||||||
class Configuration:
|
class Configuration:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._cp = pathlib.Path("config.json")
|
self._cp = pathlib.Path("config.json")
|
||||||
self._data = self.open_file()
|
self._data = self.open_file()
|
||||||
|
self.system = os.sys.environ
|
||||||
|
|
||||||
def open_file(self):
|
def open_file(self):
|
||||||
with open(str(self._cp), "r") as read_file:
|
"""
|
||||||
data = json.load(read_file)
|
Try to open and then backup the configuration file.
|
||||||
return data
|
Fail and return false if initial configuration is not found.
|
||||||
|
# TODO: More specific error handling
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
with open(str(self._cp), "r") as read_file:
|
||||||
|
data = json.load(read_file)
|
||||||
|
with open('config.backup.json', 'w') as backup_file:
|
||||||
|
json.dump(data, backup_file)
|
||||||
|
return data
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
return False
|
||||||
|
|
||||||
def write_file(self, data):
|
def write_file(self, data):
|
||||||
with open(str(self._cp), "rw") as write_file:
|
"""
|
||||||
json.dumps(write_file)
|
Write the provided data to the new configuration file
|
||||||
|
"""
|
||||||
|
with open(str(self._cp), "w") as write_file:
|
||||||
|
json.dump(data, write_file)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
config = Configuration().open_file()
|
config = Configuration().open_file()
|
||||||
# Print a comparison between config.json and user inputs.
|
install_answers = TerminalDisplay().installer()
|
||||||
pprint(install_answers)
|
for key in install_answers:
|
||||||
pprint(config)
|
config[key["name"]] = key["answer"]
|
||||||
|
Configuration().write_file(config)
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
from pprint import pprint
|
|
||||||
|
|
||||||
from prompt_toolkit import prompt as prm
|
from prompt_toolkit import prompt as prm
|
||||||
|
|
||||||
|
|
||||||
@@ -11,6 +7,8 @@ class TerminalDisplay:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.term = True
|
self.term = True
|
||||||
self.w, self.y = os.get_terminal_size()[0], os.get_terminal_size()[1]
|
self.w, self.y = os.get_terminal_size()[0], os.get_terminal_size()[1]
|
||||||
|
self.home = os.environ["HOME"]
|
||||||
|
self.user = os.environ["USER"]
|
||||||
|
|
||||||
def screen(self):
|
def screen(self):
|
||||||
return self.term
|
return self.term
|
||||||
@@ -18,38 +16,42 @@ class TerminalDisplay:
|
|||||||
def installer(self):
|
def installer(self):
|
||||||
questions = [
|
questions = [
|
||||||
{
|
{
|
||||||
"message": "Input the absolute path to your ebooks\nEg. /home/{user}/Books > ",
|
"message": "Input the absolute path to your ebooks\nEnter for default \"~/Books\" > ",
|
||||||
"options": "",
|
"options": "",
|
||||||
"name": "BOOKPATH",
|
"name": "BOOKPATH",
|
||||||
"answer": "",
|
"answer": None,
|
||||||
|
"default": self.home+"/Books"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"message": "Input your PostgreSQL server ip\nEg. localhost > ",
|
"message": "Input your PostgreSQL server ip\nEnter for default \"localhost\" > ",
|
||||||
"options": "localhost",
|
"options": "localhost",
|
||||||
"name": "DB_HOST",
|
"name": "DB_HOST",
|
||||||
"answer": "",
|
"answer": None,
|
||||||
|
"default": "localhost"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"message": "Input your PostgreSQL server port\nEg. 5432 > ",
|
"message": "Input your PostgreSQL server port\nEnter for default \"5432\" > ",
|
||||||
"options": "5432",
|
"options": "5432",
|
||||||
"name": "DB_PORT",
|
"name": "DB_PORT",
|
||||||
"answer": "",
|
"answer": None,
|
||||||
|
"default": "5432"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"message": "Input your PostgreSQL user name\nEg. pyshelf > ",
|
"message": "Input your PostgreSQL user name\nEnter for default \"pyshelf\" > ",
|
||||||
"options": "pyshelf",
|
"options": "pyshelf",
|
||||||
"name": "USER",
|
"name": "USER",
|
||||||
"answer": "",
|
"answer": None,
|
||||||
|
"default": "pyshelf"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"message": "Input your PostgreSQL password\neg. pyshelf > ",
|
"message": "Input your PostgreSQL password\nEnter for default \"pyshelf\" > ",
|
||||||
"options": "pyshelf",
|
"options": "pyshelf",
|
||||||
"name": "PASSWORD",
|
"name": "PASSWORD",
|
||||||
"answer": "",
|
"answer": None,
|
||||||
|
"default": "pyshelf"
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
answers = self.prompt(questions)
|
return self.prompt(questions)
|
||||||
pprint(answers)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def clear():
|
def clear():
|
||||||
@@ -61,6 +63,8 @@ class TerminalDisplay:
|
|||||||
for answer in answers:
|
for answer in answers:
|
||||||
self.h_rule()
|
self.h_rule()
|
||||||
answer["answer"] = prm(answer["message"])
|
answer["answer"] = prm(answer["message"])
|
||||||
|
if answer["answer"] == "":
|
||||||
|
answer["answer"] = answer["default"]
|
||||||
self.clear()
|
self.clear()
|
||||||
return answers
|
return answers
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user