setup code completion for a pylons project

AllMigh7y
2007-01-27
2013-03-15
  • AllMigh7y

    AllMigh7y - 2007-01-27

    Guys,

    I installed Pydev and have a pylons project structure, but when I type in the editor:

    "self.c" no code completion box appears. I know I have to right-click on the project node and via is properties modify the PYTHONPATH to point to the "src" directory. As the pylons project structure doesn't have a "src" directory per-se, how can I get this invaluable code completion working? The default code completion sucks big time, so I need this "added" feature set.

    Please help!

    /allmigh7y

     
    • Fabio Zadrozny

      Fabio Zadrozny - 2007-01-28

      Well... you don't put your python code under some folder? What is your structure for the project?

       
    • AllMigh7y

      AllMigh7y - 2007-01-28

      I checked out the ROOT from my subversion (SVN) server, so the project structure is as follows:

      ECLIPSE PROJECT STRUCTURE
      -------------------------
      .settings
      branches
      tags
      trunk
      .project

      The below structure in my 'trunk' directory:
      --------------------------------------------

      helloworld
          - data
          - helloworld
              - config
              - controllers
              - docs
              - i18n
              - lib
              - models
              - public
              - templates
              - tests
              - __init__.py
              - websetup.py
          - helloworld.egg-info
              - Various files including paste_deploy_config.ini_tmpl
          - development.ini
          - setup.cfg
          - setup.py

      I have python modules all over the place (ie. in controllers, lib, modules, etc.,)

       
      • Fabio Zadrozny

        Fabio Zadrozny - 2007-01-28

        And how do you write the imports for one getting modules from the other in this case?

        from helloworld import controllers?

        or from controllers import xxx?

        or each one is totally independent from the other?

         
    • AllMigh7y

      AllMigh7y - 2007-01-28

      from main.lib.base import *
      import smtplib, random
      from pylons import g
      from main.lib.Utility import *

      ^
      |

      sample header from a module in my lib directory. But looking at my basic controller, after its initial creation, there is only 1 import stmt generated:

      e.g.

      from main.lib.base import *

      class FormsController(BaseController):
          def index(self):
              return Response('')

      Now when I do self.c in the index action, no auto-complete happens? Am I missing something? I've seen both versions of the imports you mentioned. Not sure how that effects the auto-completion?

      /allmigh7y

       
    • AllMigh7y

      AllMigh7y - 2007-01-30

      Fabio/Anyone,

      Anyone know what I can try in order to fix this issue? It's getting more annoying the more I code :-(

      /allmigh7y

       
      • Fabio Zadrozny

        Fabio Zadrozny - 2007-01-30

        In your example:

        from main.lib.base import *

        class FormsController(BaseController):
           def index(self):
               return Response('')

        where is that 'main' module that you use as the root for your code?

        Also, it might be worth checking in some place what's the pythonpath that is used at runtime for a pylons project...

        E.g.:

        class FormsController(BaseController):
           def index(self):
               for p in sys.path: print p #get the pythonpath
               return Response('')

        It would be nice if you could post those results...

        Cheers,

        Fabio

         
    • AllMigh7y

      AllMigh7y - 2007-01-30

      At the root of the Eclipse project titled "HelloWorld", is the following structure:

      settings
      branches
      tags
      trunk
      .project

      The 'main' you referred to, is under the following structure:

      trunk > main > main

      The 'last' main directory is where all my pylons structure code exists (for instance, controllers/public/models/etc.,)

      So, my FormsController is actually under

      trunk > main > main > controllers > forms.py

      Results from sys.path (what do I add here?)
      -------------------------------------------

      C:\dev\tools\eclipse\plugins\org.python.pydev.debug_1.2.4\pysrc
      C:\dev\tools\python25\Lib\site-packages\simplejson-1.4-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\myghtyutils-0.52-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\setuptools-0.6c3-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\sqlalchemy-0.3.0-py2.5.egg
      c:\dev\tools\python25\lib\site-packages\docutils-0.4-py2.5.egg
      c:\dev\tools\python25\lib\site-packages\mako-0.1.0-py2.5.egg
      c:\dev\applications\pylons\quickwiki
      c:\dev\tools\python25\lib\site-packages\pylons-0.9.4.1-py2.5.egg
      c:\dev\tools\python25\lib\site-packages\nose-0.9.1-py2.5.egg
      c:\dev\tools\python25\lib\site-packages\paste-1.1.1-py2.5.egg
      c:\dev\tools\python25\lib\site-packages\beaker-0.6.2-py2.5.egg
      c:\dev\tools\python25\lib\site-packages\routes-1.6.2-py2.5.egg
      c:\dev\tools\python25\lib\site-packages\formbuild-0.1.6b-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\pylons-0.9.2-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\beaker-0.6.1-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\nose-0.9.0-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\webhelpers-0.2.2-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\FormEncode-0.6-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\pastescript-1.0-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\pastedeploy-1.0-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\paste-1.0-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\myghty-1.1-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\routes-1.5.2-py2.5.egg
      C:\dev\tools\python25\Lib\site-packages\cheetah-1.0-py2.5.egg
      C:\dev\tools\python25\DLLs
      c:\dev\tools\python25\lib\site-packages
      C:\dev\tools\python25\Lib
      C:\dev\tools\python25\Lib\lib-tk
      C:\dev\tools\python25
      C:\dev\applications\pylons\ c:\dev\tools\python25\python25.zip
      c:\dev\tools\python25\lib\plat-win
      C:\dev\tools\python25\Lib\site-packages\routes-1.5.2-py2.5.egg

       
    • AllMigh7y

      AllMigh7y - 2007-01-30

      Just to add:

      In my windows file system, the "HelloWorld" application is located here:

      c:\dev\applications\pylons\HelloWorld

       
      • Fabio Zadrozny

        Fabio Zadrozny - 2007-01-30

        Ok, I've downloaded pylons here... and created a (rather short) tutorial on what you need to make it work with pydev:

        1. get it with easy_install

        2. check the pylons manual at: http://pylonshq.com/docs/0.9.4.1/getting_started.html -- I'm just going to extend it a bit here on what needs to be configured in pydev

        3. Pydev specific: remove and add the interpreter again, so that it can find out about the new libraries (details on how to do that at: http://fabioz.com/pydev/manual_101_interpreter.html\)

        4. Pydev specific: create a new project (let's call it pylons_test) -- uncheck the option to create a 'src' folder.

        5. go into the pylons_test and execute in the command-line:
        d:\bin\Python24\Scripts\paster.exe create --template=pylons helloworld

        This should have created a structure below the project with:
        /helloworld
        /helloworld/helloworld
        /helloworld/config
        etc.

        6. Pydev specific: add the /helloworld to the project pythonpath (details on how to do that at: http://fabioz.com/pydev/manual_101_project_conf.html\)

        7. Keep on with the pylons tutorial ;-)

        Still, it seems that pydev could not make the complete below very well...

        from helloworld.lib.base import *

        class HelloController(BaseController):
            def index(self):
                self. <-- complete here
                return Response('hello world')

        but if you change 'from helloworld.lib.base import *' to 'from helloworld.lib.base import BaseController, Response' it works... may be a pydev bug (I have to check it better).

        Cheers,

        Fabio

         
        • AllMigh7y

          AllMigh7y - 2007-01-31

          Aha! It works! Dude, this rocks. Thanks a great deal for your help Fabio. Very much appreciate your clear walk through of the steps.

          It's just amazing how much I depend on code completion. But now it works, so I am happy and continue to be lazy! :-)

          Cheers,
          allmigh7y

           
        • Fabio Zadrozny

          Fabio Zadrozny - 2007-02-10

          Just as a note... I've just fixed that error in the code completion for 1.2.7.

          Cheers,

          Fabio