diff options
-rw-r--r-- | gn_libs/scripts/__init__.py | 1 | ||||
-rw-r--r-- | gn_libs/scripts/worker.py | 49 |
2 files changed, 50 insertions, 0 deletions
diff --git a/gn_libs/scripts/__init__.py b/gn_libs/scripts/__init__.py new file mode 100644 index 0000000..678c5e0 --- /dev/null +++ b/gn_libs/scripts/__init__.py @@ -0,0 +1 @@ +"""Initialise scripts that will be accessible globally.""" diff --git a/gn_libs/scripts/worker.py b/gn_libs/scripts/worker.py new file mode 100644 index 0000000..2479aef --- /dev/null +++ b/gn_libs/scripts/worker.py @@ -0,0 +1,49 @@ +import sys +import shlex +import argparse +import traceback + +from gn_libs import jobs, sqlite3 + + +def run_job(conn, job_id): + """Run the job.""" + try: + pass + except: + jobs.update_metadata(conn, args.job_id, "status", "error") + jobs.push_to_stream(conn, args.job_id, "stderr", traceback.format_exc()) + return 4 + + +def parse_args(): + """Define and parse CLI args.""" + parser = argparse.ArgumentParser( + prog="GN-Libs Worker", + description = ( + "Generic worker to launch and manage jobs defined with gn-libs")) + parser.add_argument( + "jobs_db_uri", + help="The URI to the SQLite3 database holding the jobs' details") + parser.add_argument("job_id", help="The id of the job being processed") + return parser.parse_args() + +def main(): + """Entry-point to this program.""" + args = parse_args() + with (sqlite3.connection(args.jobs_db_uri) as conn, + sqlite3.cursor(conn) as cursor): + job = jobs.job(conn, args.job_id) + if job: + return run_job(conn, args.job_id) + + jobs.update_metadata(conn, args.job_id, "status", "error") + jobs.push_to_stream(conn, args.job_id, "stderr", "Job not found!") + return 2 + + return 3 + + + +if __name__ == "__main__": + sys.exit(main()) |