Skip to content
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

Missing Type Annotations #14

Closed
1 task
FoamyGuy opened this issue Sep 27, 2021 · 5 comments · Fixed by #15
Closed
1 task

Missing Type Annotations #14

FoamyGuy opened this issue Sep 27, 2021 · 5 comments · Fixed by #15
Labels
documentation Improvements or additions to documentation good first issue Good for newcomers

Comments

@FoamyGuy
Copy link
Contributor

There are missing type annotations for some functions in this library.

The typing module does not exist on CircuitPython devices so the import needs to be wrapped in try/except to catch the error for missing import. There is an example of how that is done here:

try:
    from typing import List, Tuple
except ImportError:
    pass

Once imported the typing annotations for the argument type(s), and return type(s) can be added to the function signature. Here is an example of a function that has had this done already:

def wrap_text_to_pixels(
    string: str, max_width: int, font=None, indent0: str = "", indent1: str = ""
) -> List[str]:

If you are new to Git or Github we have a guide about contributing to our projects here: https://learn.adafruit.com/contribute-to-circuitpython-with-git-and-github

There is also a guide that covers our CI utilities and how to run them locally to ensure they will pass in Github Actions here: https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/check-your-code In particular the pages: Sharing docs on ReadTheDocs and Check your code with pre-commit contain the tools to install and commands to run locally to run the checks.

If you are attempting to resolve this issue and need help, you can post a comment on this issue and tag both @FoamyGuy and @kattni or reach out to us on Discord: https://adafru.it/discord in the #circuitpython-dev channel.

The following locations are reported by mypy to be missing type annotations:

  • adafruit_displayio_ssd1305.py:68
@FoamyGuy FoamyGuy added good first issue Good for newcomers documentation Improvements or additions to documentation labels Sep 27, 2021
@adafruit-adabot adafruit-adabot added the Hacktoberfest DigitalOcean's Hacktoberfest label Oct 26, 2021
@FoamyGuy FoamyGuy removed the Hacktoberfest DigitalOcean's Hacktoberfest label Nov 4, 2021
@tcfranks
Copy link
Contributor

tcfranks commented Sep 2, 2022

@FoamyGuy , @kattni , or @tekktrik

The init on this part is def init(self, bus, **kwargs) -> None

bus can be spi or i2c: in the past I've used displayio.I2C or displayio.Fourwire , so does this really make any difference here? or is there a better way to annotate 'bus'?

@FoamyGuy
Copy link
Contributor Author

FoamyGuy commented Sep 2, 2022

@tcfranks

Looking into the code it looks like bus gets passed along to the displayio.Display() constructor which in the docs here: https://docs.circuitpython.org/en/latest/shared-bindings/displayio/index.html?highlight=displayio.Display is typed as displayio._DisplayBus so I think it could match that here, though I'm unsure if the leading underscore means we shouldn't actually use that for the typing information in the library.

Another option, as you noted in the discord is using something like Union[I2C, FourWire] which I also think is good. Perhaps even better since it doesn't use anything "private" I would probably lean toward doing it this way to start and we can get input from others.

Perhaps there should be something in circuitpython_typing for this ultimately as well.

@tekktrik
Copy link
Member

tekktrik commented Sep 2, 2022

We could probably even have it directly in the Blinka displayio library. The only example I see is a FourWire, are there any I2C ones as well?

@tcfranks
Copy link
Contributor

tcfranks commented Sep 2, 2022

We could probably even have it directly in the Blinka displayio library. The only example I see is a FourWire, are there any I2C ones as well?

it's in sampletest as well, just commented out:

Use for SPI

spi = board.SPI()
oled_cs = board.D5
oled_dc = board.D6
display_bus = displayio.FourWire(
spi, command=oled_dc, chip_select=oled_cs, baudrate=1000000, reset=oled_reset
)

Use for I2C
i2c = board.I2C()
display_bus = displayio.I2CDisplay(i2c, device_address=0x3c, reset=oled_reset)

@tcfranks
Copy link
Contributor

tcfranks commented Sep 2, 2022

sorry - had issues with the hash sign in comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation good first issue Good for newcomers
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants