Skip to content

Commit 02f3211

Browse files
committed
Add argument data type checking for 15 functions
- set_cell_int - set_cell_rich_text - set_cell_str - set_cell_style - set_col_outline_level - set_col_style - set_col_width - set_conditional_format - set_default_font - set_defined_name - set_doc_props - set_header_footer - set_page_layout - set_page_margins - set_panes
1 parent 7339b36 commit 02f3211

File tree

2 files changed

+191
-1
lines changed

2 files changed

+191
-1
lines changed

excelize.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4248,6 +4248,14 @@ def set_cell_int(self, sheet: str, cell: str, value: int) -> None:
42484248
None: Return None if no error occurred, otherwise raise a
42494249
RuntimeError with the message.
42504250
"""
4251+
prepare_args(
4252+
[sheet, cell, value],
4253+
[
4254+
argsRule("sheet", [str]),
4255+
argsRule("cell", [str]),
4256+
argsRule("value", [int]),
4257+
],
4258+
)
42514259
lib.SetCellInt.restype = c_char_p
42524260
err = lib.SetCellInt(
42534261
self.file_index,
@@ -4381,6 +4389,14 @@ def set_cell_rich_text(
43814389
print(err)
43824390
```
43834391
"""
4392+
prepare_args(
4393+
[sheet, cell, runs],
4394+
[
4395+
argsRule("sheet", [str]),
4396+
argsRule("cell", [str]),
4397+
argsRule("runs", [list]),
4398+
],
4399+
)
43844400
lib.SetCellRichText.restype = c_char_p
43854401
vals = (types_go._RichTextRun * len(runs))()
43864402
for i, value in enumerate(runs):
@@ -4409,6 +4425,14 @@ def set_cell_str(self, sheet: str, cell: str, value: str) -> None:
44094425
None: Return None if no error occurred, otherwise raise a
44104426
RuntimeError with the message.
44114427
"""
4428+
prepare_args(
4429+
[sheet, cell, value],
4430+
[
4431+
argsRule("sheet", [str]),
4432+
argsRule("cell", [str]),
4433+
argsRule("value", [str]),
4434+
],
4435+
)
44124436
lib.SetCellStr.restype = c_char_p
44134437
err = lib.SetCellStr(
44144438
self.file_index,
@@ -4444,6 +4468,15 @@ def set_cell_style(
44444468
None: Return None if no error occurred, otherwise raise a
44454469
RuntimeError with the message.
44464470
"""
4471+
prepare_args(
4472+
[sheet, top_left_cell, bottom_right_cell, style_id],
4473+
[
4474+
argsRule("sheet", [str]),
4475+
argsRule("top_left_cell", [str]),
4476+
argsRule("bottom_right_cell", [str]),
4477+
argsRule("style_id", [int]),
4478+
],
4479+
)
44474480
lib.SetCellStyle.restype = c_char_p
44484481
err = lib.SetCellStyle(
44494482
self.file_index,
@@ -4527,6 +4560,14 @@ def set_col_outline_level(self, sheet: str, col: str, level: int) -> None:
45274560
print(err)
45284561
```
45294562
"""
4563+
prepare_args(
4564+
[sheet, col, level],
4565+
[
4566+
argsRule("sheet", [str]),
4567+
argsRule("col", [str]),
4568+
argsRule("level", [int]),
4569+
],
4570+
)
45304571
lib.SetColOutlineLevel.restype = c_char_p
45314572
err = lib.SetColOutlineLevel(
45324573
self.file_index, sheet.encode(ENCODE), col.encode(ENCODE), level
@@ -4568,6 +4609,14 @@ def set_col_style(self, sheet: str, columns: str, style_id: int) -> None:
45684609
print(err)
45694610
```
45704611
"""
4612+
prepare_args(
4613+
[sheet, columns, style_id],
4614+
[
4615+
argsRule("sheet", [str]),
4616+
argsRule("columns", [str]),
4617+
argsRule("style_id", [int]),
4618+
],
4619+
)
45714620
lib.SetColStyle.restype = c_char_p
45724621
err = lib.SetColStyle(
45734622
self.file_index, sheet.encode(ENCODE), columns.encode(ENCODE), style_id
@@ -4649,6 +4698,15 @@ def set_col_width(
46494698
print(err)
46504699
```
46514700
"""
4701+
prepare_args(
4702+
[sheet, start_col, end_col, width],
4703+
[
4704+
argsRule("sheet", [str]),
4705+
argsRule("start_col", [str]),
4706+
argsRule("end_col", [str]),
4707+
argsRule("width", [float]),
4708+
],
4709+
)
46524710
lib.SetColWidth.restype = c_char_p
46534711
err = lib.SetColWidth(
46544712
self.file_index,
@@ -4680,6 +4738,14 @@ def set_conditional_format(
46804738
None: Return None if no error occurred, otherwise raise a
46814739
RuntimeError with the message.
46824740
"""
4741+
prepare_args(
4742+
[sheet, range_ref, opts],
4743+
[
4744+
argsRule("sheet", [str]),
4745+
argsRule("range_ref", [str]),
4746+
argsRule("opts", [list]),
4747+
],
4748+
)
46834749
lib.SetConditionalFormat.restype = c_char_p
46844750
vals = (types_go._ConditionalFormatOptions * len(opts))()
46854751
for i, value in enumerate(opts):
@@ -4706,6 +4772,7 @@ def set_default_font(self, font_name: str) -> None:
47064772
None: Return None if no error occurred, otherwise raise a
47074773
RuntimeError with the message.
47084774
"""
4775+
prepare_args([font_name], [argsRule("font_name", [str])])
47094776
lib.SetDefaultFont.restype = c_char_p
47104777
err = lib.SetDefaultFont(self.file_index, font_name.encode(ENCODE)).decode(
47114778
ENCODE
@@ -4761,6 +4828,10 @@ def set_defined_name(self, defined_name: DefinedName) -> None:
47614828
))
47624829
```
47634830
"""
4831+
prepare_args(
4832+
[defined_name],
4833+
[argsRule("defined_name", [DefinedName])],
4834+
)
47644835
lib.SetDefinedName.restype = c_char_p
47654836
options = py_value_to_c(defined_name, types_go._DefinedName())
47664837
err = lib.SetDefinedName(self.file_index, byref(options)).decode(ENCODE)
@@ -4805,6 +4876,10 @@ def set_doc_props(self, doc_properties: DocProperties) -> None:
48054876
print(err)
48064877
```
48074878
"""
4879+
prepare_args(
4880+
[doc_properties],
4881+
[argsRule("doc_properties", [DocProperties])],
4882+
)
48084883
lib.SetDocProps.restype = c_char_p
48094884
options = py_value_to_c(doc_properties, types_go._DocProperties())
48104885
err = lib.SetDocProps(self.file_index, byref(options)).decode(ENCODE)
@@ -4845,6 +4920,13 @@ def set_header_footer(self, sheet: str, opts: HeaderFooterOptions) -> None:
48454920
print(err)
48464921
```
48474922
"""
4923+
prepare_args(
4924+
[sheet, opts],
4925+
[
4926+
argsRule("sheet", [str]),
4927+
argsRule("opts", [HeaderFooterOptions]),
4928+
],
4929+
)
48484930
lib.SetHeaderFooter.restype = c_char_p
48494931
options = py_value_to_c(opts, types_go._HeaderFooterOptions())
48504932
err = lib.SetHeaderFooter(
@@ -4865,6 +4947,13 @@ def set_page_layout(self, sheet: str, opts: PageLayoutOptions) -> None:
48654947
None: Return None if no error occurred, otherwise raise a
48664948
RuntimeError with the message.
48674949
"""
4950+
prepare_args(
4951+
[sheet, opts],
4952+
[
4953+
argsRule("sheet", [str]),
4954+
argsRule("opts", [PageLayoutOptions]),
4955+
],
4956+
)
48684957
lib.SetPageLayout.restype = c_char_p
48694958
options = py_value_to_c(opts, types_go._PageLayoutOptions())
48704959
err = lib.SetPageLayout(
@@ -4885,6 +4974,13 @@ def set_page_margins(self, sheet: str, opts: PageLayoutMarginsOptions) -> None:
48854974
None: Return None if no error occurred, otherwise raise a
48864975
RuntimeError with the message.
48874976
"""
4977+
prepare_args(
4978+
[sheet, opts],
4979+
[
4980+
argsRule("sheet", [str]),
4981+
argsRule("opts", [PageLayoutMarginsOptions]),
4982+
],
4983+
)
48884984
lib.SetPageMargins.restype = c_char_p
48894985
options = py_value_to_c(opts, types_go._PageLayoutMarginsOptions())
48904986
err = lib.SetPageMargins(
@@ -4906,6 +5002,10 @@ def set_panes(self, sheet: str, opts: Panes) -> None:
49065002
None: Return None if no error occurred, otherwise raise a
49075003
RuntimeError with the message.
49085004
"""
5005+
prepare_args(
5006+
[sheet, opts],
5007+
[argsRule("sheet", [str]), argsRule("opts", [Panes])],
5008+
)
49095009
lib.SetPanes.restype = c_char_p
49105010
options = py_value_to_c(opts, types_go._Panes())
49115011
err = lib.SetPanes(

test_excelize.py

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,21 @@ def test_style(self):
234234
f.set_cell_style("SheetN", "A1", "B2", style_id)
235235
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
236236
self.assertIsNone(f.set_col_style("Sheet1", "H", style_id))
237+
with self.assertRaises(TypeError) as context:
238+
f.set_cell_style("SheetN", "A1", "B2", True)
239+
self.assertEqual(
240+
str(context.exception),
241+
"expected type int for argument 'style_id', but got bool",
242+
)
237243
with self.assertRaises(RuntimeError) as context:
238244
f.set_col_style("SheetN", "H", style_id)
239245
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
246+
with self.assertRaises(TypeError) as context:
247+
f.set_col_style("Sheet1", "H", True)
248+
self.assertEqual(
249+
str(context.exception),
250+
"expected type int for argument 'style_id', but got bool",
251+
)
240252
self.assertEqual(f.get_col_style("Sheet1", "H"), style_id)
241253
with self.assertRaises(RuntimeError) as context:
242254
f.get_col_style("SheetN", "H")
@@ -366,10 +378,22 @@ def test_style(self):
366378
with self.assertRaises(RuntimeError) as context:
367379
f.set_cell_int("SheetN", "A10", 100)
368380
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
381+
with self.assertRaises(TypeError) as context:
382+
f.set_cell_int("Sheet1", "A1", True)
383+
self.assertEqual(
384+
str(context.exception),
385+
"expected type int for argument 'value', but got bool",
386+
)
369387
self.assertIsNone(f.set_cell_str("Sheet1", "A12", "Hello"))
370388
with self.assertRaises(RuntimeError) as context:
371389
f.set_cell_str("SheetN", "A12", "Hello")
372390
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
391+
with self.assertRaises(TypeError) as context:
392+
f.set_cell_str("SheetN1", "A12", excelize.RichTextRun())
393+
self.assertEqual(
394+
str(context.exception),
395+
"expected type str for argument 'value', but got RichTextRun",
396+
)
373397
with self.assertRaises(RuntimeError) as context:
374398
f.set_cell_value("SheetN", "A9", None)
375399
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
@@ -505,6 +529,12 @@ def test_style(self):
505529
with self.assertRaises(RuntimeError) as context:
506530
f.set_col_outline_level("SheetN", "D", 2)
507531
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
532+
with self.assertRaises(TypeError) as context:
533+
f.set_col_outline_level("SheetN", "D", True)
534+
self.assertEqual(
535+
str(context.exception),
536+
"expected type int for argument 'level', but got bool",
537+
)
508538
self.assertEqual(f.get_col_outline_level("Sheet1", "D"), 2)
509539
with self.assertRaises(RuntimeError) as context:
510540
f.get_col_outline_level("SheetN", "D")
@@ -858,12 +888,30 @@ def test_none_file_pointer(self):
858888
with self.assertRaises(RuntimeError) as context:
859889
f.set_default_font("")
860890
self.assertEqual(str(context.exception), expected)
891+
with self.assertRaises(TypeError) as context:
892+
f.set_default_font(1)
893+
self.assertEqual(
894+
str(context.exception),
895+
"expected type str for argument 'font_name', but got int",
896+
)
861897
with self.assertRaises(RuntimeError) as context:
862898
f.set_defined_name(excelize.DefinedName())
863899
self.assertEqual(str(context.exception), expected)
900+
with self.assertRaises(TypeError) as context:
901+
f.set_defined_name(1)
902+
self.assertEqual(
903+
str(context.exception),
904+
"expected type DefinedName for argument 'defined_name', but got int",
905+
)
864906
with self.assertRaises(RuntimeError) as context:
865907
f.set_doc_props(excelize.DocProperties())
866908
self.assertEqual(str(context.exception), expected)
909+
with self.assertRaises(TypeError) as context:
910+
f.set_doc_props(1)
911+
self.assertEqual(
912+
str(context.exception),
913+
"expected type DocProperties for argument 'doc_properties', but got int",
914+
)
867915
with self.assertRaises(RuntimeError) as context:
868916
f.set_workbook_props(excelize.WorkbookPropsOptions())
869917
self.assertEqual(str(context.exception), expected)
@@ -1280,6 +1328,12 @@ def test_header_footer(self):
12801328
with self.assertRaises(RuntimeError) as context:
12811329
f.set_header_footer("SheetN", excelize.HeaderFooterOptions())
12821330
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1331+
with self.assertRaises(TypeError) as context:
1332+
f.set_header_footer("Sheet1", 1)
1333+
self.assertEqual(
1334+
str(context.exception),
1335+
"expected type HeaderFooterOptions for argument 'opts', but got int",
1336+
)
12831337
self.assertIsNone(f.save_as(os.path.join("test", "TestHeaderFooter.xlsx")))
12841338
self.assertIsNone(f.close())
12851339

@@ -1303,6 +1357,12 @@ def test_page_layout(self):
13031357
with self.assertRaises(RuntimeError) as context:
13041358
f.set_page_layout("SheetN", excelize.PageLayoutOptions())
13051359
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1360+
with self.assertRaises(TypeError) as context:
1361+
f.set_page_layout("Sheet1", 1)
1362+
self.assertEqual(
1363+
str(context.exception),
1364+
"expected type PageLayoutOptions for argument 'opts', but got int",
1365+
)
13061366
self.assertIsNone(f.save_as(os.path.join("test", "TestPageLayout.xlsx")))
13071367
self.assertIsNone(f.close())
13081368

@@ -1326,6 +1386,12 @@ def test_page_margins(self):
13261386
with self.assertRaises(RuntimeError) as context:
13271387
f.set_page_margins("SheetN", excelize.PageLayoutMarginsOptions())
13281388
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1389+
with self.assertRaises(TypeError) as context:
1390+
f.set_page_margins("Sheet1", 1)
1391+
self.assertEqual(
1392+
str(context.exception),
1393+
"expected type PageLayoutMarginsOptions for argument 'opts', but got int",
1394+
)
13291395
self.assertIsNone(f.save_as(os.path.join("test", "TestPageMargins.xlsx")))
13301396
self.assertIsNone(f.close())
13311397

@@ -1354,6 +1420,12 @@ def test_panes(self):
13541420
with self.assertRaises(RuntimeError) as context:
13551421
f.set_panes("SheetN", excelize.Panes())
13561422
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1423+
with self.assertRaises(TypeError) as context:
1424+
f.set_panes("Sheet1", 1)
1425+
self.assertEqual(
1426+
str(context.exception),
1427+
"expected type Panes for argument 'opts', but got int",
1428+
)
13571429
self.assertIsNone(f.save_as(os.path.join("test", "TestPanes.xlsx")))
13581430
self.assertIsNone(f.close())
13591431

@@ -1749,8 +1821,14 @@ def test_cell_rich_text(self):
17491821

17501822
self.assertIsNone(f.set_col_width("Sheet1", "A", "A", 44.5))
17511823
with self.assertRaises(RuntimeError) as context:
1752-
f.set_col_width("SheetN", "A", "A", 44)
1824+
f.set_col_width("SheetN", "A", "A", 44.0)
17531825
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1826+
with self.assertRaises(TypeError) as context:
1827+
f.set_col_width("Sheet1", "A", "A", 44)
1828+
self.assertEqual(
1829+
str(context.exception),
1830+
"expected type float for argument 'width', but got int",
1831+
)
17541832
self.assertEqual(f.get_col_width("Sheet1", "A"), 44.5)
17551833
with self.assertRaises(RuntimeError) as context:
17561834
f.get_col_width("SheetN", "A")
@@ -1842,6 +1920,12 @@ def test_cell_rich_text(self):
18421920
with self.assertRaises(RuntimeError) as context:
18431921
f.set_cell_rich_text("SheetN", "A1", expected)
18441922
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1923+
with self.assertRaises(TypeError) as context:
1924+
f.set_cell_rich_text("Sheet1", "A1", 1)
1925+
self.assertEqual(
1926+
str(context.exception),
1927+
"expected type list for argument 'runs', but got int",
1928+
)
18451929
style = f.new_style(
18461930
excelize.Style(alignment=excelize.Alignment(wrap_text=True))
18471931
)
@@ -1889,6 +1973,12 @@ def test_conditional_format(self):
18891973
with self.assertRaises(RuntimeError) as context:
18901974
f.set_conditional_format("SheetN", "A1:A10", [])
18911975
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1976+
with self.assertRaises(TypeError) as context:
1977+
f.set_conditional_format("Sheet1", "A1:A10", 1)
1978+
self.assertEqual(
1979+
str(context.exception),
1980+
"expected type list for argument 'opts', but got int",
1981+
)
18921982
self.assertIsNone(f.save_as(os.path.join("test", "TestConditionalFormat.xlsx")))
18931983
self.assertIsNone(f.close())
18941984

0 commit comments

Comments
 (0)