Skip to content

Commit f832e7a

Browse files
authored
feat: adding preserveAsciiControlCharacter to CSVOptions (#1491)
* adding ASCII support for external config * adding tests for preserveAscii... * adding tests for preserveAscii... * changing 'False' to False * linting
1 parent 1b31c2f commit f832e7a

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

google/cloud/bigquery/external_config.py

+14
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,20 @@ def encoding(self):
418418
def encoding(self, value):
419419
self._properties["encoding"] = value
420420

421+
@property
422+
def preserve_ascii_control_characters(self):
423+
"""bool: Indicates if the embedded ASCII control characters
424+
(the first 32 characters in the ASCII-table, from '\x00' to '\x1F') are preserved.
425+
426+
See
427+
https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#CsvOptions.FIELDS.preserve_ascii_control_characters
428+
"""
429+
return self._properties.get("preserveAsciiControlCharacters")
430+
431+
@preserve_ascii_control_characters.setter
432+
def preserve_ascii_control_characters(self, value):
433+
self._properties["preserveAsciiControlCharacters"] = value
434+
421435
@property
422436
def field_delimiter(self):
423437
"""str: The separator for fields in a CSV file. Defaults to comma (',').

tests/unit/test_external_config.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ def test_from_api_repr_csv(self):
248248
"allowQuotedNewlines": True,
249249
"allowJaggedRows": False,
250250
"encoding": "encoding",
251+
"preserveAsciiControlCharacters": False,
251252
},
252253
},
253254
)
@@ -263,6 +264,7 @@ def test_from_api_repr_csv(self):
263264
self.assertEqual(ec.options.allow_quoted_newlines, True)
264265
self.assertEqual(ec.options.allow_jagged_rows, False)
265266
self.assertEqual(ec.options.encoding, "encoding")
267+
self.assertEqual(ec.options.preserve_ascii_control_characters, False)
266268

267269
got_resource = ec.to_api_repr()
268270

@@ -283,6 +285,7 @@ def test_to_api_repr_csv(self):
283285
options.quote_character = "quote"
284286
options.skip_leading_rows = 123
285287
options.allow_jagged_rows = False
288+
options.preserve_ascii_control_characters = False
286289
ec.csv_options = options
287290

288291
exp_resource = {
@@ -294,6 +297,7 @@ def test_to_api_repr_csv(self):
294297
"allowQuotedNewlines": True,
295298
"allowJaggedRows": False,
296299
"encoding": "encoding",
300+
"preserveAsciiControlCharacters": False,
297301
},
298302
}
299303

@@ -514,17 +518,23 @@ def test_csv_options_getter_and_setter(self):
514518
from google.cloud.bigquery.external_config import CSVOptions
515519

516520
options = CSVOptions.from_api_repr(
517-
{"allowJaggedRows": True, "allowQuotedNewlines": False}
521+
{
522+
"allowJaggedRows": True,
523+
"allowQuotedNewlines": False,
524+
"preserveAsciiControlCharacters": False,
525+
}
518526
)
519527
ec = external_config.ExternalConfig(external_config.ExternalSourceFormat.CSV)
520528

521529
self.assertIsNone(ec.csv_options.allow_jagged_rows)
522530
self.assertIsNone(ec.csv_options.allow_quoted_newlines)
531+
self.assertIsNone(ec.csv_options.preserve_ascii_control_characters)
523532

524533
ec.csv_options = options
525534

526535
self.assertTrue(ec.csv_options.allow_jagged_rows)
527536
self.assertFalse(ec.csv_options.allow_quoted_newlines)
537+
self.assertFalse(ec.csv_options.preserve_ascii_control_characters)
528538
self.assertIs(ec.options._properties, ec._properties[CSVOptions._RESOURCE_NAME])
529539
self.assertIs(
530540
ec.csv_options._properties, ec._properties[CSVOptions._RESOURCE_NAME]
@@ -848,6 +858,7 @@ def test_to_api_repr(self):
848858
options.allow_quoted_newlines = True
849859
options.allow_jagged_rows = False
850860
options.encoding = "UTF-8"
861+
options.preserve_ascii_control_characters = False
851862

852863
resource = options.to_api_repr()
853864

@@ -860,6 +871,7 @@ def test_to_api_repr(self):
860871
"allowQuotedNewlines": True,
861872
"allowJaggedRows": False,
862873
"encoding": "UTF-8",
874+
"preserveAsciiControlCharacters": False,
863875
},
864876
)
865877

0 commit comments

Comments
 (0)