""" This submodule includes functionality to create a
template .matadorrc file.
"""
__all__ = ["quickstart_settings"]
import os
from matador.utils.print_utils import print_warning, print_success
[docs]def quickstart_settings():
"""Call this if no user-specified configuration file is found. A series
of questions will be asked to create a basic matadorrc.
"""
print(
"No user-specified input found at either ~/.matadorrc or " "~/.config/matadorrc"
)
response = input("Would you like to use quickstart to create one now? [y/n] ")
if not response.lower().startswith("y"):
return None
hline = 80 * "-"
print("Okay, let's get started!")
print("Firstly, where would you like me to put your config file: ")
valid = False
while not valid:
response = input("[1] ~/.matadorrc, [2] ~/.config/matadorrc? ")
if response not in ["1", "2"]:
print("I didn't understand, sorry... please enter 1 or 2")
else:
valid = True
if response == "1":
fname = os.path.expanduser("~/.matadorrc")
else:
fname = os.path.expanduser("~/.config/matadorrc")
flines = []
print(hline)
response = input(
"Great! Would you like to use matador with a MongoDB database? [y/n] "
)
if response.lower().startswith("y"):
flines.append("mongo:")
host_response = input("Where is this MongoDB hosted? [default: localhost] ")
if host_response == "":
host_response = "localhost"
flines.append(" host: {}".format(host_response))
print(hline)
port_response = input("and at what port? [default: 27017] ")
if port_response == "":
port_response = 27017
flines.append(" port: {}".format(port_response))
print(hline)
print(
"Please set your firewall and MongoDB settings accordingly: "
"by default MongoDB\nneeds no authentication so be careful "
"if your database is running on an open port!"
)
test_conn_response = input(
"Would you like me to test the connection to this MongoDB instance now? [y/n] "
)
keep_trying = True
if test_conn_response.lower() == "y":
while keep_trying:
import pymongo as pm
cli = pm.MongoClient(
host_response,
port=int(port_response),
maxIdleTimeMS=600000,
socketTimeoutMS=3600000,
serverSelectionTimeoutMS=10000,
connectTimeoutMS=10000,
)
try:
cli.database_names()
keep_trying = False
except pm.errors.ServerSelectionTimeoutError:
print_warning(
"Failed to connect to {}:{}, are you sure it is running?".format(
host_response, port_response
)
)
response = input("Would you like me to try again? [y/n] ")
keep_trying = response.lower().startswith("y")
except Exception:
keep_trying = False
print(hline)
db_response = input(
"What is the name of the database (not collection) "
"that you want to query/create? [default: crystals] "
)
if db_response == "":
db_response = "crystals"
flines.append(" db: {}".format(db_response))
print(hline)
coll_response = input(
"What about the default collection name to query? [default: repo] "
)
if coll_response == "":
coll_response = "repo"
flines.append(" default_collection: {}".format(coll_response))
print(hline)
print("Would you like to set a protected folder for this collection?")
file_path_response = input(
"Any import to this collection must happen from this path, and the "
"--force flag must be used if so. [default: None] "
)
if file_path_response != "":
flines.append(
" default_file_collection_path: {}".format(file_path_response)
)
print(hline)
print_success(
"Mongo section of matadorrc complete! Saving as {} and exiting...".format(
fname
)
)
print(hline)
if not flines:
print(
"Okay, there is no config file to be made and I will keep using the defaults."
)
return None
with open(fname, "a") as f:
for line in flines:
f.write(line + "\n")
return fname