Re: [Pydev-code] Web2py helper: Adding imports and parsing models with jython scripting
Brought to you by:
fabioz
From: Álvaro J. I. <air...@gm...> - 2011-04-29 11:44:10
|
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 <fa...@gm...> 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 <air...@gm...> 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 <fa...@es...> wrote: >>> On Thu, Apr 28, 2011 at 10:18 AM, Álvaro J. Iradier <air...@gm...> 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 <fab...@gm...> 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 <air...@gm...> 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 - air...@gm... >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> 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 >>>>>> pyd...@li... >>>>>> 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 >>>>> pyd...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>>>> >>>> >>>> >>>> >>>> -- >>>> (:=================================:) >>>> Alvaro J. Iradier Muro - air...@gm... >>>> >>>> ------------------------------------------------------------------------------ >>>> 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 >>>> pyd...@li... >>>> 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 >>> pyd...@li... >>> https://lists.sourceforge.net/lists/listinfo/pydev-code >>> >> >> >> >> -- >> (:=================================:) >> Alvaro J. Iradier Muro - air...@gm... >> >> ------------------------------------------------------------------------------ >> 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 >> pyd...@li... >> 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 > pyd...@li... > https://lists.sourceforge.net/lists/listinfo/pydev-code > -- (:=================================:) Alvaro J. Iradier Muro - air...@gm... |