Skip to content

Commit 088bd51

Browse files
authored
Merge pull request #91 from MrClock8163/refactor/parsing
Parsing functions cleanup
2 parents 14d6932 + e59aae6 commit 088bd51

File tree

22 files changed

+317
-310
lines changed

22 files changed

+317
-310
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@ The project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
1616

1717
- Reworked arithmetic operations supported by `Angle`
1818
- Reworked arithmetic operations supported by `Vector`
19+
- Renamed `parsestr` to `parse_string`
20+
- Renamed `parsebool` to `parse_bool`
21+
- Renamed `toenum` to `get_enum`
22+
- Renamed `enumparser` to `get_enum_parser`
1923

2024
### Fixed
2125

22-
- GeoCom ING `set_telescopic_configuration` was missing the `prefix` parameter
26+
- GeoCom IMG `set_telescopic_configuration` was missing the `prefix` parameter
2327
- `Angle.to_dms` was sometimes returning incorrect value due to rounding
2428

2529
### Removed

src/geocompy/data.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@
1010
Functions
1111
---------
1212
13-
- ``parsestr``
14-
- ``parsebool``
15-
- ``toenum``
16-
- ``enumparser``
17-
- ``gsiword``
13+
- ``parse_string``
14+
- ``parse_bool``
15+
- ``get_enum``
16+
- ``get_enum_parser``
1817
1918
Types
2019
-----
@@ -49,7 +48,7 @@
4948
_E = TypeVar("_E", bound=Enum)
5049

5150

52-
def parsestr(value: str) -> str:
51+
def parse_string(value: str) -> str:
5352
"""
5453
Returns a string value with the enclosing quote marks (``"..."``)
5554
removed.
@@ -77,7 +76,7 @@ def parsestr(value: str) -> str:
7776
return value
7877

7978

80-
def parsebool(value: str) -> bool:
79+
def parse_bool(value: str) -> bool:
8180
"""
8281
Utility function to parse a serialized boolean value.
8382
@@ -94,7 +93,7 @@ def parsebool(value: str) -> bool:
9493
return bool(int(value))
9594

9695

97-
def toenum(e: type[_E], value: _E | str) -> _E:
96+
def get_enum(e: type[_E], value: _E | str) -> _E:
9897
"""
9998
Returns the member of an :class:`~enum.Enum` with the given name.
10099
@@ -138,7 +137,7 @@ def toenum(e: type[_E], value: _E | str) -> _E:
138137
return value
139138

140139

141-
def enumparser(e: type[_E]) -> Callable[[str], _E]:
140+
def get_enum_parser(e: type[_E]) -> Callable[[str], _E]:
142141
"""
143142
Returns a parser function that can parse the target enum from the
144143
serialized enum value.
@@ -168,10 +167,10 @@ def enumparser(e: type[_E]) -> Callable[[str], _E]:
168167
<MyEnum.ONE: 1>
169168
170169
"""
171-
def parseenum(value: str) -> _E:
170+
def parser(value: str) -> _E:
172171
return e(int(value))
173172

174-
return parseenum
173+
return parser
175174

176175

177176
_AngleUnit = Literal['deg', 'rad', 'gon']

src/geocompy/geo/__init__.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from logging import Logger
4141
from traceback import format_exc
4242
from time import sleep
43+
from enum import Enum
4344
from typing import Any, Callable, Iterable, overload, TypeVar
4445

4546
from serial import SerialException, SerialTimeoutException
@@ -279,22 +280,22 @@ def precision(self, value: int) -> None:
279280
def request(
280281
self,
281282
rpc: int,
282-
params: Iterable[int | float | bool | str | Angle | Byte] = (),
283+
params: Iterable[int | float | bool | str | Angle | Byte | Enum] = (),
283284
parsers: Callable[[str], _T] | None = None
284285
) -> GeoComResponse[_T]: ...
285286

286287
@overload
287288
def request(
288289
self,
289290
rpc: int,
290-
params: Iterable[int | float | bool | str | Angle | Byte] = (),
291+
params: Iterable[int | float | bool | str | Angle | Byte | Enum] = (),
291292
parsers: Iterable[Callable[[str], Any]] | None = None
292293
) -> GeoComResponse[tuple[Any, ...]]: ...
293294

294295
def request(
295296
self,
296297
rpc: int,
297-
params: Iterable[int | float | bool | str | Angle | Byte] = (),
298+
params: Iterable[int | float | bool | str | Angle | Byte | Enum] = (),
298299
parsers: (
299300
Iterable[Callable[[str], Any]]
300301
| Callable[[str], Any]
@@ -312,7 +313,7 @@ def request(
312313
----------
313314
rpc: int
314315
Number of the RPC to execute.
315-
params: Iterable[int | float | bool | str | Angle | Byte]
316+
params: Iterable[int | float | bool | str | Angle | Byte | Enum]
316317
Parameters for the request, by default()
317318
parsers: Iterable[Callable[[str], Any]] \
318319
| Callable[[str], Any] \
@@ -344,6 +345,8 @@ def request(
344345
value = f"{item:d}"
345346
case str():
346347
value = f"\"{item}\""
348+
case Enum():
349+
value = f"{item.value:d}"
347350
case _:
348351
raise TypeError(f"unexpected parameter type: {type(item)}")
349352

src/geocompy/geo/aus.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"""
1515
from __future__ import annotations
1616

