Skip to content

Commit 57710e1

Browse files
authored
Refactored GeoComResponse return codes (#37)
* Replaced GeoComResponse code attributes * Updated GeoCom protocols to new response codes * Fixed GeoComReturn truthiness * Updated GeoCom request functions * Fixed GeoComResponse truthiness
1 parent d734c2f commit 57710e1

File tree

5 files changed

+54
-55
lines changed

5 files changed

+54
-55
lines changed

src/geocompy/protocols.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
class GeoComReturnCode(IntEnum):
3939
"""Base class for all GeoCom return code enums."""
4040

41+
def __bool__(self) -> bool:
42+
return self == 0
43+
4144

4245
class GeoComResponse(Generic[_P]):
4346
"""
@@ -100,12 +103,13 @@ def __init__(
100103
"""Full, serialized request, that invoked this response."""
101104
self.response: str = response
102105
"""Full, received response."""
103-
self.comcode: GeoComReturnCode = comcode
104-
"""Parsed COM return code indicating the success/failure of
105-
communication."""
106-
self.rpccode: GeoComReturnCode = rpccode
107-
"""Parsed RPC return code indicating the success/failure of
108-
the command."""
106+
self.error: GeoComReturnCode = (
107+
comcode
108+
if not comcode
109+
else rpccode
110+
)
111+
"""Parsed return code indicating the success/failure of the
112+
request."""
109113
self.trans: int = trans
110114
"""Parsed transaction ID."""
111115
self.params: _P | None = params
@@ -114,15 +118,14 @@ def __init__(
114118

115119
def __str__(self) -> str:
116120
return (
117-
f"GeoComResponse({self.rpcname}) com: {self.comcode.name:s}, "
118-
f"rpc: {self.rpccode.name:s}, "
121+
f"GeoComResponse({self.rpcname}) code: {self.error.name:s}, "
119122
f"tr: {self.trans:d}, "
120123
f"params: {self.params}, "
121124
f"(cmd: '{self.cmd}', response: '{self.response}')"
122125
)
123126

124127
def __bool__(self) -> bool:
125-
return bool(self.comcode) and bool(self.rpccode)
128+
return bool(self.error)
126129

127130
def map_params(
128131
self,
@@ -151,8 +154,8 @@ def map_params(
151154
self.rpcname,
152155
self.cmd,
153156
self.response,
154-
self.comcode,
155-
self.rpccode,
157+
self.error,
158+
self.error,
156159
self.trans,
157160
params
158161
)

src/geocompy/tps1000/__init__.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,7 @@ def __init__(
173173
for i in range(retry):
174174
try:
175175
self._conn.send("\n")
176-
response = self.com.nullprocess()
177-
if response.comcode and response.rpccode:
176+
if self.com.nullprocess():
178177
sleep(1)
179178
break
180179
except Exception:
@@ -244,7 +243,7 @@ def set_double_precision(
244243
get_double_precision
245244
"""
246245
response: GeoComResponse[None] = self.request(107, [digits])
247-
if response.comcode and response.rpccode:
246+
if not response.error:
248247
self._precision = digits
249248
return response
250249

@@ -374,20 +373,20 @@ def request(
374373
except SerialTimeoutException:
375374
self._logger.error(format_exc())
376375
answer = (
377-
f"%R1P,{TPS1000RC.COM_TIMEDOUT.value:d},"
378-
f"0:{TPS1000RC.FATAL.value:d}"
376+
f"%R1P,{TPS1000RC.COM_TIMEDOUT:d},"
377+
f"0:{TPS1000RC.OK:d}"
379378
)
380379
except SerialException:
381380
self._logger.error(format_exc())
382381
answer = (
383-
f"%R1P,{TPS1000RC.COM_CANT_SEND.value:d},"
384-
f"0:{TPS1000RC.FATAL.value:d}"
382+
f"%R1P,{TPS1000RC.COM_CANT_SEND:d},"
383+
f"0:{TPS1000RC.OK:d}"
385384
)
386385
except Exception:
387386
self._logger.error(format_exc())
388387
answer = (
389-
f"%R1P,{TPS1000RC.FATAL.value:d},"
390-
f"0:{TPS1000RC.FATAL.value:d}"
388+
f"%R1P,{TPS1000RC.COM_FAILED:d},"
389+
f"0:{TPS1000RC.OK:d}"
391390
)
392391

393392
response = self.parse_response(
@@ -461,7 +460,7 @@ def parse_response(
461460
cmd,
462461
response,
463462
TPS1000RC.COM_CANT_DECODE,
464-
TPS1000RC.UNDEFINED,
463+
TPS1000RC.OK,
465464
0
466465
)
467466

@@ -485,7 +484,7 @@ def parse_response(
485484
cmd,
486485
response,
487486
TPS1000RC.COM_CANT_DECODE,
488-
TPS1000RC.UNDEFINED,
487+
TPS1000RC.OK,
489488
0
490489
)
491490

src/geocompy/tps1100/__init__.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,7 @@ def __init__(
179179
for i in range(retry):
180180
try:
181181
self._conn.send("\n")
182-
response = self.com.nullprocess()
183-
if response.comcode and response.rpccode:
182+
if self.com.nullprocess():
184183
sleep(1)
185184
break
186185
except Exception:
@@ -250,7 +249,7 @@ def set_double_precision(
250249
get_double_precision
251250
"""
252251
response: GeoComResponse[None] = self.request(107, [digits])
253-
if response.comcode and response.rpccode:
252+
if not response.error:
254253
self._precision = digits
255254
return response
256255

@@ -380,20 +379,20 @@ def request(
380379
except SerialTimeoutException:
381380
self._logger.error(format_exc())
382381
answer = (
383-
f"%R1P,{TPS1100RC.COM_TIMEDOUT.value:d},"
384-
f"0:{TPS1100RC.FATAL.value:d}"
382+
f"%R1P,{TPS1100RC.COM_TIMEDOUT:d},"
383+
f"0:{TPS1100RC.OK:d}"
385384
)
386385
except SerialException:
387386
self._logger.error(format_exc())
388387
answer = (
389-
f"%R1P,{TPS1100RC.COM_CANT_SEND.value:d},"
390-
f"0:{TPS1100RC.FATAL.value:d}"
388+
f"%R1P,{TPS1100RC.COM_CANT_SEND:d},"
389+
f"0:{TPS1100RC.OK:d}"
391390
)
392391
except Exception:
393392
self._logger.error(format_exc())
394393
answer = (
395-
f"%R1P,{TPS1100RC.FATAL.value:d},"
396-
f"0:{TPS1100RC.FATAL.value:d}"
394+
f"%R1P,{TPS1100RC.COM_FAILED:d},"
395+
f"0:{TPS1100RC.OK:d}"
397396
)
398397

399398
response = self.parse_response(
@@ -467,7 +466,7 @@ def parse_response(
467466
cmd,
468467
response,
469468
TPS1100RC.COM_CANT_DECODE,
470-
TPS1100RC.UNDEFINED,
469+
TPS1100RC.OK,
471470
0
472471
)
473472

@@ -491,7 +490,7 @@ def parse_response(
491490
cmd,
492491
response,
493492
TPS1100RC.COM_CANT_DECODE,
494-
TPS1100RC.UNDEFINED,
493+
TPS1100RC.OK,
495494
0
496495
)
497496

src/geocompy/tps1200p/__init__.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,7 @@ def __init__(
179179
for i in range(retry):
180180
try:
181181
self._conn.send("\n")
182-
response = self.com.nullprocess()
183-
if response.comcode and response.rpccode:
182+
if self.com.nullprocess():
184183
sleep(1)
185184
break
186185
except Exception:
@@ -250,7 +249,7 @@ def set_double_precision(
250249
get_double_precision
251250
"""
252251
response: GeoComResponse[None] = self.request(107, [digits])
253-
if response.comcode and response.rpccode:
252+
if not response.error:
254253
self._precision = digits
255254
return response
256255

@@ -380,20 +379,20 @@ def request(
380379
except SerialTimeoutException:
381380
self._logger.error(format_exc())
382381
answer = (
383-
f"%R1P,{TPS1200PGRC.COM_TIMEDOUT.value:d},"
384-
f"0:{TPS1200PGRC.FATAL.value:d}"
382+
f"%R1P,{TPS1200PGRC.COM_TIMEDOUT:d},"
383+
f"0:{TPS1200PGRC.OK:d}"
385384
)
386385
except SerialException:
387386
self._logger.error(format_exc())
388387
answer = (
389-
f"%R1P,{TPS1200PGRC.COM_CANT_SEND.value:d},"
390-
f"0:{TPS1200PGRC.FATAL.value:d}"
388+
f"%R1P,{TPS1200PGRC.COM_CANT_SEND:d},"
389+
f"0:{TPS1200PGRC.OK:d}"
391390
)
392391
except Exception:
393392
self._logger.error(format_exc())
394393
answer = (
395-
f"%R1P,{TPS1200PGRC.FATAL.value:d},"
396-
f"0:{TPS1200PGRC.FATAL.value:d}"
394+
f"%R1P,{TPS1200PGRC.COM_FAILED:d},"
395+
f"0:{TPS1200PGRC.OK:d}"
397396
)
398397

399398
response = self.parse_response(
@@ -467,7 +466,7 @@ def parse_response(
467466
cmd,
468467
response,
469468
TPS1200PGRC.COM_CANT_DECODE,
470-
TPS1200PGRC.UNDEFINED,
469+
TPS1200PGRC.OK,
471470
0
472471
)
473472

@@ -491,7 +490,7 @@ def parse_response(
491490
cmd,
492491
response,
493492
TPS1200PGRC.COM_CANT_DECODE,
494-
TPS1200PGRC.UNDEFINED,
493+
TPS1200PGRC.OK,
495494
0
496495
)
497496

src/geocompy/vivatps/__init__.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,7 @@ def __init__(
192192
for i in range(retry):
193193
try:
194194
self._conn.send("\n")
195-
response = self.com.nullprocess()
196-
if response.comcode and response.rpccode:
195+
if self.com.nullprocess():
197196
sleep(1)
198197
break
199198
except Exception:
@@ -265,7 +264,7 @@ def set_double_precision(
265264
266265
"""
267266
response: GeoComResponse[None] = self.request(107, [digits])
268-
if response.comcode and response.rpccode:
267+
if not response.error:
269268
self._precision = digits
270269
return response
271270

@@ -398,20 +397,20 @@ def request(
398397
except SerialTimeoutException:
399398
self._logger.error(format_exc())
400399
answer = (
401-
f"%R1P,{VivaTPSGRC.COM_TIMEDOUT.value:d},"
402-
f"0:{VivaTPSGRC.FATAL.value:d}"
400+
f"%R1P,{VivaTPSGRC.COM_TIMEDOUT:d},"
401+
f"0:{VivaTPSGRC.OK:d}"
403402
)
404403
except SerialException:
405404
self._logger.error(format_exc())
406405
answer = (
407-
f"%R1P,{VivaTPSGRC.COM_CANT_SEND.value:d},"
408-
f"0:{VivaTPSGRC.FATAL.value:d}"
406+
f"%R1P,{VivaTPSGRC.COM_CANT_SEND:d},"
407+
f"0:{VivaTPSGRC.OK:d}"
409408
)
410409
except Exception:
411410
self._logger.error(format_exc())
412411
answer = (
413-
f"%R1P,{VivaTPSGRC.FATAL.value:d},"
414-
f"0:{VivaTPSGRC.FATAL.value:d}"
412+
f"%R1P,{VivaTPSGRC.COM_FAILED:d},"
413+
f"0:{VivaTPSGRC.OK:d}"
415414
)
416415

417416
response = self.parse_response(
@@ -486,7 +485,7 @@ def parse_response(
486485
cmd,
487486
response,
488487
VivaTPSGRC.COM_CANT_DECODE,
489-
VivaTPSGRC.UNDEFINED,
488+
VivaTPSGRC.OK,
490489
0
491490
)
492491

@@ -510,7 +509,7 @@ def parse_response(
510509
cmd,
511510
response,
512511
VivaTPSGRC.COM_CANT_DECODE,
513-
VivaTPSGRC.UNDEFINED,
512+
VivaTPSGRC.OK,
514513
0
515514
)
516515

0 commit comments

Comments
 (0)