summaryrefslogtreecommitdiffstats
path: root/litecli/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'litecli/main.py')
-rw-r--r--litecli/main.py67
1 files changed, 47 insertions, 20 deletions
diff --git a/litecli/main.py b/litecli/main.py
index de279f6..e608da7 100644
--- a/litecli/main.py
+++ b/litecli/main.py
@@ -59,7 +59,6 @@ PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
class LiteCli(object):
-
default_prompt = "\\d> "
max_len_prompt = 45
@@ -110,6 +109,13 @@ class LiteCli(object):
fg="red",
)
self.logfile = False
+ # Load startup commands.
+ try:
+ self.startup_commands = c["startup_commands"]
+ except (
+ KeyError
+ ): # Redundant given the load_config() function that merges in the standard config, but put here to avoid fail if user do not have updated config file.
+ self.startup_commands = None
self.completion_refresher = CompletionRefresher()
@@ -230,7 +236,6 @@ class LiteCli(object):
return [(None, None, None, "Changed prompt format to %s" % arg)]
def initialize_logging(self):
-
log_file = self.config["main"]["log_file"]
if log_file == "default":
log_file = config_location() + "log"
@@ -298,7 +303,6 @@ class LiteCli(object):
return {x: get(x) for x in keys}
def connect(self, database=""):
-
cnf = {"database": None}
cnf = self.read_my_cnf_files(cnf.keys())
@@ -486,29 +490,17 @@ class LiteCli(object):
except EOFError as e:
raise e
except KeyboardInterrupt:
- # get last connection id
- connection_id_to_kill = sqlexecute.connection_id
- logger.debug("connection id to kill: %r", connection_id_to_kill)
- # Restart connection to the database
- sqlexecute.connect()
try:
- for title, cur, headers, status in sqlexecute.run(
- "kill %s" % connection_id_to_kill
- ):
- status_str = str(status).lower()
- if status_str.find("ok") > -1:
- logger.debug(
- "cancelled query, connection id: %r, sql: %r",
- connection_id_to_kill,
- text,
- )
- self.echo("cancelled query", err=True, fg="red")
+ sqlexecute.conn.interrupt()
except Exception as e:
self.echo(
"Encountered error while cancelling query: {}".format(e),
err=True,
fg="red",
)
+ else:
+ logger.debug("cancelled query")
+ self.echo("cancelled query", err=True, fg="red")
except NotImplementedError:
self.echo("Not Yet Implemented.", fg="yellow")
except OperationalError as e:
@@ -555,7 +547,6 @@ class LiteCli(object):
complete_style = CompleteStyle.READLINE_LIKE
with self._completer_lock:
-
if self.key_bindings == "vi":
editing_mode = EditingMode.VI
else:
@@ -590,6 +581,42 @@ class LiteCli(object):
search_ignore_case=True,
)
+ def startup_commands():
+ if self.startup_commands:
+ if "commands" in self.startup_commands:
+ for command in self.startup_commands["commands"]:
+ try:
+ res = sqlexecute.run(command)
+ except Exception as e:
+ click.echo(command)
+ self.echo(str(e), err=True, fg="red")
+ else:
+ click.echo(command)
+ for title, cur, headers, status in res:
+ if title == "dot command not implemented":
+ self.echo(
+ "The SQLite dot command '"
+ + command.split(" ", 1)[0]
+ + "' is not yet implemented.",
+ fg="yellow",
+ )
+ else:
+ output = self.format_output(title, cur, headers)
+ for line in output:
+ self.echo(line)
+ else:
+ self.echo(
+ "Could not read commands. The startup commands needs to be formatted as: \n commands = 'command1', 'command2', ...",
+ fg="yellow",
+ )
+
+ try:
+ startup_commands()
+ except Exception as e:
+ self.echo(
+ "Could not execute all startup commands: \n" + str(e), fg="yellow"
+ )
+
try:
while True:
one_iteration()