mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-10 18:23:01 -04:00
add more debug and add command to download csv files
This commit is contained in:
@@ -589,6 +589,17 @@ def process_row_from_job(job_id, job_row_number):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@notify_command(name="download-csv-file-by-name")
|
||||||
|
@click.option("-f", "--csv_filename", required=True, help="csv file name")
|
||||||
|
def download_csv_file_by_name(csv_filename):
|
||||||
|
|
||||||
|
bucket_name = getenv("CSV_BUCKET_NAME")
|
||||||
|
access_key = getenv("CSV_AWS_ACCESS_KEY_ID")
|
||||||
|
secret = getenv("CSV_AWS_SECRET_ACCESS_KEY")
|
||||||
|
region = getenv("CSV_AWS_REGION")
|
||||||
|
print(s3.get_s3_file(bucket_name, csv_filename, access_key, secret, region))
|
||||||
|
|
||||||
|
|
||||||
@notify_command(name="populate-annual-billing-with-the-previous-years-allowance")
|
@notify_command(name="populate-annual-billing-with-the-previous-years-allowance")
|
||||||
@click.option(
|
@click.option(
|
||||||
"-y",
|
"-y",
|
||||||
|
|||||||
@@ -602,12 +602,34 @@ def validate_us_phone_number(number):
|
|||||||
raise InvalidPhoneError(exc._msg) from exc
|
raise InvalidPhoneError(exc._msg) from exc
|
||||||
|
|
||||||
|
|
||||||
|
def show_mangled_number_clues(number):
|
||||||
|
print(f"ORIG {number}")
|
||||||
|
translator = {
|
||||||
|
"1": "X",
|
||||||
|
"2": "X",
|
||||||
|
"3": "X",
|
||||||
|
"4": "X",
|
||||||
|
"5": "X",
|
||||||
|
"6": "X",
|
||||||
|
"7": "X",
|
||||||
|
"8": "X",
|
||||||
|
"9": "X",
|
||||||
|
"0": "X",
|
||||||
|
}
|
||||||
|
for key in translator:
|
||||||
|
number = number.replace(key, translator[key])
|
||||||
|
|
||||||
|
return number
|
||||||
|
|
||||||
|
|
||||||
def validate_phone_number(number, international=False):
|
def validate_phone_number(number, international=False):
|
||||||
if (not international) or is_us_phone_number(number):
|
if (not international) or is_us_phone_number(number):
|
||||||
|
print("FAST EXIT")
|
||||||
return validate_us_phone_number(number)
|
return validate_us_phone_number(number)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
parsed = phonenumbers.parse(number, None)
|
parsed = phonenumbers.parse(number, None)
|
||||||
|
print("PARSED")
|
||||||
if parsed.country_code != 1:
|
if parsed.country_code != 1:
|
||||||
raise InvalidPhoneError("Invalid country code")
|
raise InvalidPhoneError("Invalid country code")
|
||||||
number = f"{parsed.country_code}{parsed.national_number}"
|
number = f"{parsed.country_code}{parsed.national_number}"
|
||||||
@@ -619,7 +641,11 @@ def validate_phone_number(number, international=False):
|
|||||||
except NumberParseException as exc:
|
except NumberParseException as exc:
|
||||||
if exc._msg == "Could not interpret numbers after plus-sign.":
|
if exc._msg == "Could not interpret numbers after plus-sign.":
|
||||||
raise InvalidPhoneError("Not a valid country prefix") from exc
|
raise InvalidPhoneError("Not a valid country prefix") from exc
|
||||||
raise InvalidPhoneError(exc._msg) from exc
|
if not isinstance(number, str):
|
||||||
|
raise InvalidPhoneError(f"Number must be string, not type {type(number)}")
|
||||||
|
raise InvalidPhoneError(
|
||||||
|
f"Invalid phone number looks like {show_mangled_number_clues(number)} {exc._msg}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
validate_and_format_phone_number = validate_phone_number
|
validate_and_format_phone_number = validate_phone_number
|
||||||
|
|||||||
Generated
+2
-6
@@ -1,4 +1,4 @@
|
|||||||
# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
|
# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aiohttp"
|
name = "aiohttp"
|
||||||
@@ -2098,13 +2098,9 @@ files = [
|
|||||||
{file = "lxml-5.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196"},
|
{file = "lxml-5.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b"},
|
{file = "lxml-5.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8"},
|
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b590b39ef90c6b22ec0be925b211298e810b4856909c8ca60d27ffbca6c12e6"},
|
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716"},
|
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:c2faf60c583af0d135e853c86ac2735ce178f0e338a3c7f9ae8f622fd2eb788c"},
|
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905"},
|
{file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7ff762670cada8e05b32bf1e4dc50b140790909caa8303cfddc4d702b71ea184"},
|
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6"},
|
{file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:a6d2092797b388342c1bc932077ad232f914351932353e2e8706851c870bca1f"},
|
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61"},
|
{file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-win32.whl", hash = "sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f"},
|
{file = "lxml-5.2.2-cp37-cp37m-win32.whl", hash = "sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f"},
|
||||||
{file = "lxml-5.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40"},
|
{file = "lxml-5.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40"},
|
||||||
@@ -2493,6 +2489,7 @@ files = [
|
|||||||
{file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"},
|
{file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"},
|
||||||
{file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"},
|
{file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"},
|
||||||
{file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"},
|
{file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"},
|
||||||
|
{file = "msgpack-1.0.8-py3-none-any.whl", hash = "sha256:24f727df1e20b9876fa6e95f840a2a2651e34c0ad147676356f4bf5fbb0206ca"},
|
||||||
{file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"},
|
{file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -3475,7 +3472,6 @@ files = [
|
|||||||
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
|
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
|
||||||
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
|
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
|
||||||
{file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
|
{file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
|
||||||
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
|
|
||||||
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
|
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
|
||||||
{file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
|
{file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
|
||||||
{file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
|
{file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ def test_should_reject_bad_phone_numbers(notify_api, sample_template, mocker):
|
|||||||
assert json_resp["result"] == "error"
|
assert json_resp["result"] == "error"
|
||||||
assert len(json_resp["message"].keys()) == 1
|
assert len(json_resp["message"].keys()) == 1
|
||||||
assert (
|
assert (
|
||||||
"Invalid phone number: The string supplied did not seem to be a phone number."
|
"Invalid phone number: Invalid phone number looks like invalid The string supplied did not seem to be a phone number." # noqa
|
||||||
in json_resp["message"]["to"]
|
in json_resp["message"]["to"]
|
||||||
)
|
)
|
||||||
assert response.status_code == 400
|
assert response.status_code == 400
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ def test_cannot_create_user_with_empty_strings(admin_request, notify_db_session)
|
|||||||
assert resp["message"] == {
|
assert resp["message"] == {
|
||||||
"email_address": ["Not a valid email address"],
|
"email_address": ["Not a valid email address"],
|
||||||
"mobile_number": [
|
"mobile_number": [
|
||||||
"Invalid phone number: The string supplied did not seem to be a phone number."
|
"Invalid phone number: Invalid phone number looks like The string supplied did not seem to be a phone number." # noqa
|
||||||
],
|
],
|
||||||
"name": ["Invalid name"],
|
"name": ["Invalid name"],
|
||||||
}
|
}
|
||||||
@@ -949,7 +949,7 @@ def test_cannot_update_user_with_mobile_number_as_empty_string(
|
|||||||
_expected_status=400,
|
_expected_status=400,
|
||||||
)
|
)
|
||||||
assert resp["message"]["mobile_number"] == [
|
assert resp["message"]["mobile_number"] == [
|
||||||
"Invalid phone number: The string supplied did not seem to be a phone number."
|
"Invalid phone number: Invalid phone number looks like The string supplied did not seem to be a phone number." # noqa
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from notifications_utils.recipients import (
|
|||||||
get_international_phone_info,
|
get_international_phone_info,
|
||||||
international_phone_info,
|
international_phone_info,
|
||||||
is_us_phone_number,
|
is_us_phone_number,
|
||||||
|
show_mangled_number_clues,
|
||||||
try_validate_and_format_phone_number,
|
try_validate_and_format_phone_number,
|
||||||
validate_and_format_phone_number,
|
validate_and_format_phone_number,
|
||||||
validate_email_address,
|
validate_email_address,
|
||||||
@@ -324,6 +325,11 @@ def test_phone_number_rejects_invalid_international_values(phone_number, error_m
|
|||||||
assert error_message == str(e.value)
|
assert error_message == str(e.value)
|
||||||
|
|
||||||
|
|
||||||
|
def test_show_mangled_number_clues():
|
||||||
|
x = show_mangled_number_clues("848!!-202?-2020$$")
|
||||||
|
assert x == "XXX!!-XXX?-XXXX$$"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email_address", valid_email_addresses)
|
@pytest.mark.parametrize("email_address", valid_email_addresses)
|
||||||
def test_validate_email_address_accepts_valid(email_address):
|
def test_validate_email_address_accepts_valid(email_address):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user