Skip to content

Ran black, updated to pylint 2.x #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
47 changes: 28 additions & 19 deletions adafruit_tlc5947.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,11 @@
# Globally disable protected access. Ppylint can't figure out the
# context for using internal decorate classes below. In these cases protectected
# access is by design for the internal class.
#pylint: disable=protected-access
# pylint: disable=protected-access

_CHANNELS = 24
_STOREBYTES = _CHANNELS + _CHANNELS//2
_STOREBYTES = _CHANNELS + _CHANNELS // 2


class TLC5947:
"""TLC5947 12-bit 24 channel LED PWM driver. Create an instance of this by
Expand Down Expand Up @@ -105,7 +106,9 @@ def duty_cycle(self):
@duty_cycle.setter
def duty_cycle(self, val):
if val < 0 or val > 65535:
raise ValueError("PWM intensity {0} outside supported range [0;65535]".format(val))
raise ValueError(
"PWM intensity {0} outside supported range [0;65535]".format(val)
)
# Convert to 12-bit value (quantization error will occur!).
val = (val >> 4) & 0xFFF
self._tlc5947._set_gs_value(self._channel, val)
Expand All @@ -121,16 +124,18 @@ def frequency(self):
# pylint bug misidentifies the following as a regular function instead
# of the associated setter: https://github.com/PyCQA/pylint/issues/870
# Must disable a few checks to make pylint happy (ugh).
#pylint: disable=no-self-use,unused-argument
# pylint: disable=no-self-use,unused-argument
@frequency.setter
def frequency(self, val):
raise RuntimeError('Cannot set TLC5947 PWM frequency!')
#pylint: enable=no-self-use,unused-argument
raise RuntimeError("Cannot set TLC5947 PWM frequency!")

# pylint: enable=no-self-use,unused-argument

def __init__(self, spi, latch, *, auto_write=True, num_drivers=1):
if num_drivers < 1:
raise ValueError("Need at least one driver; {0} is not supported.".format(num_drivers))
raise ValueError(
"Need at least one driver; {0} is not supported.".format(num_drivers)
)
self._spi = spi
self._latch = latch
self._latch.switch_to_output(value=False)
Expand All @@ -157,7 +162,7 @@ def write(self):
# First ensure latch is low.
self._latch.value = False
# Write out the bits.
self._spi.write(self._shift_reg, start=0, end=_STOREBYTES*self._n +1)
self._spi.write(self._shift_reg, start=0, end=_STOREBYTES * self._n + 1)
# Then toggle latch high and low to set the value.
self._latch.value = True
self._latch.value = False
Expand All @@ -170,7 +175,8 @@ def _get_gs_value(self, channel):
# Disable should be removed when refactor can be tested
if channel < 0 or channel >= _CHANNELS * self._n:
raise ValueError(
"Channel {0} not available with {1} board(s).".format(channel, self._n))
"Channel {0} not available with {1} board(s).".format(channel, self._n)
)
# Invert channel position as the last channel needs to be written first.
# I.e. is in the first position of the shift registr.
channel = _CHANNELS * self._n - 1 - channel
Expand All @@ -182,7 +188,7 @@ def _get_gs_value(self, channel):
start_offset = bit_offset % 8
# Grab the high and low bytes.
high_byte = self._shift_reg[byte_start]
low_byte = self._shift_reg[byte_start+1]
low_byte = self._shift_reg[byte_start + 1]
if start_offset == 4:
# Value starts in the lower 4 bits of the high bit so you can
# just concat high with low byte and return the 12-bit value.
Expand All @@ -192,14 +198,17 @@ def _get_gs_value(self, channel):
# 4 bits of low byte. Shift low byte and concat values.
return ((high_byte << 4) | (low_byte >> 4)) & 0xFFF
else:
raise RuntimeError('Unsupported bit offset!')
raise RuntimeError("Unsupported bit offset!")

def _set_gs_value(self, channel, val):
if channel < 0 or channel >= _CHANNELS * self._n:
raise ValueError(
"Channel {0} not available with {1} board(s).".format(channel, self._n))
"Channel {0} not available with {1} board(s).".format(channel, self._n)
)
if val < 0 or val > 4095:
raise ValueError("PWM intensity {0} outside supported range [0;4095]".format(val))
raise ValueError(
"PWM intensity {0} outside supported range [0;4095]".format(val)
)

# Invert channel position as the last channel needs to be written first.
# I.e. is in the first position of the shift registr.
Expand All @@ -212,11 +221,11 @@ def _set_gs_value(self, channel, val):
start_offset = bit_offset % 8
# Grab the high and low bytes.
high_byte = self._shift_reg[byte_start]
low_byte = self._shift_reg[byte_start+1]
low_byte = self._shift_reg[byte_start + 1]
if start_offset == 4:
# Value starts in the lower 4 bits of the high bit.
high_byte &= 0b11110000
high_byte |= (val >> 8)
high_byte |= val >> 8
low_byte = val & 0xFF
elif start_offset == 0:
# Value starts in the entire high byte and spills into upper
Expand All @@ -225,9 +234,9 @@ def _set_gs_value(self, channel, val):
low_byte &= 0b00001111
low_byte |= (val << 4) & 0xFF
else:
raise RuntimeError('Unsupported bit offset!')
raise RuntimeError("Unsupported bit offset!")
self._shift_reg[byte_start] = high_byte
self._shift_reg[byte_start+1] = low_byte
self._shift_reg[byte_start + 1] = low_byte
# Write the updated shift register values if required.
if self.auto_write:
self.write()
Expand Down Expand Up @@ -256,7 +265,7 @@ def __getitem__(self, key):
"""
if key < 0: # allow reverse adressing with negative index
key = key + _CHANNELS * self._n
return self._get_gs_value(key) # does parameter checking
return self._get_gs_value(key) # does parameter checking