17-
from ..data import parsebool
17+
from ..data import parse_bool
1818
from .gctypes import (
1919
GeoComSubsystem,
2020
GeoComResponse
@@ -57,7 +57,7 @@ def get_user_atr_state(self) -> GeoComResponse[bool]:
5757
"""
5858
return self._request(
5959
18006,
60-
parsers=parsebool
60+
parsers=parse_bool
6161
)
6262

6363
def switch_user_atr(
@@ -117,7 +117,7 @@ def get_user_lock_state(self) -> GeoComResponse[bool]:
117117
"""
118118
return self._request(
119119
18008,
120-
parsers=parsebool
120+
parsers=parse_bool
121121
)
122122

123123
def switch_user_lock(
@@ -178,7 +178,7 @@ def get_rcs_search_status(self) -> GeoComResponse[bool]:
178178
"""
179179
return self._request(
180180
18008,
181-
parsers=parsebool
181+
parsers=parse_bool
182182
)
183183

184184
def switch_rcs_search(

src/geocompy/geo/aut.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
from ..data import (
2020
Angle,
21-
toenum,
22-
enumparser,
23-
parsebool
21+
get_enum,
22+
get_enum_parser,
23+
parse_bool
2424
)
2525
from .gcdata import (
2626
Adjust,
@@ -78,7 +78,7 @@ def get_atr_status(self) -> GeoComResponse[bool]:
7878
"""
7979
return self._request(
8080
9019,
81-
parsers=parsebool
81+
parsers=parse_bool
8282
)
8383

8484
def switch_atr(
@@ -152,7 +152,7 @@ def get_lock_status(self) -> GeoComResponse[bool]:
152152
"""
153153
return self._request(
154154
9021,
155-
parsers=parsebool
155+
parsers=parse_bool
156156
)
157157

158158
def switch_lock(
@@ -369,11 +369,11 @@ def turn_to(
369369
com.get_timeout
370370
com.set_timeout
371371
"""
372-
_posmode = toenum(Position, posmode)
373-
_atrmode = toenum(ATR, atrmode)
372+
_posmode = get_enum(Position, posmode)
373+
_atrmode = get_enum(ATR, atrmode)
374374
return self._request(
375375
9027,
376-
[float(hz), float(v), _posmode.value, _atrmode.value, 0]
376+
[float(hz), float(v), _posmode, _atrmode, 0]
377377
)
378378

379379
def change_face(
@@ -428,11 +428,11 @@ def change_face(
428428
com.set_timeout
429429
tmc.get_face
430430
"""
431-
_posmode = toenum(Position, posmode)
432-
_atrmode = toenum(ATR, atrmode)
431+
_posmode = get_enum(Position, posmode)
432+
_atrmode = get_enum(ATR, atrmode)
433433
return self._request(
434434
9028,
435-
[_posmode.value, _atrmode.value, 0]
435+
[_posmode, _atrmode, 0]
436436
)
437437

438438
def fine_adjust(
@@ -550,7 +550,7 @@ def get_fine_adjust_mode(self) -> GeoComResponse[Adjust]:
550550
"""
551551
return self._request(
552552
9030,
553-
parsers=enumparser(Adjust)
553+
parsers=get_enum_parser(Adjust)
554554
)
555555

556556
def set_fine_adjust_mode(
@@ -577,10 +577,10 @@ def set_fine_adjust_mode(
577577
--------
578578
get_fine_adjust_mode
579579
"""
580-
_mode = toenum(Adjust, mode)
580+
_mode = get_enum(Adjust, mode)
581581
return self._request(
582582
9031,
583-
[_mode.value]
583+
[_mode]
584584
)
585585

586586
def lock_in(self) -> GeoComResponse[None]:
@@ -645,7 +645,7 @@ def get_search_area(
645645
Angle.parse,
646646
Angle.parse,
647647
Angle.parse,
648-
parsebool
648+
parse_bool
649649
)
650650
)
651651

@@ -881,10 +881,10 @@ def powersearch_next(
881881
switch_powersearch_range
882882
powersearch_window
883883
"""
884-
_direction = toenum(Turn, direction)
884+
_direction = get_enum(Turn, direction)
885885
return self._request(
886886
9051,
887-
[_direction.value, swing]
887+
[_direction, swing]
888888
)
889889

890890
def switch_lock_onthefly(
@@ -936,7 +936,7 @@ def get_lock_onthefly_status(self) -> GeoComResponse[bool]:
936936
"""
937937
return self._request(
938938
9102,
939-
parsers=parsebool
939+
parsers=parse_bool
940940
)
941941

942942
def aim_at_pixel(
@@ -970,8 +970,8 @@ def aim_at_pixel(
970970
- ``AUT_SIDECOVER_ERR``: Sidecover is open.
971971
972972
"""
973-
_camera = toenum(Camera, camera)
973+
_camera = get_enum(Camera, camera)
974974
return self._request(
975975
9081,
976-
[_camera.value, x, y]
976+
[_camera, x, y]
977977
)

0 commit comments

Comments
 (0)