server-client-python
server-client-python copied to clipboard
Type hint issues
Describe the bug Recently tried to bump tableauserverclient from version 0.16.0 to 0.18.0
Versions Details of your environment, including:
- Tableau Server version : Tableau Online
- Python version: 3.9
- TSC library version: 0.18.0
- mypy version: mypy 0.942
To Reproduce Create this simplistic file:
#!/usr/bin/env/python
import os
import tableauserverclient as TSC
tableau_auth = TSC.TableauAuth(os.environ["USERNAME"], os.environ["PASSWORD"], site_id=os.environ["SITE_ID"])
server = TSC.Server("https://dub01.online.tableau.com")
my_group = TSC.GroupItem(os.environ["GROUP_ITEM"])
Run mypy test_script.py --ignore-missing-imports --strict
Results
mypy test_script.py --ignore-missing-imports --strict
test_script.py:8: error: Module has no attribute "TableauAuth"
test_script.py:9: error: Module has no attribute "Server"
test_script.py:10: error: Module has no attribute "GroupItem"
=> this is simplistic and mypy complains
I suspect the typed.py file is not at the right place or the imports are not being set correctly In the init.py file
Maybe https://github.com/tableau/server-client-python/issues/991 not being implemented correctly
The types are not present in 0.18. Try again with the development branch. It should work there. 0.19 is being prepared for release and will have the typing information.
Thanks jorwoods - @pierresouchay this release is now available and hopefully solves your issue!
@jorwoods @jacalata Does not seem to work...
With the example provided above:
mypy test_script.py --ignore-missing-imports --strict
test_script.py:8: error: Module has no attribute "TableauAuth"
test_script.py:9: error: Module has no attribute "Server"
test_script.py:10: error: Module has no attribute "GroupItem"
Found 3 errors in 1 file (checked 1 source file)
(venv) % python
Python 3.9.2 (v3.9.2:1a79785e3e, Feb 19 2021, 09:06:10)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tableauserverclient as TSC
>>> TSC.__version__
'0.19.0'
>>> exit()
Huh - I can definitely repro this. I'll take a look, thanks very much for following up!
I believe the problem is because if you are in the TYPE_CHECKING mode, there are circular references, which break when trying to inspect from the top level. These things still work during run time because they are behind the TYPE_CHECKING flag.
Tested and confirmed this is resolved by #1394