Skip to content

Commit 4356521

Browse files
authored
Merge pull request #19 from ISISComputingGroup/get_pv_type_hint
Type hint get_pv like cget
2 parents bd7fa78 + a323f08 commit 4356521

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

src/genie_python/genie.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ def waitfor_move(*blocks: str | None, **kwargs: int | None) -> None:
729729
@log_command_and_handle_exception
730730
def get_pv(
731731
name: str, to_string: bool = False, is_local: bool = False, use_numpy: bool = False
732-
) -> PVValue:
732+
) -> Any:
733733
"""
734734
Get the value for the specified PV.
735735

tests/test_script_checker.py

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def assertSymbolsDefined(self, script_lines, expected_symbols):
5454

5555
def test_GIVEN_end_without_brackets_WHEN_check_THEN_error_message(self):
5656
script_lines = [
57-
"from genie_python import genie as g\n" "def test():\n",
57+
"from genie_python import genie as g\ndef test():\n",
5858
" g.begin()\n",
5959
" g.end\n",
6060
]
@@ -65,14 +65,14 @@ def test_GIVEN_end_without_brackets_WHEN_check_THEN_error_message(self):
6565
)
6666

6767
def test_GIVEN_end_as_start_of_another_word_WHEN_check_THEN_no_error_message(self):
68-
script_lines = ["from genie_python import genie as g\n" "def test():\n", " endAngle = 1"]
68+
script_lines = ["from genie_python import genie as g\ndef test():\n", " endAngle = 1"]
6969

7070
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
7171
self.assertEqual(errors, [])
7272

7373
def test_GIVEN_end_as_end_of_another_word_WHEN_check_THEN_no_error_message(self):
7474
script_lines = [
75-
"from genie_python import genie as g\n" "def test():\n",
75+
"from genie_python import genie as g\ndef test():\n",
7676
" angle_end = 1",
7777
]
7878

@@ -82,7 +82,7 @@ def test_GIVEN_end_as_end_of_another_word_WHEN_check_THEN_no_error_message(self)
8282
self.assertEqual(errors, [])
8383

8484
def test_GIVEN_end_without_brackets_at_start_of_line_WHEN_check_THEN_error_message(self):
85-
script_lines = ["from genie_python import genie as g\n" "def test():\n" " g.end"]
85+
script_lines = ["from genie_python import genie as g\ndef test():\n g.end"]
8686

8787
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
8888
self.assertEqual(
@@ -92,15 +92,15 @@ def test_GIVEN_end_without_brackets_at_start_of_line_WHEN_check_THEN_error_messa
9292
def test_GIVEN_end_without_brackets_on_line_with_fn_with_brackets_WHEN_check_THEN_error_message(
9393
self,
9494
):
95-
script_lines = ["from genie_python import genie as g\n" "g.begin(); g.end "]
95+
script_lines = ["from genie_python import genie as g\ng.begin(); g.end "]
9696

9797
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
9898
self.assertEqual(
9999
errors, ["W: 2: Statement seems to have no effect (pointless-statement)"]
100100
)
101101

102102
def test_GIVEN_end_in_string_without_brackets_WHEN_check_THEN_no_message(self):
103-
script_lines = ["def test():\n" ' " a string containing end "']
103+
script_lines = ['def test():\n " a string containing end "']
104104

105105
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
106106
self.assertEqual(errors, [])
@@ -202,9 +202,7 @@ def test_GIVEN_variable_assignment_with_g__WHEN_check_THEN_no_message(self):
202202
self.assertEqual(errors, [])
203203

204204
def test_GIVEN_function_with_g_WHEN_check_THEN_warn_user(self):
205-
script_lines = [
206-
"from genie_python import genie as g\n" "def test():\n" " g.test_function()\n"
207-
]
205+
script_lines = ["from genie_python import genie as g\ndef test():\n g.test_function()\n"]
208206

209207
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
210208
self.assertEqual(
@@ -214,7 +212,7 @@ def test_GIVEN_function_with_g_WHEN_check_THEN_warn_user(self):
214212

215213
def test_GIVEN_2_g_assignments_WHEN_check_THEN_warning_message(self):
216214
script_lines = [
217-
"from genie_python import genie as g\n" "def test():\n" " g=16\n",
215+
"from genie_python import genie as g\ndef test():\n g=16\n",
218216
" g=17",
219217
]
220218

@@ -224,9 +222,7 @@ def test_GIVEN_2_g_assignments_WHEN_check_THEN_warning_message(self):
224222
)
225223

226224
def test_GIVEN_g_non_existing_command_WHEN_call_THEN_error_message(self):
227-
script_lines = [
228-
"from genie_python import genie as g\n" "def test():\n" " g.aitfor_time(10)"
229-
]
225+
script_lines = ["from genie_python import genie as g\ndef test():\n g.aitfor_time(10)"]
230226

231227
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
232228
self.assertEqual(
@@ -450,6 +446,20 @@ def test_GIVEN_invalid_var_type_THEN_pyright_throws_exception(self):
450446
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
451447
self.assertTrue(expected in errors[0])
452448

449+
def test_GIVEN_two_get_pv_calls_with_arithmetic_operators_THEN_no_error(self):
450+
script_lines = [
451+
"from genie_python import genie as g\n",
452+
"a = g.get_pv('...')\n",
453+
"b = g.get_pv('...')\n",
454+
"added = a + b\n",
455+
"subtracted = a - b\n",
456+
"multiplied = a * b\n",
457+
"divided = a / b\n",
458+
]
459+
460+
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
461+
self.assertListEqual(errors, [])
462+
453463
def test_GIVEN_new_directory_WHEN_pyright_script_checker_called_THEN_pyright_json_created_then_destroyed_after_use(
454464
self,
455465
):
@@ -539,8 +549,7 @@ def test_GIVEN_trying_to_index_var_of_optional_type_WHEN_pyright_script_checker_
539549
):
540550
script_lines = [
541551
"from typing import Optional, List\n",
542-
"def get_first_element(elements: Optional[List[int]]) -> int:\n"
543-
" return elements[0]\n",
552+
"def get_first_element(elements: Optional[List[int]]) -> int:\n return elements[0]\n",
544553
]
545554

546555
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
@@ -563,7 +572,7 @@ def test_GIVEN_trying_to_iterate_over_var_of_optional_type_WHEN_pyright_script_c
563572
):
564573
script_lines = [
565574
"from typing import Optional, List\n",
566-
"def iter_elements(elements: Optional[List[int]]):\n" " for element in elements:\n",
575+
"def iter_elements(elements: Optional[List[int]]):\n for element in elements:\n",
567576
" pass\n",
568577
]
569578

@@ -573,23 +582,23 @@ def test_GIVEN_trying_to_iterate_over_var_of_optional_type_WHEN_pyright_script_c
573582
def test_GIVEN_trying_to_define_function_with_none_type_args_type_WHEN_pyright_script_checker_called_THEN_no_error(
574583
self,
575584
):
576-
script_lines = ["def none_func(arg: int = None):\n" " print(arg)\n"]
585+
script_lines = ["def none_func(arg: int = None):\n print(arg)\n"]
577586

578587
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
579588
self.assertEqual(errors, [])
580589

581590
def test_GIVEN_trying_to_use_optional_operand__WHEN_pyright_script_checker_called_THEN_no_error(
582591
self,
583592
):
584-
script_lines = ["def none_func(arg1: int, arg2: int = None):\n" " print(arg2 + arg1)\n"]
593+
script_lines = ["def none_func(arg1: int, arg2: int = None):\n print(arg2 + arg1)\n"]
585594

586595
with CreateTempScriptAndReturnErrors(self.checker, self.machine, script_lines) as errors:
587596
self.assertEqual(errors, [])
588597

589598
def test_GIVEN_trying_to_use_undefined_variable_WHEN_pyright_script_checker_called_THEN_no_error(
590599
self,
591600
):
592-
script_lines = ["def func():\n" " print(arg)\n"]
601+
script_lines = ["def func():\n print(arg)\n"]
593602

594603
with CreateTempScriptAndReturnErrors(
595604
self.checker, self.machine, script_lines, no_pylint=True

0 commit comments

Comments
 (0)