opensafely-core / opensafely-core/sqlrunner

Friendlier error message than `TypeError`

Open
#26 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
1
Forks
0
Avg merge
4d 23h
Merged PRs (30d)
3

Description

When neither --dsn is passed nor DATABASE_URL is set, SQL Runner prints a stack trace:

Running actions: query

jobrunner.run loop started
query: Copying in code from /Users/iaindillingham/Code/opensafely/tpp-database-schema
query: Preparing
query: Executing
query: Logs written to: /Users/iaindillingham/Code/opensafely/tpp-database-schema/metadata/query.log
query: Finalizing
query: Job exited with error code 1
query: Cleaning up container and volume

=> query
   Job exited with error code 1

   log file: metadata/query.log
   outputs:
     (no outputs)

   logs:

     Traceback (most recent call last):
       File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
         return _run_code(code, main_globals, None,
       File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
         exec(code, run_globals)
       File "/app/sqlrunner/__main__.py", line 9, in <module>
         results = main.run_sql(dsn=args.dsn, sql_query=sql_query)
       File "/app/sqlrunner/main.py", line 51, in run_sql
         database=parsed_dsn.path.strip("/"),
     TypeError: a bytes-like object is required, not 'str'

parsed_dsn is an instance of ParseResultBytes rather than ParseResult because dsn was None:

https://github.com/opensafely-core/sqlrunner/blob/b6b77a26e10db589e467a180b3121c8c15a39ca0/sqlrunner/main.py#L44

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The traceback points to sqlrunner/main.py around line 44, with entry-point behavior shown in sqlrunner/main.py. Start by reproducing the run without --dsn or DATABASE_URL and inspect how that input is parsed. Done means the failure produces a friendlier error instead of the shown TypeError and stack trace.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli, databases
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.