Cqd: Colour my __dir__ please

(github.com)

49 points | by jasepickup 195 days ago

5 comments

  • kstrauser 193 days ago
    Pro-tip: put things like this in your ~/.pythonrc so that they're loaded when you start the REPL. I have a few things in mine, like configuring readline, a couple of functions to dump objects as JSON or YAML, and imports for pprint and datetime so that they're all there when I'm doing interactive stuff.
    • setopt 192 days ago
      Does .pythonrc also apply to IPython? I’ve been using my .ipython configs to do this, but would prefer to move it to .pythonrc if that applies to all Python interpreters.
      • ErikBjare 192 days ago
        Just learned about this tool, also using ipython for this. Seems it is actually controlled by the `PYTHONSTARTUP` env var, which can be set to the path to your `.pythonrc`, so should work with ipython too!
    • BiteCode_dev 192 days ago
      • kstrauser 192 days ago
        I don’t have nearly so much in mine, but the motivations the same. There are certain tools I use all the time when I’m in the REPL, so I make it as comfy for myself as possible.
  • tathagatadg 192 days ago
    I love to see investment in tools like these, so thank you so much for working on it and packaging it.

    Another useful tool that I don’t see cheered enough for is vars(). When integrating new api-s, you’d often find yourself at pdb(or ipdb) prompt pretty printing(pp) loaded variables and attributes calls - pp(vars(foo)) has been a great friend reducing the burden of dot walking.

    One thing I have longed for, but never took the time to research though, is pagination - your debugger window is often fighting for screen real estate, so data rich API calls becomes a little jarring.

  • jasepickup 195 days ago
    I found myself wanting a quick way to navigate dir() from the terminal. This is a tiny, simple python package that helps in this regard.
  • purplesyringa 192 days ago
    Is it just a coincidence that the name is https://en.wikipedia.org/wiki/CQD, the old SOS?
  • zahlman 193 days ago
    I think it would be a good idea to consider name-mangled attributes (https://docs.python.org/3/tutorial/classes.html#private-vari... ; https://stackoverflow.com/questions/7456807) separately:

        >>> class x:
        ...   def __foo(self): pass
        ... 
        >>> dir(x) # word-wrapped manually to protect your eyes
        ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
         '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__',
         '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
         '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
         '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
         '__weakref__', '_x__foo']
    
    `__foo` is probably not meant for external use, but the real reason to use the leading double underscore is to invoke that name mangling and thus avoid name collisions in subclasses. Some people do still use this feature. (These days, I barely even use inheritance.)

    Perhaps it could use the same colour for the `_x` as for other single-underscore names, and a fourth colour for the `__foo` part.