From 63b161baaefdaa08f2607a8d3fa60cf8f837f47c Mon Sep 17 00:00:00 2001 From: dherrada Date: Mon, 16 Mar 2020 16:45:02 -0400 Subject: [PATCH] Ran black, updated to pylint 2.x --- .github/workflows/build.yml | 2 +- adafruit_mcp230xx/digital_inout.py | 13 ++- adafruit_mcp230xx/mcp23008.py | 24 ++--- adafruit_mcp230xx/mcp23017.py | 36 +++---- docs/conf.py | 114 ++++++++++++-------- examples/mcp230xx_event_detect_interrupt.py | 22 ++-- examples/mcp230xx_leds_and_buttons.py | 8 +- examples/mcp230xx_leds_and_buttons_irq.py | 14 +-- examples/mcp230xx_simpletest.py | 9 +- setup.py | 50 ++++----- 10 files changed, 156 insertions(+), 136 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fff3aa9..1dad804 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,7 +40,7 @@ jobs: source actions-ci/install.sh - name: Pip install pylint, black, & Sphinx run: | - pip install --force-reinstall pylint==1.9.2 black==19.10b0 Sphinx sphinx-rtd-theme + pip install --force-reinstall pylint black==19.10b0 Sphinx sphinx-rtd-theme - name: Library version run: git describe --dirty --always --tags - name: PyLint diff --git a/adafruit_mcp230xx/digital_inout.py b/adafruit_mcp230xx/digital_inout.py index d8ea6b0..c1205f0 100644 --- a/adafruit_mcp230xx/digital_inout.py +++ b/adafruit_mcp230xx/digital_inout.py @@ -38,9 +38,11 @@ def _get_bit(val, bit): return val & (1 << bit) > 0 + def _enable_bit(val, bit): return val | (1 << bit) + def _clear_bit(val, bit): return val & ~(1 << bit) @@ -63,7 +65,7 @@ def __init__(self, pin_number, mcp230xx): # with DigitalInout class (which allows specifying pull, etc. which # is unused by this class). Do not remove them, instead turn off pylint # in this case. - #pylint: disable=unused-argument + # pylint: disable=unused-argument def switch_to_output(self, value=False, **kwargs): """Switch the pin state to a digital output with the provided starting value (True/False for high or low, default is False/low). @@ -78,7 +80,8 @@ def switch_to_input(self, pull=None, **kwargs): """ self.direction = digitalio.Direction.INPUT self.pull = pull - #pylint: enable=unused-argument + + # pylint: enable=unused-argument @property def value(self): @@ -111,7 +114,7 @@ def direction(self, val): elif val == digitalio.Direction.OUTPUT: self._mcp.iodir = _clear_bit(self._mcp.iodir, self._pin) else: - raise ValueError('Expected INPUT or OUTPUT direction!') + raise ValueError("Expected INPUT or OUTPUT direction!") @property def pull(self): @@ -130,6 +133,6 @@ def pull(self, val): elif val == digitalio.Pull.UP: self._mcp.gppu = _enable_bit(self._mcp.gppu, self._pin) elif val == digitalio.Pull.DOWN: - raise ValueError('Pull-down resistors are not supported!') + raise ValueError("Pull-down resistors are not supported!") else: - raise ValueError('Expected UP, DOWN, or None for pull state!') + raise ValueError("Expected UP, DOWN, or None for pull state!") diff --git a/adafruit_mcp230xx/mcp23008.py b/adafruit_mcp230xx/mcp23008.py index c9933dd..c11dfae 100644 --- a/adafruit_mcp230xx/mcp23008.py +++ b/adafruit_mcp230xx/mcp23008.py @@ -37,17 +37,17 @@ __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MCP230xx.git" # pylint: disable=bad-whitespace -_MCP23008_ADDRESS = const(0x20) -_MCP23008_IODIR = const(0x00) -_MCP23008_IPOL = const(0x01) -_MCP23008_GPINTEN = const(0x02) -_MCP23008_DEFVAL = const(0x03) -_MCP23008_INTCON = const(0x04) -_MCP23008_IOCON = const(0x05) -_MCP23008_GPPU = const(0x06) -_MCP23008_INTF = const(0x07) -_MCP23008_INTCAP = const(0x08) -_MCP23008_GPIO = const(0x09) +_MCP23008_ADDRESS = const(0x20) +_MCP23008_IODIR = const(0x00) +_MCP23008_IPOL = const(0x01) +_MCP23008_GPINTEN = const(0x02) +_MCP23008_DEFVAL = const(0x03) +_MCP23008_INTCON = const(0x04) +_MCP23008_IOCON = const(0x05) +_MCP23008_GPPU = const(0x06) +_MCP23008_INTF = const(0x07) +_MCP23008_INTCAP = const(0x08) +_MCP23008_GPIO = const(0x09) class MCP23008(MCP230XX): @@ -60,7 +60,7 @@ def __init__(self, i2c, address=_MCP23008_ADDRESS): # Reset to all inputs with no pull-ups and no inverted polarity. self.iodir = 0xFF - self.gppu = 0x00 + self.gppu = 0x00 self._write_u8(_MCP23008_IPOL, 0x00) @property diff --git a/adafruit_mcp230xx/mcp23017.py b/adafruit_mcp230xx/mcp23017.py index 250774c..a2d216e 100644 --- a/adafruit_mcp230xx/mcp23017.py +++ b/adafruit_mcp230xx/mcp23017.py @@ -37,22 +37,22 @@ __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MCP230xx.git" # pylint: disable=bad-whitespace -_MCP23017_ADDRESS = const(0x20) -_MCP23017_IODIRA = const(0x00) -_MCP23017_IODIRB = const(0x01) -_MCP23017_IPOLA = const(0x02) -_MCP23017_GPINTENA = const(0x04) -_MCP23017_DEFVALA = const(0x06) -_MCP23017_INTCONA = const(0x08) -_MCP23017_IOCON = const(0x0A) -_MCP23017_GPPUA = const(0x0C) -_MCP23017_GPPUB = const(0x0D) -_MCP23017_GPIOA = const(0x12) -_MCP23017_GPIOB = const(0x13) -_MCP23017_INTFA = const(0x0E) -_MCP23017_INTFB = const(0x0F) -_MCP23017_INTCAPA = const(0x10) -_MCP23017_INTCAPB = const(0x11) +_MCP23017_ADDRESS = const(0x20) +_MCP23017_IODIRA = const(0x00) +_MCP23017_IODIRB = const(0x01) +_MCP23017_IPOLA = const(0x02) +_MCP23017_GPINTENA = const(0x04) +_MCP23017_DEFVALA = const(0x06) +_MCP23017_INTCONA = const(0x08) +_MCP23017_IOCON = const(0x0A) +_MCP23017_GPPUA = const(0x0C) +_MCP23017_GPPUB = const(0x0D) +_MCP23017_GPIOA = const(0x12) +_MCP23017_GPIOB = const(0x13) +_MCP23017_INTFA = const(0x0E) +_MCP23017_INTFB = const(0x0F) +_MCP23017_INTCAPA = const(0x10) +_MCP23017_INTCAPB = const(0x11) class MCP23017(MCP230XX): @@ -65,7 +65,7 @@ def __init__(self, i2c, address=_MCP23017_ADDRESS): # Reset to all inputs with no pull-ups and no inverted polarity. self.iodir = 0xFFFF self.gppu = 0x0000 - self.iocon = 0x4 # turn on IRQ Pins as open drain + self.iocon = 0x4 # turn on IRQ Pins as open drain self._write_u16le(_MCP23017_IPOLA, 0x0000) @property @@ -263,7 +263,7 @@ def int_flagb(self): pins: 8-15 """ intfb = self._read_u8(_MCP23017_INTFB) - flags = [pin+8 for pin in range(8) if intfb & (1 << pin)] + flags = [pin + 8 for pin in range(8) if intfb & (1 << pin)] return flags def clear_ints(self): diff --git a/docs/conf.py b/docs/conf.py index 030711b..07a833b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -2,7 +2,8 @@ import os import sys -sys.path.insert(0, os.path.abspath('..')) + +sys.path.insert(0, os.path.abspath("..")) # -- General configuration ------------------------------------------------ @@ -10,10 +11,10 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", #'sphinx.ext.napoleon' - 'sphinx.ext.todo', + "sphinx.ext.todo", ] # TODO: Please Read! @@ -23,29 +24,36 @@ autodoc_mock_imports = ["micropython", "adafruit_bus_device", "digitalio"] -intersphinx_mapping = {'python': ('https://docs.python.org/3.4', None),'BusDevice': ('https://circuitpython.readthedocs.io/projects/busdevice/en/latest/', None),'CircuitPython': ('https://circuitpython.readthedocs.io/en/latest/', None)} +intersphinx_mapping = { + "python": ("https://docs.python.org/3.4", None), + "BusDevice": ( + "https://circuitpython.readthedocs.io/projects/busdevice/en/latest/", + None, + ), + "CircuitPython": ("https://circuitpython.readthedocs.io/en/latest/", None), +} # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = u'Adafruit MCP230xx Library' -copyright = u'2017 Tony DiCola' -author = u'Tony DiCola' +project = u"Adafruit MCP230xx Library" +copyright = u"2017 Tony DiCola" +author = u"Tony DiCola" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = u'1.0' +version = u"1.0" # The full version, including alpha/beta/rc tags. -release = u'1.0' +release = u"1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -57,7 +65,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '.env', 'CODE_OF_CONDUCT.md'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", ".env", "CODE_OF_CONDUCT.md"] # The reST default role (used for this markup: `text`) to use for all # documents. @@ -69,7 +77,7 @@ add_function_parentheses = True # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -84,59 +92,62 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' +on_rtd = os.environ.get("READTHEDOCS", None) == "True" if not on_rtd: # only import and set the theme if we're building docs locally try: import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path(), '.'] + + html_theme = "sphinx_rtd_theme" + html_theme_path = [sphinx_rtd_theme.get_html_theme_path(), "."] except: - html_theme = 'default' - html_theme_path = ['.'] + html_theme = "default" + html_theme_path = ["."] else: - html_theme_path = ['.'] + html_theme_path = ["."] # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # -html_favicon = '_static/favicon.ico' +html_favicon = "_static/favicon.ico" # Output file base name for HTML help builder. -htmlhelp_basename = 'AdafruitMcp230xxLibrarydoc' +htmlhelp_basename = "AdafruitMcp230xxLibrarydoc" # -- Options for LaTeX output --------------------------------------------- latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'AdafruitMCP230xxLibrary.tex', u'AdafruitMCP230xx Library Documentation', - author, 'manual'), + ( + master_doc, + "AdafruitMCP230xxLibrary.tex", + u"AdafruitMCP230xx Library Documentation", + author, + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -144,8 +155,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'AdafruitMCP230xxlibrary', u'Adafruit MCP230xx Library Documentation', - [author], 1) + ( + master_doc, + "AdafruitMCP230xxlibrary", + u"Adafruit MCP230xx Library Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -154,7 +170,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'AdafruitMCP230xxLibrary', u'Adafruit MCP230xx Library Documentation', - author, 'AdafruitMCP230xxLibrary', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "AdafruitMCP230xxLibrary", + u"Adafruit MCP230xx Library Documentation", + author, + "AdafruitMCP230xxLibrary", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/examples/mcp230xx_event_detect_interrupt.py b/examples/mcp230xx_event_detect_interrupt.py index f7f9ff7..9a11e4a 100644 --- a/examples/mcp230xx_event_detect_interrupt.py +++ b/examples/mcp230xx_event_detect_interrupt.py @@ -14,7 +14,7 @@ # Optionally change the address of the device if you set any of the A0, A1, A2 # pins. Specify the new address with a keyword parameter: -#mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set +# mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set # Make a list of all the pins (a.k.a 0-16) pins = [] @@ -27,30 +27,32 @@ pin.pull = Pull.UP # Set up to check all the port B pins (pins 8-15) w/interrupts! -mcp.interrupt_enable = 0xFFFF # Enable Interrupts in all pins +mcp.interrupt_enable = 0xFFFF # Enable Interrupts in all pins # If intcon is set to 0's we will get interrupts on # both button presses and button releases -mcp.interrupt_configuration = 0x0000 # interrupt on any change -mcp.io_control = 0x44 # Interrupt as open drain and mirrored -mcp.clear_ints() # Interrupts need to be cleared initially +mcp.interrupt_configuration = 0x0000 # interrupt on any change +mcp.io_control = 0x44 # Interrupt as open drain and mirrored +mcp.clear_ints() # Interrupts need to be cleared initially # Or, we can ask to be notified CONTINUOUSLY if a pin goes LOW (button press) # we won't get an IRQ pulse when the pin is HIGH! -#mcp.interrupt_configuration = 0xFFFF # notify pin value -#mcp.default_value = 0xFFFF # default value is 'high' so notify whenever 'low' +# mcp.interrupt_configuration = 0xFFFF # notify pin value +# mcp.default_value = 0xFFFF # default value is 'high' so notify whenever 'low' + def print_interrupt(port): - '''Callback function to be called when an Interrupt occurs.''' + """Callback function to be called when an Interrupt occurs.""" for pin_flag in mcp.int_flag: print("Interrupt connected to Pin: {}".format(port)) print("Pin number: {} changed to: {}".format(pin_flag, pins[pin_flag].value)) mcp.clear_ints() + # connect either interrupt pin to the Raspberry pi's pin 17. # They were previously configured as mirrored. GPIO.setmode(GPIO.BCM) interrupt = 17 -GPIO.setup(interrupt, GPIO.IN, GPIO.PUD_UP) # Set up Pi's pin as input, pull up +GPIO.setup(interrupt, GPIO.IN, GPIO.PUD_UP) # Set up Pi's pin as input, pull up # The add_event_detect fuction will call our print_interrupt callback function # every time an interrupt gets triggered. @@ -63,7 +65,7 @@ def print_interrupt(port): # terminates it will always run GPIO.cleanup(). try: print("When button is pressed you'll see a message") - sleep(60) # You could run your main while loop here. + sleep(60) # You could run your main while loop here. print("Time's up. Finished!") finally: GPIO.cleanup() diff --git a/examples/mcp230xx_leds_and_buttons.py b/examples/mcp230xx_leds_and_buttons.py index 7ae7a69..21a0f5b 100644 --- a/examples/mcp230xx_leds_and_buttons.py +++ b/examples/mcp230xx_leds_and_buttons.py @@ -11,7 +11,7 @@ # Optionally change the address of the device if you set any of the A0, A1, A2 # pins. Specify the new address with a keyword parameter: -#mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set +# mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set # Make a list of all the port A pins (a.k.a 0-7) port_a_pins = [] @@ -33,7 +33,7 @@ pin.pull = Pull.UP # Turn on all port A pins for 1/10 of a second -#while True: +# while True: # for pin in port_a_pins: # pin.value = True # turn LED on! # time.sleep(0.1) # wait 0.1 seconds @@ -44,6 +44,6 @@ if not button.value: print("Button #", num, "pressed!") # turn on matching port A pin - port_a_pins[num].value = True # turn LED on! + port_a_pins[num].value = True # turn LED on! else: - port_a_pins[num].value = False # turn LED off + port_a_pins[num].value = False # turn LED off diff --git a/examples/mcp230xx_leds_and_buttons_irq.py b/examples/mcp230xx_leds_and_buttons_irq.py index ba4960b..6e55857 100644 --- a/examples/mcp230xx_leds_and_buttons_irq.py +++ b/examples/mcp230xx_leds_and_buttons_irq.py @@ -11,7 +11,7 @@ # Optionally change the address of the device if you set any of the A0, A1, A2 # pins. Specify the new address with a keyword parameter: -#mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set +# mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set # Make a list of all the port A pins (a.k.a 0-7) port_a_pins = [] @@ -33,15 +33,15 @@ pin.pull = Pull.UP # Set up to check all the port B pins (pins 8-15) w/interrupts! -mcp.interrupt_enable = 0xFF00 # INTerrupt ENable top 8 bits +mcp.interrupt_enable = 0xFF00 # INTerrupt ENable top 8 bits # If intcon is set to 0's we will get interrupts on # both button presses and button releases -mcp.interrupt_configuration = 0x0000 # interrupt on any change +mcp.interrupt_configuration = 0x0000 # interrupt on any change # Or, we can ask to be notified CONTINUOUSLY if a pin goes LOW (button press) # we won't get an IRQ pulse when the pin is HIGH! -#mcp.interrupt_configuration = 0xFF00 # notify pin value -#mcp.default_value = 0xFF00 # default value is 'high' so notify whenever 'low' +# mcp.interrupt_configuration = 0xFF00 # notify pin value +# mcp.default_value = 0xFF00 # default value is 'high' so notify whenever 'low' # connect the IRQ B pin to D4 irq_b = DigitalInOut(board.D4) @@ -53,6 +53,6 @@ if not button.value: print("Button #", num, "pressed!") # turn on matching port A pin - port_a_pins[num].value = True # turn LED on! + port_a_pins[num].value = True # turn LED on! else: - port_a_pins[num].value = False # turn LED off + port_a_pins[num].value = False # turn LED off diff --git a/examples/mcp230xx_simpletest.py b/examples/mcp230xx_simpletest.py index 891d7cb..72661fd 100644 --- a/examples/mcp230xx_simpletest.py +++ b/examples/mcp230xx_simpletest.py @@ -8,7 +8,8 @@ import digitalio from adafruit_mcp230xx.mcp23008 import MCP23008 -#from adafruit_mcp230xx.mcp23017 import MCP23017 + +# from adafruit_mcp230xx.mcp23017 import MCP23017 # Initialize the I2C bus: @@ -17,11 +18,11 @@ # Create an instance of either the MCP23008 or MCP23017 class depending on # which chip you're using: mcp = MCP23008(i2c) # MCP23008 -#mcp = MCP23017(i2c) # MCP23017 +# mcp = MCP23017(i2c) # MCP23017 # Optionally change the address of the device if you set any of the A0, A1, A2 # pins. Specify the new address with a keyword parameter: -#mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set +# mcp = MCP23017(i2c, address=0x21) # MCP23017 w/ A0 set # Now call the get_pin function to get an instance of a pin on the chip. # This instance will act just like a digitalio.DigitalInOut class instance @@ -48,4 +49,4 @@ pin0.value = False time.sleep(0.5) # Read pin 1 and print its state. - print('Pin 1 is at a high level: {0}'.format(pin1.value)) + print("Pin 1 is at a high level: {0}".format(pin1.value)) diff --git a/setup.py b/setup.py index 2196e0c..dd6a93e 100644 --- a/setup.py +++ b/setup.py @@ -7,6 +7,7 @@ # Always prefer setuptools over distutils from setuptools import setup, find_packages + # To use a consistent encoding from codecs import open from os import path @@ -14,47 +15,38 @@ here = path.abspath(path.dirname(__file__)) # Get the long description from the README file -with open(path.join(here, 'README.rst'), encoding='utf-8') as f: +with open(path.join(here, "README.rst"), encoding="utf-8") as f: long_description = f.read() setup( - name='adafruit-circuitpython-mcp230xx', - + name="adafruit-circuitpython-mcp230xx", use_scm_version=True, - setup_requires=['setuptools_scm'], - - description='CircuitPython library for controlling a MCP23008 or MCP23017 I2C GPIO expander.', + setup_requires=["setuptools_scm"], + description="CircuitPython library for controlling a MCP23008 or MCP23017 I2C GPIO expander.", long_description=long_description, - long_description_content_type='text/x-rst', - + long_description_content_type="text/x-rst", # The project's main homepage. - url='https://github.com/adafruit/Adafruit_CircuitPython_MCP230xx', - + url="https://github.com/adafruit/Adafruit_CircuitPython_MCP230xx", # Author details - author='Adafruit Industries', - author_email='circuitpython@adafruit.com', - - install_requires=['Adafruit-Blinka', 'adafruit-circuitpython-busdevice'], - + author="Adafruit Industries", + author_email="circuitpython@adafruit.com", + install_requires=["Adafruit-Blinka", "adafruit-circuitpython-busdevice"], # Choose your license - license='MIT', - + license="MIT", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Developers', - 'Topic :: Software Development :: Libraries', - 'Topic :: System :: Hardware', - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Hardware", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", ], - # What does your project relate to? - keywords='adafruit mcp23017 mcp23008 i2c gpio expander hardware micropython circuitpython', - + keywords="adafruit mcp23017 mcp23008 i2c gpio expander hardware micropython circuitpython", # You can just specify the packages manually here if your project is # simple. Or you can use find_packages(). - packages=['adafruit_mcp230xx'], + packages=["adafruit_mcp230xx"], )