Just added something to the feature request (if more people have interest, maybe it could become something more integrated into pydev)...
Cheers, Fabio On Tue, May 24, 2011 at 9:31 AM, Álvaro J. Iradier <airad...@gmail.com> wrote: > Hi Fabio, > > did you get some time to check and give us some ideas on how to start > this web2py support using predefined completions? > > Thanks, and sorry for insisting. > > > On Fri, Apr 29, 2011 at 1:43 PM, Álvaro J. Iradier <airad...@gmail.com> wrote: >> It sounds better than OK, thanks very much,. >> >> Request ID 3294887 >> >> https://sourceforge.net/tracker/?func=detail&aid=3294887&group_id=85796&atid=577332 >> >> Greets. >> >> On Fri, Apr 29, 2011 at 12:39 PM, Fabio Zadrozny <fabi...@gmail.com> wrote: >>> Hi Alvaro, >>> >>> I think that almost all there can be done with the predefined >>> completions... Let's do the following: Create a feature request and >>> attach the sample project from your web2py_example, from there, I'll >>> start providing the initial structure and will give you the next steps >>> and we can go from there... does that sound OK for you? >>> >>> Cheers, >>> >>> Fabio >>> >>> On Fri, Apr 29, 2011 at 5:46 AM, Álvaro J. Iradier <airad...@gmail.com> >>> wrote: >>>> Hi Fabio, I don't know if you're familiar with web2py, I'll try to >>>> give you an example. >>>> >>>> Project in Eclipse: web2py_example >>>> >>>> Structure: >>>> --------------------------------------- >>>> web2py_example >>>> src/ >>>> cache/ >>>> controllers/ >>>> default.py >>>> cron/ >>>> databases/ >>>> errors/ >>>> languages/ >>>> models/ >>>> config.py >>>> db.py >>>> db_functions.py >>>> db_models.py >>>> db_others.py >>>> mail.py >>>> menu.py >>>> version.py >>>> modules/ >>>> ... >>>> .project >>>> .pydevproject >>>> --------------------------------------- >>>> >>>> The 'src' folder is linked to the web2py application folder, for >>>> example, src-> c:\web2py\applications\my_application. Some examples of >>>> files: >>>> >>>> models/db.py: >>>> ------------------------------------------------ >>>> # coding: utf8 >>>> db = DAL('sqlite://storage.sqlite') >>>> ... >>>> ------------------------------------------------ >>>> >>>> models/db_functions.py: >>>> ------------------------------------------------ >>>> # coding: utf8 >>>> >>>> DATETIME_FORMAT = "%d/%m/%Y %H:%M:%S" >>>> >>>> def get_latest_sample_date(): >>>> maxID = db.sensor_samples.id.max() >>>> ... >>>> ------------------------------------------------ >>>> >>>> models/menu.py: >>>> ------------------------------------------------ >>>> response.title = request.application >>>> >>>> if request.function == 'somefunction': >>>> response.menu = ... >>>> else: >>>> response.menu = ... >>>> ... >>>> ------------------------------------------------ >>>> >>>> >>>> controllers/default.py: >>>> ------------------------------------------------ >>>> @auth.requires_login() >>>> def index(): >>>> time = datetime.now().strftime(DATETIME_FORMAT) >>>> latest = get_latest_sample_date() >>>> response.flash = 'Sample message' >>>> >>>> return dict( >>>> time=time, >>>> latestSample=latest) >>>> ... >>>> ------------------------------------------------ >>>> >>>> On web2py, the code for function 'index' on controllers/default.py is >>>> run when you navigate to http://server/my_application/deafult/index. >>>> >>>> Web2py "magically" populates an environment, so some instances like >>>> 'request', 'response', 'session', and some modules and classes are >>>> imported. Then, web2py evals all the files in the models/ folder. >>>> Finally, it evals the controllers/default.py file, and calls the >>>> 'index' function (the returned dictionary is passed to the >>>> corresponding view, but that doesn't matter right now). >>>> >>>> So, what do I want to achieve? >>>> >>>> When editing a file in models/ (for example models/db.py), I would >>>> like pydev to know about that DAL was imported from gluon.dal.DAL >>>> (web2py does it automatically). >>>> >>>> Then, in models/db_functions.py I would like pydev to know about the >>>> 'db' variable, which was created in modles/db.py (web2py evaluates >>>> these files in alphabetical order, so db.py comes befure >>>> db_functions.py). >>>> >>>> Also in models/menu.py, I would like pydev to know that request and >>>> response are instances of gluon.globals.Request and >>>> gluon.globals.Response respectively, etc. >>>> >>>> When editing the file controlles/default.py, I'd like web2py to know >>>> about 'request', 'response' (and some others), as well as about the >>>> declarations in all the models/ file (in the code example, I'm calling >>>> the 'get_latest_sample_date' function declared in >>>> models/db_functions.py) >>>> >>>> Basically, I want to setup the environment in a similar way to what is >>>> done by web2py in gluon.compilyapp, functions 'build_environment' and >>>> 'run_models': >>>> >>>> ------------------------------------- >>>> def build_environment(request, response, session): >>>> """ >>>> Build the environment dictionary into which web2py files are executed. >>>> """ >>>> >>>> environment = {} >>>> for key in html.__all__: >>>> environment[key] = getattr(html, key) >>>> >>>> # Overwrite the URL function with a proxy >>>> # url function which contains this request. >>>> environment['URL'] = html._gURL(request) >>>> >>>> for key in validators.__all__: >>>> environment[key] = getattr(validators, key) >>>> if not request.env: >>>> request.env = Storage() >>>> environment['T'] = translator(request) >>>> environment['HTTP'] = HTTP >>>> environment['redirect'] = redirect >>>> environment['request'] = request >>>> environment['response'] = response >>>> environment['session'] = session >>>> environment['cache'] = Cache(request) >>>> environment['DAL'] = DAL >>>> environment['Field'] = Field >>>> environment['SQLDB'] = SQLDB # for backward compatibility >>>> environment['SQLField'] = SQLField # for backward compatibility >>>> environment['SQLFORM'] = SQLFORM >>>> environment['SQLTABLE'] = SQLTABLE >>>> environment['LOAD'] = LoadFactory(environment) >>>> environment['local_import'] = \ >>>> lambda name, reload=False, app=request.application:\ >>>> local_import_aux(name,reload,app) >>>> BaseAdapter.set_folder(os.path.join(request.folder, 'databases')) >>>> response._view_environment = copy.copy(environment) >>>> return environment >>>> >>>> def run_models_in(environment): >>>> """ >>>> Runs all models (in the app specified by the current folder) >>>> It tries pre-compiled models first before compiling them. >>>> """ >>>> >>>> folder = environment['request'].folder >>>> path = os.path.join(folder, 'compiled') >>>> if os.path.exists(path): >>>> for model in listdir(path, '^models_.+\.pyc$', 0): >>>> restricted(read_pyc(model), environment, layer=model) >>>> else: >>>> models = listdir(os.path.join(folder, 'models'), '^\w+\.py$', >>>> 0) >>>> for model in models: >>>> layer = model >>>> if is_gae: >>>> code = getcfs(model, model, >>>> lambda: compile2(open(model, >>>> 'r').read(),layer)) >>>> else: >>>> code = getcfs(model, model, None) >>>> restricted(code, environment, layer) >>>> >>>> ------------------------------------- >>>> >>>> So, do you think this can be done just with scripting, or will it >>>> require extending pydev? >>>> >>>> Suggestions are welcome, and I think web2py developers would find this >>>> very useful. >>>> >>>> Greets. >>>> >>>> On Thu, Apr 28, 2011 at 3:32 PM, Fabio Zadrozny <fab...@esss.com.br> wrote: >>>>> On Thu, Apr 28, 2011 at 10:18 AM, Álvaro J. Iradier <airad...@gmail.com> >>>>> wrote: >>>>>> That might work for predefined classes or items, like "request", >>>>>> "response", "session"..., but I want to go further. I want to >>>>>> dinamically parse the files in models/, which define some variables >>>>>> and functions, and I want to make those available too. >>>>>> >>>>>> Is it possible to get this far using the jython scripting, or should I >>>>>> develop a plugin or a patch for pydev? >>>>>> >>>>> >>>>> Can you give an actual example with code on what you want to achieve? >>>>> >>>>> Cheers, >>>>> >>>>> Fabio >>>>> >>>>> >>>>>> Greets. >>>>>> >>>>>> On Thu, Apr 28, 2011 at 3:07 PM, Fabio Zadrozny <fabioz.py...@gmail.com> >>>>>> wrote: >>>>>>> Might be easier providing predefined completions (i.e.: generating >>>>>>> python stub code for web2py -- you can create a Python script that >>>>>>> loads the environment and extracts info as needed). >>>>>>> >>>>>>> See: http://pydev.org/manual_101_interpreter.html#id2 for details >>>>>>> >>>>>>> An example script that converts QScintilla .api files to the >>>>>>> predefined completions is available at: >>>>>>> https://github.com/aptana/Pydev/blob/master/plugins/org.python.pydev.jython/jysrc/convert_api_to_pypredef.py >>>>>>> (this file should also be in your local PyDev) >>>>>>> >>>>>>> Cheers, >>>>>>> >>>>>>> Fabio >>>>>>> >>>>>>> On Thu, Apr 28, 2011 at 9:36 AM, Álvaro J. Iradier <airad...@gmail.com> >>>>>>> wrote: >>>>>>>> Hi all, >>>>>>>> >>>>>>>> I'm trying to make a Jython Script for Pydev for better integration >>>>>>>> with web2py development. >>>>>>>> >>>>>>>> Basically, I need some way to access the python interpreter that is >>>>>>>> used for syntax check and code completion from the jython script. >>>>>>>> >>>>>>>> What I would like to do is, when a .py file for a web2py project is >>>>>>>> loaded in the editor, fist, make some imports into the current >>>>>>>> interpreter, for example: >>>>>>>> >>>>>>>> from gluon.globals import Request >>>>>>>> from gluon.globals import Session >>>>>>>> from gluon.globals import Response >>>>>>>> >>>>>>>> then instantiate some of this classes into global variables: >>>>>>>> >>>>>>>> request=Request() >>>>>>>> session=Session() >>>>>>>> response=Response() >>>>>>>> >>>>>>>> to simulate a real request environment. >>>>>>>> >>>>>>>> Finally, I want to "exec" all the files in the models/ folder, in >>>>>>>> order to have the globals declared in there into de interpreter. >>>>>>>> >>>>>>>> Can you guide me into the right path? I'm totally lost looking at the >>>>>>>> code in com.python.pydev.codecompletion... I don't know how to get >>>>>>>> there from the jython script (or even if it's possible). >>>>>>>> >>>>>>>> Thanks very much. >>>>>>>> >>>>>>>> -- >>>>>>>> >>>>>>>> (:=================================:) >>>>>>>> Alvaro J. Iradier Muro - airad...@gmail.com >>>>>>>> >>>>>>>> ------------------------------------------------------------------------------ >>>>>>>> WhatsUp Gold - Download Free Network Management Software >>>>>>>> The most intuitive, comprehensive, and cost-effective network >>>>>>>> management toolset available today. Delivers lowest initial >>>>>>>> acquisition cost and overall TCO of any competing solution. >>>>>>>> http://p.sf.net/sfu/whatsupgold-sd >>>>>>>> _______________________________________________ >>>>>>>> pydev-code mailing list >>>>>>>> pydev-code@lists.sourceforge.net >>>>>>>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> WhatsUp Gold - Download Free Network Management Software >>>>>>> The most intuitive, comprehensive, and cost-effective network >>>>>>> management toolset available today. Delivers lowest initial >>>>>>> acquisition cost and overall TCO of any competing solution. >>>>>>> http://p.sf.net/sfu/whatsupgold-sd >>>>>>> _______________________________________________ >>>>>>> pydev-code mailing list >>>>>>> pydev-code@lists.sourceforge.net >>>>>>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> (:=================================:) >>>>>> Alvaro J. Iradier Muro - airad...@gmail.com >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> WhatsUp Gold - Download Free Network Management Software >>>>>> The most intuitive, comprehensive, and cost-effective network >>>>>> management toolset available today. Delivers lowest initial >>>>>> acquisition cost and overall TCO of any competing solution. >>>>>> http://p.sf.net/sfu/whatsupgold-sd >>>>>> _______________________________________________ >>>>>> pydev-code mailing list >>>>>> pydev-code@lists.sourceforge.net >>>>>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> WhatsUp Gold - Download Free Network Management Software >>>>> The most intuitive, comprehensive, and cost-effective network >>>>> management toolset available today. Delivers lowest initial >>>>> acquisition cost and overall TCO of any competing solution. >>>>> http://p.sf.net/sfu/whatsupgold-sd >>>>> _______________________________________________ >>>>> pydev-code mailing list >>>>> pydev-code@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>>>> >>>> >>>> >>>> >>>> -- >>>> (:=================================:) >>>> Alvaro J. Iradier Muro - airad...@gmail.com >>>> >>>> ------------------------------------------------------------------------------ >>>> WhatsUp Gold - Download Free Network Management Software >>>> The most intuitive, comprehensive, and cost-effective network >>>> management toolset available today. Delivers lowest initial >>>> acquisition cost and overall TCO of any competing solution. >>>> http://p.sf.net/sfu/whatsupgold-sd >>>> _______________________________________________ >>>> pydev-code mailing list >>>> pydev-code@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>>> >>> >>> ------------------------------------------------------------------------------ >>> WhatsUp Gold - Download Free Network Management Software >>> The most intuitive, comprehensive, and cost-effective network >>> management toolset available today. Delivers lowest initial >>> acquisition cost and overall TCO of any competing solution. >>> http://p.sf.net/sfu/whatsupgold-sd >>> _______________________________________________ >>> pydev-code mailing list >>> pydev-code@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>> >> >> >> >> -- >> (:=================================:) >> Alvaro J. Iradier Muro - airad...@gmail.com >> > > > > -- > (:=================================:) > Alvaro J. Iradier Muro - airad...@gmail.com > > ------------------------------------------------------------------------------ > vRanger cuts backup time in half-while increasing security. > With the market-leading solution for virtual backup and recovery, > you get blazing-fast, flexible, and affordable data protection. > Download your free trial now. > http://p.sf.net/sfu/quest-d2dcopy1 > _______________________________________________ > pydev-code mailing list > pydev-code@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/pydev-code > ------------------------------------------------------------------------------ vRanger cuts backup time in half-while increasing security. With the market-leading solution for virtual backup and recovery, you get blazing-fast, flexible, and affordable data protection. Download your free trial now. http://p.sf.net/sfu/quest-d2dcopy1 _______________________________________________ pydev-code mailing list pydev-code@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pydev-code