rlcompleter and wxPython, problems ...

Stef Mientki stef.mientki at gmail.com
Tue Sep 30 22:18:50 CEST 2008


Gabriel Genellina wrote:
> En Tue, 30 Sep 2008 16:06:07 -0300, Stef Mientki 
> <stef.mientki at gmail.com> escribió:
>
>> Gabriel Genellina wrote:
>>> En Sun, 28 Sep 2008 19:25:30 -0300, Stef Mientki 
>>> <stef.mientki at gmail.com> escribió:
>>>
>>>> I'm trying to implement autocompletion into my editor.
>>>> But I find some weird behavior,
>>>> or at least I don't have the faintest  idea why  this behavior 
>>>> occures,
>>>> and even more important how to solve it
>>>> In the example below I try to autocomplete  " wx.s" , which in my 
>>>> humble opinion should at least produce "wx.stc"  (and some others ).
>>>
>>> wx is a package. Modules within the package are not, by default, 
>>> attributes of the package - unless they're imported in __init__.py 
>>> or your code imports them.
>>> So the autocompleter is doing the right thing
>> in what perspective ?
>> the autocompleter is only meant to assist the program writer ;-)
>
> It's hard to write an autocompleter that does the right thing in all 
> cases :)
>
> For a package, you have several sources for possibly valid attributes:
>
>  - its dir() (that is, the package object's own attributes)
>  - the __all__ attribute, when it exists
>  - the list of modules inside the package directory or directories 
> (given by its __path__ attribute)
>
> Sometimes __init__.py is empty - and enumerating the modules inside 
> the directory is the right thing to do. Sometimes the author 
> explicitely imports things in __init__.py, things that comprise the 
> public interfase to the package. In that case I'd not like to see 
> "private" modules appearing in the list.
> Combine with __all__, which might be defined or not. Mix all those, 
> choose your own autocomplete algorithm, and see what happens...
>
>>> - wx.stc does not exist until it is explicitely imported.
>> I guess I've to study the package.
>> For the moment I'll implement a user editable list of additions.
>>
>> But with your remarks I tried __all__
>> And now I wonder why rlcompleter is not simply using "wx.__all__",
>> it than does gets all the items ?
>
> __all__ isn't always defined. It's only used when you do "from xxx 
> import *" AFAIK.
>
thanks Gabriel,
very valuable information for me,
I'll bookmark this message for later use.
cheers,
Setf




More information about the Python-list mailing list