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-05-24 12:32:20
|
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 <air...@gm...> 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 <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... > -- (:=================================:) Alvaro J. Iradier Muro - air...@gm... |