Skip to content

Commit 3b23b71

Browse files
author
Juliya Smith
authored
Fix bulk (#56)
1 parent d88d764 commit 3b23b71

File tree

6 files changed

+35
-24
lines changed

6 files changed

+35
-24
lines changed

src/code42cli/bulk.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,10 @@ def _process_csv_row(self, row):
9494
# Removes problems from including extra comments. Error messages from out of order args
9595
# are more indicative this way too.
9696
row.pop(None, None)
97-
self.__worker.do_async(lambda *args, **kwargs: self._row_handler(*args, **kwargs), **row)
97+
row_values = {key: val if val != u"" else None for key, val in row.items()}
98+
self.__worker.do_async(
99+
lambda *args, **kwargs: self._row_handler(*args, **kwargs), **row_values
100+
)
98101

99102
def _process_flat_file_row(self, row):
100103
if row:

src/code42cli/cmds/detectionlists/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ def __init__(self, username, list_name):
1717

1818
def handle_bad_request_during_add(bad_request_err, username_tried_adding, list_name):
1919
if _error_is_user_already_added(bad_request_err.response.text):
20-
logger = get_main_cli_logger()
21-
new_err = UserAlreadyAddedError(username_tried_adding, list_name)
22-
logger.print_and_log_error(new_err)
23-
return True
20+
raise UserAlreadyAddedError(username_tried_adding, list_name)
2421
return False
2522

2623

src/code42cli/logger.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def _get_user_error_logger():
8383
class RedStderrHandler(logging.StreamHandler):
8484
"""Logging handler for logging error messages to stderr using red scary text prefixed by the
8585
word `ERROR`. For logging info to stderr, it will not add the scary red text."""
86+
8687
def __init__(self):
8788
super(RedStderrHandler, self).__init__(sys.stderr)
8889

tests/cmds/detectionlists/test_departing_employee.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
import logging
33

4-
from code42cli.cmds.detectionlists import UserDoesNotExistError
4+
from code42cli.cmds.detectionlists import UserDoesNotExistError, UserAlreadyAddedError
55
from code42cli.cmds.detectionlists.departing_employee import (
66
add_departing_employee,
77
remove_departing_employee,
@@ -49,17 +49,14 @@ def test_add_departing_employee_when_user_does_not_exist_prints_error(
4949
assert str(UserDoesNotExistError(_EMPLOYEE)) in caplog.text
5050

5151

52-
def test_add_departing_employee_when_user_already_added_prints_error(
53-
sdk_with_user, profile, bad_request_for_user_already_added, caplog
52+
def test_add_departing_employee_when_user_already_added_raises_UserAlreadyAddedError(
53+
sdk_with_user, profile, bad_request_for_user_already_added
5454
):
5555
sdk_with_user.detectionlists.departing_employee.add.side_effect = (
5656
bad_request_for_user_already_added
5757
)
58-
add_departing_employee(sdk_with_user, profile, _EMPLOYEE)
59-
with caplog.at_level(logging.ERROR):
60-
assert _EMPLOYEE in caplog.text
61-
assert "already on the" in caplog.text
62-
assert "departing-employee" in caplog.text
58+
with pytest.raises(UserAlreadyAddedError):
59+
add_departing_employee(sdk_with_user, profile, _EMPLOYEE)
6360

6461

6562
def test_add_departing_employee_when_bad_request_but_not_user_already_added_raises_Py42BadRequestError(

tests/cmds/detectionlists/test_high_risk_employee.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
import logging
33

4-
from code42cli.cmds.detectionlists import UserDoesNotExistError
4+
from code42cli.cmds.detectionlists import UserDoesNotExistError, UserAlreadyAddedError
55
from code42cli.cmds.detectionlists.high_risk_employee import (
66
add_high_risk_employee,
77
remove_high_risk_employee,
@@ -61,17 +61,14 @@ def test_add_high_risk_employee_when_user_does_not_exist_prints_error(
6161
assert str(UserDoesNotExistError(_EMPLOYEE)) in caplog.text
6262

6363

64-
def test_add_high_risk_employee_when_user_already_added_prints_error(
65-
sdk_with_user, profile, bad_request_for_user_already_added, caplog
64+
def test_add_high_risk_employee_when_user_already_added_raises_UserAlreadyAddedError(
65+
sdk_with_user, profile, bad_request_for_user_already_added
6666
):
6767
sdk_with_user.detectionlists.high_risk_employee.add.side_effect = (
6868
bad_request_for_user_already_added
6969
)
70-
add_high_risk_employee(sdk_with_user, profile, _EMPLOYEE)
71-
with caplog.at_level(logging.ERROR):
72-
assert _EMPLOYEE in caplog.text
73-
assert "already on the" in caplog.text
74-
assert "high-risk-employee" in caplog.text
70+
with pytest.raises(UserAlreadyAddedError):
71+
add_high_risk_employee(sdk_with_user, profile, _EMPLOYEE)
7572

7673

7774
def test_add_high_risk_employee_when_bad_request_but_not_user_already_added_raises_Py42BadRequestError(

tests/test_bulk.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ def __call__(self, *args, **kwargs):
218218
processor.run()
219219
assert get_view_exceptions_location_message() not in caplog.text
220220

221-
def test_run_when_row_is_endline_does_not_process_row(self, mock_open, caplog):
221+
def test_run_when_row_is_endline_does_not_process_row(self, mock_open):
222222
processed_rows = []
223223

224224
def func_for_bulk(test):
@@ -229,9 +229,25 @@ def __call__(self, *args, **kwargs):
229229
return ["row1", "row2", "\n"]
230230

231231
processor = BulkProcessor("some/path", func_for_bulk, MockRowReader())
232-
with caplog.at_level(logging.INFO):
233-
processor.run()
232+
processor.run()
234233

235234
assert "row1" in processed_rows
236235
assert "row2" in processed_rows
237236
assert "row3" not in processed_rows
237+
238+
def test_run_when_reader_returns_dict_rows_containing_empty_strs_converts_them_to_none(
239+
self, mock_open
240+
):
241+
processed_rows = []
242+
243+
def func_for_bulk(test1, test2):
244+
processed_rows.append((test1, test2))
245+
246+
class MockDictReader(object):
247+
def __call__(self, *args, **kwargs):
248+
return [{"test1": "", "test2": "foo"}, {"test1": "bar", "test2": u""}]
249+
250+
processor = BulkProcessor("some/path", func_for_bulk, MockDictReader())
251+
processor.run()
252+
assert (None, "foo") in processed_rows
253+
assert ("bar", None) in processed_rows

0 commit comments

Comments
 (0)