def __setitem__(self, key, val):
"""Set the 12-bit PWM value (0-4095) for the specified channel (0-max).
Expand All @@ -267,4 +276,4 @@ def __setitem__(self, key, val):
"""
if key < 0: # allow reverse adressing with negative index
key = key + _CHANNELS * self._n
self._set_gs_value(key, val) # does parameter checking
self._set_gs_value(key, val) # does parameter checking
110 changes: 64 additions & 46 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,51 @@

import os
import sys
sys.path.insert(0, os.path.abspath('..'))

sys.path.insert(0, os.path.abspath(".."))

# -- General configuration ------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
'sphinx.ext.viewcode',
"sphinx.ext.autodoc",
"sphinx.ext.intersphinx",
"sphinx.ext.viewcode",
]

# Uncomment the below if you use native CircuitPython modules such as
# digitalio, micropython and busio. List the modules you use. Without it, the
# autodoc module docs will fail to generate with a warning.
# autodoc_mock_imports = ["digitalio", "busio"]

intersphinx_mapping = {'python': ('https://docs.python.org/3.4', None),'CircuitPython': ('https://circuitpython.readthedocs.io/en/latest/', None)}
intersphinx_mapping = {
"python": ("https://docs.python.org/3.4", 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 TLC5947 Library'
copyright = u'2017 Tony DiCola'
author = u'Tony DiCola'
project = u"Adafruit TLC5947 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.
Expand All @@ -54,7 +58,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.
Expand All @@ -66,7 +70,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
Expand All @@ -80,68 +84,76 @@
# 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 = 'AdafruitTlc5947Librarydoc'
htmlhelp_basename = "AdafruitTlc5947Librarydoc"

# -- 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, 'AdafruitTLC5947Library.tex', u'AdafruitTLC5947 Library Documentation',
author, 'manual'),
(
master_doc,
"AdafruitTLC5947Library.tex",
u"AdafruitTLC5947 Library Documentation",
author,
"manual",
),
]

# -- Options for manual page output ---------------------------------------

# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'AdafruitTLC5947library', u'Adafruit TLC5947 Library Documentation',
[author], 1)
(
master_doc,
"AdafruitTLC5947library",
u"Adafruit TLC5947 Library Documentation",
[author],
1,
)
]

# -- Options for Texinfo output -------------------------------------------
Expand All @@ -150,7 +162,13 @@
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'AdafruitTLC5947Library', u'Adafruit TLC5947 Library Documentation',
author, 'AdafruitTLC5947Library', 'One line description of project.',
'Miscellaneous'),
(
master_doc,
"AdafruitTLC5947Library",
u"Adafruit TLC5947 Library Documentation",
author,
"AdafruitTLC5947Library",
"One line description of project.",
"Miscellaneous",
),
]
Loading