Skip to content

Commit 340bc1b

Browse files
committed
mostly automatic conversion with 2to3.py
some manual changes in SerialStream.write() included logging
1 parent ef0a4a9 commit 340bc1b

10 files changed

+94
-85
lines changed

Diff for: dynamixel/__init__.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
"""
2020
__version__ = '1.1.0'
2121

22-
from dynamixel import Dynamixel, SensorModule
23-
from dynamixel_network import DynamixelNetwork
24-
from echo_stream import EchoStream
25-
from serial_stream import SerialStream
26-
from defs import ERROR_STATUS, BAUD_RATE, DEVICE, INSTRUCTION, \
22+
from .dynamixel import Dynamixel, SensorModule
23+
from .dynamixel_network import DynamixelNetwork
24+
from .echo_stream import EchoStream
25+
from .serial_stream import SerialStream
26+
from .defs import ERROR_STATUS, BAUD_RATE, DEVICE, INSTRUCTION, \
2727
STATUS_RETURN_LEVEL

Diff for: dynamixel/defs.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
2222
"""
2323

24-
import enumeration
24+
from . import enumeration
2525

2626
ERROR_STATUS = enumeration.Enumeration( [
2727
('None', 0x0, {'textDesc': "None"}),

Diff for: dynamixel/dynamixel.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#!/usr/bin/env python2.6
2-
31
"""
42
This is a Python version of the ForestMoon Dynamixel library originally
53
written in C# by Scott Ferguson.
@@ -21,13 +19,13 @@
2119
2220
"""
2321

24-
import defs
22+
from . import defs
2523
import time
26-
import dynamixel_network
24+
from . import dynamixel_network
2725
import re
2826
import operator
2927

30-
from defs import DEVICE
28+
from .defs import DEVICE
3129

3230
AX12 = DEVICE['AX12']
3331
AXS1 = DEVICE['AXS1']
@@ -69,7 +67,7 @@ def _transformName(self, register):
6967
def __getattribute__(self, name):
7068

7169
# Abuse global scope a bit to save a ton of work
72-
if name in AXS1PropNames.keys():
70+
if name in list(AXS1PropNames.keys()):
7371
regName = AXS1PropNames[name]
7472
return self._get_register_value(AXS1[regName])
7573
else:
@@ -78,7 +76,7 @@ def __getattribute__(self, name):
7876
def __setattr__(self, name, value):
7977

8078
# Abuse global scope a bit to save a ton of work
81-
if name in AXS1PropNames.keys():
79+
if name in list(AXS1PropNames.keys()):
8280
regName = AXS1PropNames[name]
8381
self.set_register_value(AXS1[regName], value)
8482
else:
@@ -304,7 +302,7 @@ def set_register_value(self, register, value):
304302
if self._synchronized:
305303
if register == AX12.MovingSpeed and value == 0:
306304
value = 1
307-
print "Moving speed %d " % (value)
305+
print("Moving speed %d " % (value))
308306
self[register] = value
309307
self.changed = True
310308
elif register in [AX12.ModelNumber,

Diff for: dynamixel/dynamixel_network.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
2121
"""
2222

23-
import defs
24-
import stream
25-
import event_handler
23+
from . import defs
24+
from . import stream
25+
from . import event_handler
2626
import time
27-
import dynamixel
27+
# from . import dynamixel
2828

29-
from defs import DEVICE
29+
from .defs import DEVICE
3030

3131
AX12 = DEVICE['AX12']
3232
AXS1 = DEVICE['AXS1']
@@ -56,7 +56,7 @@ def error_text(error_type):
5656
""" Returns a list of the textual representation
5757
of the ERROR_STATUS value """
5858
text = []
59-
for key, value, description in defs.ERROR_STATUS.items():
59+
for key, value, description in list(defs.ERROR_STATUS.items()):
6060
if (error_type & value) != 0:
6161
text.append(description['textDesc'])
6262
return text
@@ -126,8 +126,8 @@ def enter_toss_mode(self):
126126
if state > 1:
127127
raise Exception("CM-5 detected but not in Managed Mode")
128128
break
129-
print "%d : %d" % (self._stream.read_timeout,
130-
self._stream.write_timeout)
129+
print("%d : %d" % (self._stream.read_timeout,
130+
self._stream.write_timeout))
131131
return state == 5
132132

133133
def dump_statistics(self):
@@ -237,7 +237,7 @@ def read_packet(self):
237237
# user's
238238
if error_status != 0 and not self._in_error_handler:
239239
self._in_error_handler = True
240-
print ident, self.error_text(error_status)
240+
print(ident, self.error_text(error_status))
241241
self.dynamixel_error(self, (ident, error_status))
242242
self._in_error_handler = False
243243
return (ident, data)
@@ -339,7 +339,7 @@ def _read_data(self, ident, start_address, count):
339339
return_packet = self.await_packet(ident, count)
340340
retry = False
341341
except stream.TimeoutException:
342-
print "TIMEOUT accessing servo ID: %d" % (ident)
342+
print("TIMEOUT accessing servo ID: %d" % (ident))
343343
self._stream.flush()
344344
return return_packet
345345

@@ -494,7 +494,7 @@ def scan_ids(self, start_id, end_id):
494494
if start_id > end_id or start_id < 0:
495495
raise ValueError("start_id must be 0 to end_id")
496496
ids = []
497-
for ident in xrange(start_id, end_id + 1):
497+
for ident in range(start_id, end_id + 1):
498498
if self.ping(ident):
499499
ids.append(ident)
500500
return ids
@@ -528,7 +528,7 @@ def __getitem__(self, ident):
528528

529529
def get_dynamixels(self):
530530
""" A list of dynamixels present on the network """
531-
return self._dynamixel_map.values()
531+
return list(self._dynamixel_map.values())
532532

533533
dynamixels = property(get_dynamixels)
534534

@@ -562,7 +562,7 @@ def _set_stopped(self, value):
562562
activity for the dynamixels that are synchronized
563563
"""
564564
if value:
565-
for (ident, servo) in self._dynamixel_map.items():
565+
for (ident, servo) in list(self._dynamixel_map.items()):
566566
servo.stop()
567567
self.synchronize()
568568
self._stopped = value
@@ -582,7 +582,7 @@ def synchronize(self):
582582
"""
583583
data = None
584584
count = 0
585-
for (ident, servo) in self._dynamixel_map.items():
585+
for (ident, servo) in list(self._dynamixel_map.items()):
586586
if servo.changed:
587587
if not self.stopped:
588588
count += 1
@@ -605,7 +605,7 @@ def broadcast_register(self, register, register_length, value):
605605
606606
Updates the cache value of the register for all Dynamixels.
607607
"""
608-
for (ident, servo) in self._dynamixel_map.items():
608+
for (ident, servo) in list(self._dynamixel_map.items()):
609609
servo[register] = value
610610
self.write_register(DynamixelInterface.BROADCAST_ID,
611611
register,

Diff for: dynamixel/echo_stream.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
2121
"""
2222

23-
import stream
24-
import event_handler
23+
from . import stream
24+
from . import event_handler
2525

2626
class EchoStream( stream.Stream ):
2727
"""A wrapper for a stream class that also has a event handler for echoing

Diff for: dynamixel/enumeration.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def __init__( self, enums ):
4848
# add to value set to ensure non-duplicate values
4949
values.add( value )
5050
# populate the attributes of the class
51-
for key, value in self._values.items():
51+
for key, value in list(self._values.items()):
5252
object.__setattr__( self, key, value )
5353
def __getitem__( self, key ):
5454
""" Lookup an item based on a string
@@ -77,7 +77,7 @@ def key( self, value ):
7777
Returns key as a string
7878
Throws KeyError if key is not associated with a value
7979
"""
80-
for key, val in self._values.items():
80+
for key, val in list(self._values.items()):
8181
if val == value:
8282
return key
8383
raise KeyError( "Cannot find associated key in enumeration" )
@@ -104,15 +104,15 @@ def description( self, key=None, value=None ):
104104
raise KeyError( "Cannot find associated description" )
105105
def keys( self ):
106106
""" Return the keys in the enumeration as a list of strings """
107-
return self._values.keys()
107+
return list(self._values.keys())
108108
def values( self ):
109109
""" Return the values in the enumeration as a list of values """
110-
return self._values.values()
110+
return list(self._values.values())
111111
def __iter__( self ):
112112
""" Return the iterator for the Enumeration """
113113
return iter( self._values )
114114
def __len__( self ):
115115
""" Return the number of elements in the enumeration """
116116
return len( self._values )
117117
def __repr__( self ):
118-
return "Enumeration( %r )" % (self.items())
118+
return "Enumeration( %r )" % (list(self.items()))

Diff for: dynamixel/serial_stream.py

+15-6
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
# PySerial Module
2323
import serial
2424
except:
25-
print "This module requires the pySerial to be installed \
26-
to use the Serial Stream"
25+
print("This module requires the pySerial to be installed \
26+
to use the Serial Stream")
2727

28+
import logging
2829

29-
from stream import Stream, TimeoutException
30+
from .stream import Stream, TimeoutException
3031

3132
class SerialStream( Stream ):
3233
""" A stream using the pyserial interface """
@@ -57,9 +58,17 @@ def write( self, buf ):
5758
""" Write buf to the port
5859
buf - string or list of bytes
5960
"""
60-
if isinstance( buf, list ):
61-
buf = ''.join( [chr( c ) for c in buf] )
62-
self.port.write( buf )
61+
if isinstance( buf, list ) or isinstance( buf, str ):
62+
buf2 = list()
63+
for c in buf:
64+
if isinstance( c, str ):
65+
c = ord(c)
66+
buf2.append(c)
67+
logging.debug((type(buf2), buf2))
68+
self.port.write( buf2 )
69+
else:
70+
logging.warn("{} not converted by {}.write! Nothing sent..".format(type(buf),str(self)))
71+
6372
def get_read_timeout( self ):
6473
""" Get the read timeout """
6574
return self.port.timeout

Diff for: dynamixel/tests.py

+19-17
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121

2222
import unittest
2323

24-
import dynamixel
25-
import dynamixel_network
26-
import event_handler
27-
import stream
28-
import defs
24+
from . import dynamixel
25+
from . import dynamixel_network
26+
from . import event_handler
27+
from . import stream
28+
from . import defs
2929

30-
from defs import DEVICE
30+
from .defs import DEVICE
3131

3232
AX12 = DEVICE['AX12']
3333

@@ -259,7 +259,7 @@ def test_read_data( self ):
259259
# verify read data
260260
istream.append( make_packet( 1, 0, [0x20]))
261261
result = iface._read_data( 1, 0x2b, 1 )
262-
self.assertEqual( istream.obuffer, ''.join((map(chr,[0xff,0xff,0x1,0x4,0x2,0x2b,0x1,0xcc]))))
262+
self.assertEqual( istream.obuffer, ''.join((list(map(chr,[0xff,0xff,0x1,0x4,0x2,0x2b,0x1,0xcc])))))
263263
self.assertEqual( result, [0x20])
264264

265265
def test_read_register( self ):
@@ -272,7 +272,7 @@ def test_read_register( self ):
272272
# verify read data
273273
istream.append( make_packet( 1, 0, [0x20]))
274274
result = iface.read_register( 1, 0x2b)
275-
self.assertEqual( istream.obuffer, ''.join((map(chr,[0xff,0xff,0x1,0x4,0x2,0x2b,0x1,0xcc]))))
275+
self.assertEqual( istream.obuffer, ''.join((list(map(chr,[0xff,0xff,0x1,0x4,0x2,0x2b,0x1,0xcc])))))
276276
self.assertEqual( result, 0x20)
277277

278278
def test_read_registers( self ):
@@ -283,10 +283,10 @@ def test_read_registers( self ):
283283
self.reset()
284284
istream.append( make_packet( 1, 0, [0x20]))
285285
# dummy packet full range of eeprom
286-
istream.append( make_packet( 1, 0, range(0,50) ))
286+
istream.append( make_packet( 1, 0, list(range(0,50)) ))
287287
result = iface.read_registers( 1, AX12.ModelNumber, AX12.Punch)
288288
# assert only the number of registers are returned
289-
self.assertEqual( len( result ), len(AX12.values()) )
289+
self.assertEqual( len( result ), len(list(AX12.values())) )
290290
# TODO possibly add test for values of registers in future
291291

292292
def test_write_data( self ):
@@ -298,7 +298,7 @@ def test_write_data( self ):
298298
self.reset()
299299
# verify write as per Spec
300300
iface.write_data( dynamixel_network.DynamixelInterface.BROADCAST_ID, 0x3,[0x1], False )
301-
self.assertEqual( istream.obuffer, ''.join((map(chr,[0xff,0xff,0xfe,0x4,0x3,0x3,0x1,0xf6]))))
301+
self.assertEqual( istream.obuffer, ''.join((list(map(chr,[0xff,0xff,0xfe,0x4,0x3,0x3,0x1,0xf6])))))
302302
def test_write_register( self ):
303303
istream = MockStream()
304304
iface = dynamixel_network.DynamixelInterface( istream )
@@ -308,7 +308,7 @@ def test_write_register( self ):
308308

309309
# verify write as per variant of spec
310310
iface.write_register( 0x1, 0x3,0x1, True )
311-
self.assertEqual( istream.obuffer, ''.join((map(chr,[0xff,0xff,0x1,0x4,0x4,0x3,0x1,0xf2]))))
311+
self.assertEqual( istream.obuffer, ''.join((list(map(chr,[0xff,0xff,0x1,0x4,0x4,0x3,0x1,0xf2])))))
312312

313313
def test_action( self ):
314314
istream = MockStream()
@@ -318,7 +318,7 @@ def test_action( self ):
318318
self.reset()
319319
# verify outgoing action command
320320
iface.action( )
321-
self.assertEqual( istream.obuffer, ''.join((map(chr,[0xff,0xff,0xfe,0x2,0x5,0xfa]))))
321+
self.assertEqual( istream.obuffer, ''.join((list(map(chr,[0xff,0xff,0xfe,0x2,0x5,0xfa])))))
322322

323323
def test_sync_write( self ):
324324
istream = MockStream()
@@ -331,17 +331,18 @@ def test_sync_write( self ):
331331
0X01, 0X20, 0X02, 0X60, 0X03, 0X02,
332332
0X30, 0X00, 0X70, 0X01, 0X03,
333333
0X20, 0X02, 0X80, 0X03])
334-
expected = ''.join((map(chr, [0XFF, 0XFF, 0XFE, 0X18, 0X83, 0X1E,
334+
expected = ''.join((list(map(chr, [0XFF, 0XFF, 0XFE, 0X18, 0X83, 0X1E,
335335
0X04, 0X00, 0X10, 0X00, 0X50, 0X01,
336336
0X01, 0X20, 0X02, 0X60, 0X03, 0X02,
337337
0X30, 0X00, 0X70, 0X01, 0X03,
338-
0X20, 0X02, 0X80, 0X03, 0X12])))
338+
0X20, 0X02, 0X80, 0X03, 0X12]))))
339339
self.assertEqual( istream.obuffer, expected)
340340

341341

342342

343-
def error_handler(self, sender, (ident, error_status)):
343+
def error_handler(self, sender, xxx_todo_changeme):
344344
""" Error handler hook """
345+
(ident, error_status) = xxx_todo_changeme
345346
self.has_errors = True
346347
self.error_codes.append( error_status )
347348

@@ -437,8 +438,9 @@ def test_get_attr(self):
437438

438439

439440

440-
def error_handler(self, sender, (ident, error_status)):
441+
def error_handler(self, sender, xxx_todo_changeme1):
441442
""" Error handler hook """
443+
(ident, error_status) = xxx_todo_changeme1
442444
self.has_errors = True
443445
self.error_codes.append( error_status )
444446

0 commit comments

Comments
 (0)