python


Python Type hinting with curses


I'm trying to figure out what to put in my type annotation at the top of this function.
I have the following trivial example:
import curses
def main(stdscr):
stdscr.clear()
stdscr.addstr(2, 0, "What is the type of stdscr?")
stdscr.addstr(5, 0, "It is: {}".format(type(stdscr)))
stdscr.refresh()
stdscr.getkey()
curses.wrapper(main)
This returns <type '_curses.curses window'>. This doesn't seem like it will work with Type hinting as it has a space in it. The expected result would be WindowObject listed in the documentation. I can't find a path to WindowObject in the curses module itself. EDIT: The documentation is incorrect here.
How do I write main with accurate type annotation?
Your problem is that the type you spect is just not the real type of the object, the method type() always tells you the type correctly, so by sure the doc. is wrong.
Unfortunately, the curses module does not appear to be fully typed within typeshed. There was some preliminary work done a few months ago, but the Windows object has not been added yet. You can check the Python 3 'curses' stubs for yourself here and here.
Currently, the stubs default to typing curses.wrapper as:
def wrapper(func, *args, **kwds): ...
...which, in turn, is equivalent to:
def wrapper(func: Callable[..., Any], *args: Any, **kwds: Any): ...
So, that means that there really is no suitable type to assign to your main functions parameter at the moment, apart from Any.
That said, if you're up for it, you might be able to contribute some stubs to complete the curses module yourself! It doesn't seem like the Window object is that terribly complex and should hopefully be relatively straightforward to type.
The main complication might be hammering out where exactly the 'Window' object should be imported from, if it doesn't exist within the curses module itself. You might perhaps want to stick the 'Windows' object within the typing module itself, just like typing.re.Pattern and typing.re.Match.

Related Links

Select file to upload using Internet Explorer in python
Better way to parse from regex?
python nested lists - list comprehension of dictionaries
Can Install Packages but cannot import
Inserting lines to a file after a string match
All possible combinations of dictionary values given input string. Python
Assign and compare in python
List comprehension won't return expected output
Accessing django oscar product attributes
Incorrectly Replacing Content
Python Max Recursion Depth
Error loading IPython notebook
Accessing Python webserver remotely on Amazon EC2
Efficient combined in-place adding/removing of rows of a huge 2D numpy array
PANDAS: fast check whether integers fall into a set of intervals
python hex-editor binary change

Categories

HOME
tensorflow
reverse-engineering
filterrific
jsviews
uibutton
backup
ubuntu-16.04
decorator
concourse
matplotlib
recyclerview
vsftpd
xcode8.3
desktop
google-plus
powershell-v3.0
nixos
spinnaker
flann
mongodb-query
medium-editor
cross-platform
sql-tuning
styles
ejbca
koa
flexboxgrid
iup
scalajs-react
solidworks
oracle-xml-db
swiftcharts
text-files
broadleaf-commerce
nodeclipse
vmd
topic-modeling
deepstream.io
installshield-2012
common.logging
productivity
google-account
median
asmx
automator
lumen-5.3
nstouchbar
ticker
forerunnerdb
modelattribute
scd
tofixed
redux-router
bettercms
restivejs
firepath
qregexp
multifile-uploader
database-backups
gradle-eclipse
nssplitview
mpeg-4
usb-drive
sun-codemodel
difference
data-import
enyo
datasnap
uialertview
textkit
sevenzipsharp
pyrocms
mogrify
graphical-logo
adodb
jython-2.7
musl
low-level
proxies
spdy
android-looper
kraken.js
slick-2.0
facebook-chat
logentries
.net-cf-3.5
layered
threadx
awesomeprint
android-4.0
crocodoc
enumerators
couchdb-lucene
shim
hashalgorithm
path-manipulation
shared-objects
rijndael
libavformat
exitstatus
open-graph-beta
inline-if
castle-validators

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App