So why the extra check for unichar_isalpha? As far as I can tell unichar_isupper and unichar_islower do the right thing when passed non-alpha code.

And it seems to me that "123".islower() would return true the way that this is coded rather than returnng false.