Add error handling.
This commit is contained in:
parent
66bb8d9d39
commit
bccd0439f7
@ -8,22 +8,16 @@ import json, times, os, docopt
|
|||||||
type DbMigrateConfig* = tuple[ driver, sqlDir, connectionString: string ]
|
type DbMigrateConfig* = tuple[ driver, sqlDir, connectionString: string ]
|
||||||
|
|
||||||
proc loadConfig*(filename: string): DbMigrateConfig =
|
proc loadConfig*(filename: string): DbMigrateConfig =
|
||||||
|
## Load DbMigrateConfig from a file.
|
||||||
let cfg = json.parseFile(filename)
|
let cfg = json.parseFile(filename)
|
||||||
let config = (
|
|
||||||
|
return (
|
||||||
driver: if cfg.hasKey("driver"): cfg["driver"].getStr else: "postres",
|
driver: if cfg.hasKey("driver"): cfg["driver"].getStr else: "postres",
|
||||||
sqlDir: if cfg.hasKey("sqlDir"): cfg["sqlDir"].getStr else: "migrations",
|
sqlDir: if cfg.hasKey("sqlDir"): cfg["sqlDir"].getStr else: "migrations",
|
||||||
connectionString: cfg["connectionString"].getStr)
|
connectionString: cfg["connectionString"].getStr)
|
||||||
|
|
||||||
# Check for migrations directory
|
|
||||||
# TODO: try/except
|
|
||||||
if not existsDir config.sqlDir:
|
|
||||||
echo "SQL directory '" & config.sqlDir &
|
|
||||||
"' does not exist and will be created."
|
|
||||||
createDir config.sqlDir
|
|
||||||
|
|
||||||
return config
|
|
||||||
|
|
||||||
proc createMigration*(config: DBMigrateConfig, migrationName: string): seq[string] =
|
proc createMigration*(config: DBMigrateConfig, migrationName: string): seq[string] =
|
||||||
|
## Create a new set of database migration files.
|
||||||
let timestamp = getTime().getLocalTime().format("yyyyMMddHHmmss")
|
let timestamp = getTime().getLocalTime().format("yyyyMMddHHmmss")
|
||||||
let filenamePrefix = timestamp & "-" & migrationName
|
let filenamePrefix = timestamp & "-" & migrationName
|
||||||
|
|
||||||
@ -32,7 +26,6 @@ proc createMigration*(config: DBMigrateConfig, migrationName: string): seq[strin
|
|||||||
|
|
||||||
let scriptDesc = migrationName & " (" & timestamp & ")"
|
let scriptDesc = migrationName & " (" & timestamp & ")"
|
||||||
|
|
||||||
# TODO: try/except and catch errors creating files.
|
|
||||||
let upFile = open(upFilename, fmWrite)
|
let upFile = open(upFilename, fmWrite)
|
||||||
let downFile = open(downFilename, fmWrite)
|
let downFile = open(downFilename, fmWrite)
|
||||||
|
|
||||||
@ -57,17 +50,39 @@ Options:
|
|||||||
# Parse arguments
|
# Parse arguments
|
||||||
let args = docopt(doc, version = "db-migrate 0.1.0")
|
let args = docopt(doc, version = "db-migrate 0.1.0")
|
||||||
|
|
||||||
echo $args
|
let exitErr = proc(msg: string): void =
|
||||||
|
stderr.writeLine("db_migrate: " & msg)
|
||||||
|
quit(QuitFailure)
|
||||||
|
|
||||||
|
|
||||||
# Load configuration file
|
# Load configuration file
|
||||||
let configFilename =
|
let configFilename =
|
||||||
if args["--config"]: $args["--config"]
|
if args["--config"]: $args["--config"]
|
||||||
else: "database.json"
|
else: "database.json"
|
||||||
|
|
||||||
let config = loadConfig(configFilename)
|
var config: DbMigrateConfig
|
||||||
|
try:
|
||||||
|
config = loadConfig(configFilename)
|
||||||
|
except IOError:
|
||||||
|
exitErr "Cannot open config file: " & configFilename
|
||||||
|
except:
|
||||||
|
exitErr "Error parsing config file: " & configFilename & "\L\t" & getCurrentExceptionMsg()
|
||||||
|
|
||||||
|
# Check for migrations directory
|
||||||
|
if not existsDir config.sqlDir:
|
||||||
|
try:
|
||||||
|
echo "SQL directory '" & config.sqlDir &
|
||||||
|
"' does not exist and will be created."
|
||||||
|
createDir config.sqlDir
|
||||||
|
except IOError:
|
||||||
|
exitErr "Unable to create directory: " & config.sqlDir & ":\L\T" & getCurrentExceptionMsg()
|
||||||
|
|
||||||
# Execute commands
|
# Execute commands
|
||||||
if args["create"]:
|
if args["create"]:
|
||||||
let filesCreated = createMigration(config, $args["<migration-name>"])
|
try:
|
||||||
echo "Created new migration files:"
|
let filesCreated = createMigration(config, $args["<migration-name>"])
|
||||||
for filename in filesCreated: echo "\t" & filename
|
echo "Created new migration files:"
|
||||||
|
for filename in filesCreated: echo "\t" & filename
|
||||||
|
except IOError:
|
||||||
|
exitErr "Unable to create migration scripts: " & getCurrentExceptionMsg()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user