Hi!
The problem is that passlib.hash does some lazy-importing tricks in order to load the hash classes on-demand instead of all at once (there's a lot of them, and most people only need one or two). As you found, they're actually stored over in passlib.handlers, though that's kindof an internal detail :)
This lazy-importing wouldn't normally be a problem, but PyCharm's autocomplete seems to rely on source inspection rather than examining live objects... which means it falls down when the contents of a module aren't explicitly listed.
I use PyCharm myself, and I've tried tweaking how passlib.hash does things, but so far haven't found a way to trick PyCharm. This thread (http://forum.jetbrains.com/thread/PyCharm-54) seems to indicate this is a known issue w/ PyCharm, but it's from 2010, and I don't think anything has been done since.
If PyCharm ever adds a way for source to indicate that it's safe to live-inspect a module (e.g. by looking for some special marker comment in the source such as # -*- live-inspection-safe -*-), I'll be happy to add the flag to passlib. Heck, I'd love it for a number of other libraries where I'm using lazy importing. Until then, this may be the state of things :(
- Eli