Skip to content

Commit bd23e96

Browse files
authored
Merge pull request #32 from mcriscenzo/fix/drop_and_keep_key_filtering
Fix - Fetch - Key filtering
2 parents c3d257b + 18b072c commit bd23e96

4 files changed

Lines changed: 7 additions & 4 deletions

File tree

lightbeam/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def main(argv=None):
127127
logger=logger,
128128
selector=args.selector or "*",
129129
exclude=args.exclude or "",
130-
keep_keys=args.keep_keys or "",
130+
keep_keys=args.keep_keys or "*",
131131
drop_keys=args.drop_keys or "",
132132
query=args.query or "{}",
133133
params=args.params,

lightbeam/fetch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,9 @@ async def get_endpoint_records(self, endpoint, limit, offset, file_handle=None):
8989
payload_keys = list(values[0].keys())
9090
final_keys = util.apply_selections(payload_keys, self.lightbeam.keep_keys, self.lightbeam.drop_keys)
9191
do_key_filtering = len(payload_keys) != len(final_keys)
92+
9293
for v in values:
93-
if do_key_filtering: row = {k: v[k] for k in final_keys}
94+
if do_key_filtering: row = {k: v.get(k, None) for k in final_keys} #v.get() to account for missing keys
9495
else: row = v
9596
if file_handle: file_handle.write(json.dumps(row)+"\n")
9697
else: self.lightbeam.results.append(row)

lightbeam/lightbeam.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class Lightbeam:
5050
MAX_STATUS_REASONS_TO_DISPLAY = 10
5151
DATA_FILE_EXTENSIONS = ['json', 'jsonl', 'ndjson']
5252

53-
def __init__(self, config_file, logger=None, selector="*", exclude="", keep_keys="", drop_keys="", query="{}", params="", wipe=False, force=False, older_than="", newer_than="", resend_status_codes="", results_file=""):
53+
def __init__(self, config_file, logger=None, selector="*", exclude="", keep_keys="*", drop_keys="", query="{}", params="", wipe=False, force=False, older_than="", newer_than="", resend_status_codes="", results_file=""):
5454
self.config_file = config_file
5555
self.logger = logger
5656
self.errors = 0

lightbeam/util.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import re
22
import json
33
import itertools
4+
import copy
45

56
# Strips newlines from a string
67
# Replace single-quotes with backticks
@@ -59,7 +60,8 @@ def apply_selections(keys, keep, drop):
5960
for payload_key, keep_key in list(itertools.product(keys, keep)):
6061
if (keys_match(payload_key, keep_key)):
6162
final_keys.append(payload_key)
62-
else: final_keys = keys
63+
# copy rather than direct pointer assignment, so this function doesn't modify the payload_keys variable in parent code
64+
else: final_keys = keys.copy()
6365
# remove from `final_keys` keys that match `drop`
6466
if drop and drop != [""]:
6567
for payload_key, drop_key in list(itertools.product(keys, drop)):

0 commit comments

Comments
 (0)