From bf2e4e2960212c762186364f5726a73c8c1eb421 Mon Sep 17 00:00:00 2001 From: scls19fr Date: Thu, 26 Nov 2015 21:46:03 +0100 Subject: [PATCH] Python 2/3 support --- pingo/__init__.py | 56 ++++++++++++++++-------------- pingo/arduino/__init__.py | 8 ++--- pingo/arduino/firmata.py | 2 +- pingo/arduino/pyun.py | 2 +- pingo/arduino/test_util_firmata.py | 2 +- pingo/bbb/__init__.py | 2 +- pingo/compat.py | 25 +++++++++++++ pingo/detect/__init__.py | 2 +- pingo/detect/test_detect.py | 2 +- pingo/ghost/__init__.py | 2 +- pingo/ghost/ghost.py | 4 +-- pingo/intel/__init__.py | 4 +-- pingo/parts/serial/__init__.py | 2 +- pingo/parts/spi/__init__.py | 2 +- pingo/parts/spi/mcp3008.py | 2 +- pingo/pcduino/__init__.py | 2 +- pingo/rpi/__init__.py | 8 ++--- pingo/test/__init__.py | 6 ++-- pingo/test/level0/__init__.py | 4 +-- pingo/test/level1/__init__.py | 4 +-- pingo/test/level2/__init__.py | 4 +-- pingo/test_utils.py | 4 +-- pingo/udoo/__init__.py | 2 +- pingo/util.py | 7 ++-- 24 files changed, 92 insertions(+), 66 deletions(-) create mode 100644 pingo/compat.py diff --git a/pingo/__init__.py b/pingo/__init__.py index 2ad3e29..44eec99 100644 --- a/pingo/__init__.py +++ b/pingo/__init__.py @@ -1,32 +1,34 @@ +from __future__ import absolute_import + # api -from board import ANALOG # noqa -from board import IN # noqa -from board import OUT # noqa -from board import PWM # noqa -from board import HIGH # noqa -from board import LOW # noqa -from board import ModeNotSuported # noqa -from board import WrongPinMode # noqa -from board import PwmOutputCapable # noqa -from board import AnalogInputCapable # noqa -from board import Board # noqa -from board import PwmPin # noqa -from board import AnalogPin # noqa -from board import DigitalPin # noqa -from board import GroundPin # noqa -from board import Pin # noqa -from board import VccPin # noqa -import parts # noqa +from .board import ANALOG # noqa +from .board import IN # noqa +from .board import OUT # noqa +from .board import PWM # noqa +from .board import HIGH # noqa +from .board import LOW # noqa +from .board import ModeNotSuported # noqa +from .board import WrongPinMode # noqa +from .board import PwmOutputCapable # noqa +from .board import AnalogInputCapable # noqa +from .board import Board # noqa +from .board import PwmPin # noqa +from .board import AnalogPin # noqa +from .board import DigitalPin # noqa +from .board import GroundPin # noqa +from .board import Pin # noqa +from .board import VccPin # noqa +import pingo.parts #import * # noqa # boards -import rpi # noqa -import ghost # noqa -import intel # noqa -import udoo # noqa -import pcduino # noqa -import arduino # noqa -import bbb # noqa +import pingo.rpi # noqa +import pingo.ghost # noqa +import pingo.intel # noqa +import pingo.udoo # noqa +import pingo.pcduino # noqa +import pingo.arduino # noqa +import pingo.bbb # noqa # resources -import detect # noqa -import test # noqa +import pingo.detect # noqa +import pingo.test # noqa diff --git a/pingo/arduino/__init__.py b/pingo/arduino/__init__.py index 6e45239..89d4f20 100644 --- a/pingo/arduino/__init__.py +++ b/pingo/arduino/__init__.py @@ -1,4 +1,4 @@ -from firmata import ArduinoFirmata # noqa -from firmata import get_arduino # noqa -from pyun import YunBridge # noqa -from pyun import ArduinoYun # noqa +from .firmata import ArduinoFirmata # noqa +from .firmata import get_arduino # noqa +from .pyun import YunBridge # noqa +from .pyun import ArduinoYun # noqa diff --git a/pingo/arduino/firmata.py b/pingo/arduino/firmata.py index eb1e5ea..ab5b278 100644 --- a/pingo/arduino/firmata.py +++ b/pingo/arduino/firmata.py @@ -11,7 +11,7 @@ from pingo.board import Board, DigitalPin, AnalogPin, PwmPin from pingo.board import AnalogInputCapable, PwmOutputCapable from pingo.detect import detect -from util_firmata import pin_list_to_board_dict +from .util_firmata import pin_list_to_board_dict PyMata = None diff --git a/pingo/arduino/pyun.py b/pingo/arduino/pyun.py index 240beba..4e29fb3 100644 --- a/pingo/arduino/pyun.py +++ b/pingo/arduino/pyun.py @@ -47,7 +47,7 @@ def makeURL(self, command, pin, *args): else: url = self.base_url + '%s/%d' % (command, pin) if self.verbose: - print '[YunBridge] url: ', url + print('[YunBridge] url: %s' % url) return url def get(self, command, pin, *args): diff --git a/pingo/arduino/test_util_firmata.py b/pingo/arduino/test_util_firmata.py index 47ba150..5f91ee5 100644 --- a/pingo/arduino/test_util_firmata.py +++ b/pingo/arduino/test_util_firmata.py @@ -1,6 +1,6 @@ import unittest -from util_firmata import pin_list_to_board_dict +from .util_firmata import pin_list_to_board_dict class FirmataCapabilityDetect(unittest.TestCase): diff --git a/pingo/bbb/__init__.py b/pingo/bbb/__init__.py index 637b257..d4c8632 100644 --- a/pingo/bbb/__init__.py +++ b/pingo/bbb/__init__.py @@ -1 +1 @@ -from bbb import BeagleBoneBlack # noqa +from .bbb import BeagleBoneBlack # noqa diff --git a/pingo/compat.py b/pingo/compat.py new file mode 100644 index 0000000..0ca1a1f --- /dev/null +++ b/pingo/compat.py @@ -0,0 +1,25 @@ +import sys + +PY2 = sys.version_info[0] == 2 +PY3 = (sys.version_info[0] >= 3) + +def iteritems(obj, **kwargs): + """replacement for six's iteritems for Python2/3 compat + uses 'iteritems' if available and otherwise uses 'items'. + Passes kwargs to method. + """ + func = getattr(obj, "iteritems", None) + if not func: + func = obj.items + return func(**kwargs) + +def iterkeys(obj, **kwargs): + func = getattr(obj, "iterkeys", None) + if not func: + func = obj.keys + return func(**kwargs) + +if PY2: + from UserDict import UserDict +else: + from collections import UserDict diff --git a/pingo/detect/__init__.py b/pingo/detect/__init__.py index 912d0a5..abd0b71 100644 --- a/pingo/detect/__init__.py +++ b/pingo/detect/__init__.py @@ -1,4 +1,4 @@ -from detect import get_board +from .detect import get_board def has_module(module_name): diff --git a/pingo/detect/test_detect.py b/pingo/detect/test_detect.py index ffc9481..ec00c73 100644 --- a/pingo/detect/test_detect.py +++ b/pingo/detect/test_detect.py @@ -2,7 +2,7 @@ import platform import pingo -import detect +import pingo.detect class DetectBasics(unittest.TestCase): diff --git a/pingo/ghost/__init__.py b/pingo/ghost/__init__.py index 220e258..9e5e17c 100644 --- a/pingo/ghost/__init__.py +++ b/pingo/ghost/__init__.py @@ -1 +1 @@ -from ghost import GhostBoard # noqa +from .ghost import GhostBoard # noqa diff --git a/pingo/ghost/ghost.py b/pingo/ghost/ghost.py index 4d5a9f9..a8968ae 100644 --- a/pingo/ghost/ghost.py +++ b/pingo/ghost/ghost.py @@ -1,5 +1,5 @@ import pingo - +from pingo.compat import iteritems class GhostBoard( pingo.Board, @@ -48,7 +48,7 @@ def __init__(self, filepath=None): self._pin_states = pingo.util.StrKeyDict() # All pins start on LOW # FIXME: use "LOW" instead of 0 - for location, pin in self.pins.iteritems(): + for location, pin in iteritems(self.pins): self._pin_states[location] = 0 if hasattr(pin, 'state') else None # Pin 8 starts on HIGH diff --git a/pingo/intel/__init__.py b/pingo/intel/__init__.py index 3ca067b..aad7c74 100644 --- a/pingo/intel/__init__.py +++ b/pingo/intel/__init__.py @@ -1,2 +1,2 @@ -from intel import Galileo2 # noqa -from intel import Edison # noqa +from .intel import Galileo2 # noqa +from .intel import Edison # noqa diff --git a/pingo/parts/serial/__init__.py b/pingo/parts/serial/__init__.py index 8343f95..38fbe2e 100644 --- a/pingo/parts/serial/__init__.py +++ b/pingo/parts/serial/__init__.py @@ -1 +1 @@ -from lcd import LCD16x2 # noqa +from .lcd import LCD16x2 # noqa diff --git a/pingo/parts/spi/__init__.py b/pingo/parts/spi/__init__.py index 847dda5..d869c3b 100644 --- a/pingo/parts/spi/__init__.py +++ b/pingo/parts/spi/__init__.py @@ -1 +1 @@ -from mcp3008 import Mcp3008 # noqa +from .mcp3008 import Mcp3008 # noqa diff --git a/pingo/parts/spi/mcp3008.py b/pingo/parts/spi/mcp3008.py index f037255..8a30ddb 100644 --- a/pingo/parts/spi/mcp3008.py +++ b/pingo/parts/spi/mcp3008.py @@ -64,7 +64,7 @@ def test(): res = ad_chip.read(1) volts = float(res) / 1023 * 3.3 ticks = int(round(float(res) / 1023 * 40)) * '=' - print display.format(count, res, volts, ticks) + print(display.format(count, res, volts, ticks)) time.sleep(.2) count += 1 diff --git a/pingo/pcduino/__init__.py b/pingo/pcduino/__init__.py index 6a7c843..1198f63 100644 --- a/pingo/pcduino/__init__.py +++ b/pingo/pcduino/__init__.py @@ -1 +1 @@ -from pcduino import PcDuino # noqa +from .pcduino import PcDuino # noqa diff --git a/pingo/rpi/__init__.py b/pingo/rpi/__init__.py index f6ec5ee..1169669 100644 --- a/pingo/rpi/__init__.py +++ b/pingo/rpi/__init__.py @@ -1,4 +1,4 @@ -from rpi import RaspberryPi # noqa -from rpi import RaspberryPiBPlus # noqa -from rpi import RaspberryPi2B # noqa -from grove import GrovePi # noqa +from .rpi import RaspberryPi # noqa +from .rpi import RaspberryPiBPlus # noqa +from .rpi import RaspberryPi2B # noqa +from .grove import GrovePi # noqa diff --git a/pingo/test/__init__.py b/pingo/test/__init__.py index 4ec2b54..d90a41f 100644 --- a/pingo/test/__init__.py +++ b/pingo/test/__init__.py @@ -1,3 +1,3 @@ -import level0 # noqa -import level1 # noqa -import level2 # noqa +import pingo.test.level0 # noqa +import pingo.test.level1 # noqa +import pingo.test.level2 # noqa diff --git a/pingo/test/level0/__init__.py b/pingo/test/level0/__init__.py index 245d9e7..72c7cac 100644 --- a/pingo/test/level0/__init__.py +++ b/pingo/test/level0/__init__.py @@ -1,2 +1,2 @@ -from cases import BoardBasics # noqa -from cases import BoardExceptions # noqa +from .cases import BoardBasics # noqa +from .cases import BoardExceptions # noqa diff --git a/pingo/test/level1/__init__.py b/pingo/test/level1/__init__.py index 8073b13..189b11c 100644 --- a/pingo/test/level1/__init__.py +++ b/pingo/test/level1/__init__.py @@ -1,2 +1,2 @@ -from cases import AnalogReadBasics # noqa -from cases import AnalogExceptions # noqa +from .cases import AnalogReadBasics # noqa +from .cases import AnalogExceptions # noqa diff --git a/pingo/test/level2/__init__.py b/pingo/test/level2/__init__.py index 4d955af..a82daca 100644 --- a/pingo/test/level2/__init__.py +++ b/pingo/test/level2/__init__.py @@ -1,2 +1,2 @@ -from cases import PwmBasics # noqa -from cases import PwmExceptions # noqa +from .cases import PwmBasics # noqa +from .cases import PwmExceptions # noqa diff --git a/pingo/test_utils.py b/pingo/test_utils.py index 3057fec..c6dcfdb 100644 --- a/pingo/test_utils.py +++ b/pingo/test_utils.py @@ -1,12 +1,12 @@ import unittest -import util +from pingo.util import StrKeyDict class StrKeyDictTest(unittest.TestCase): def setUp(self): - self.d = util.StrKeyDict( + self.d = StrKeyDict( [('2', 'two'), ('4', 'four')] ) diff --git a/pingo/udoo/__init__.py b/pingo/udoo/__init__.py index 313eae0..c981717 100644 --- a/pingo/udoo/__init__.py +++ b/pingo/udoo/__init__.py @@ -1 +1 @@ -from udoo import Udoo # noqa +from .udoo import Udoo # noqa diff --git a/pingo/util.py b/pingo/util.py index 985296d..c5af22a 100644 --- a/pingo/util.py +++ b/pingo/util.py @@ -1,8 +1,7 @@ import collections -import UserDict +from .compat import (UserDict, iterkeys) - -class StrKeyDict(UserDict.UserDict): +class StrKeyDict(UserDict): """StrKeyDict always converts non-string keys to `str` Tests for item retrieval using `d[key]` notation:: @@ -67,7 +66,7 @@ def __setitem__(self, key, item): self.data[self.normalize(key)] = item def __iter__(self): - return self.iterkeys() + return iterkeys(self) def update(self, iterable=None, **kwds): if iterable is not None: