Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
iaindillingham committed Jul 19, 2023
1 parent 5b84a60 commit 03c9626
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
4 changes: 4 additions & 0 deletions sqlrunner/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@


args = main.parse_args(sys.argv[1:], os.environ)

if args.dsn is None and args.dummy_data_file is not None:
# Bypass the database
results = args.dummy_data_file
else:
sql_query = main.read_text(args.input)
results = main.run_sql(dsn=args.dsn, sql_query=sql_query)
main.write_results(results, args.output)

if args.metadata_file is not None:
main.write_metadata(args.metadata_file)
27 changes: 26 additions & 1 deletion sqlrunner/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,29 @@
import csv
import functools
import gzip
import io
import itertools
import pathlib
import shutil
from datetime import datetime
from urllib import parse

import pymssql
import structlog

from sqlrunner import __version__


log_stream = io.StringIO()

structlog.configure(
processors=[structlog.processors.JSONRenderer()],
logger_factory=structlog.WriteLoggerFactory(log_stream),
)

log = structlog.get_logger()


def parse_args(args, environ=None):
environ = environ or {}
parser = argparse.ArgumentParser()
Expand All @@ -36,7 +49,11 @@ def parse_args(args, environ=None):
type=pathlib.Path,
help="Path to the input dummy data file to be used as the output CSV file",
)

parser.add_argument(
"--metadata-file",
type=pathlib.Path,
help="Path to the metadata file",
)
parser.add_argument(
"--version", action="version", version=f"sqlrunner {__version__}"
)
Expand Down Expand Up @@ -65,8 +82,10 @@ def run_sql(*, dsn, sql_query):
parsed_dsn = parse_dsn(dsn)
conn = pymssql.connect(**parsed_dsn, as_dict=True)
cursor = conn.cursor()
log.info({"start_executing_sql_query": datetime.now()})
cursor.execute(sql_query)
yield from cursor
log.info({"finish_executing_sql_query": datetime.now()})
conn.close()


Expand Down Expand Up @@ -110,3 +129,9 @@ def _(results: pathlib.Path, f_path):

touch(f_path)
shutil.copy(results, f_path)


def write_metadata(f_path):
with f_path.open("w", encoding="utf-8") as f:
log_stream.seek(0)
shutil.copyfileobj(log_stream, f)
14 changes: 14 additions & 0 deletions tests/test_main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import gzip
import io
import pathlib

import pytest
Expand Down Expand Up @@ -144,3 +145,16 @@ def test_write_results_from_dummy_data_file(dummy_data_fname, results_fname, tmp

# assert
assert results_file.read_text(encoding="utf-8") == "id\n1\n2\n"


def test_write_metadata(monkeypatch, tmp_path):
# arrange
test_log_stream = io.StringIO("Test log entry")
monkeypatch.setattr(main, "log_stream", test_log_stream)
metadata_file = tmp_path / "metadata.json"

# act
main.write_metadata(metadata_file)

# assert
assert metadata_file.read_text(encoding="utf-8") == "Test log entry"

0 comments on commit 03c9626

Please sign in to comment.