FTR, I just made the zope.schema trunk tests pass under Jython. A release should be made soon.
http://svn.zope.org/zope.schema/trunk/ I still haven't figured out why zope.configuration doesn't work though. - C Diaz, Eduardo wrote: > Yes, I'm going to work on that patch, Thanks! > > On Mon, Jan 4, 2010 at 5:31 PM, Chris McDonough <chr...@plope.com > <mailto:chr...@plope.com>> wrote: > > Diaz, Eduardo wrote: > > Ok, that worked! > > > Great! > > For the record, I installed Jython in the meantime, and I just fixed > the repoze/bfg/paster.py Jython bug on the trunk. I'm going to try > to get a fix into zope.schema (maybe just a conditional def of a > __get__ like you did).. once I can figure out how to run its tests > under Jython. > > Do you think you might be able to submit a patch to the Jinja2 guys > that makes the compilation of their speedup module conditional under > Jython? If not I may have time to work a bit on it. > > > I just changed the view like this: > > from jinja2 import Template, Environment, PackageLoader > from webob import Response > > def my_view(context, request): > env = Environment(loader=PackageLoader('myproject', 'templates')) > template = env.get_template('mytemplate.jinja2') > result = template.render({'project':'MyProject', > 'request':request}) > response = Response(result) > return response > > > Seems that the biggest problem is that the project can't be > created with jython's paster, I created the project with CPython > and then used it on paster. > > > On Mon, Jan 4, 2010 at 4:37 PM, Chris McDonough > <chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>> wrote: > > It looks like Jinja2 has an optional "speedups" module that > Jython > is choking on: > > http://bitbucket.org/mitsuhiko/jinja2-main/src/tip/setup.py > > You might try checking Jinja2 out from bitbucket, commenting > out the > "features" stanza in its setup.py and installing it into your > virtualenv (if you're using one; otherwise just globally) by hand > (jython setup.py install I guess) before trying to install > repoze.bfg.jinja2. I suspect it might work after that. > > Yes, the "parser" module is related to the "ast" module (doesn't > seem to be supported on non-CPython platforms). > > - C > > > Diaz, Eduardo wrote: > > Ok, I'm going to give it a try in a while for now, this > is the > problem with jinja2, it needs to compile something > > easy_install -i http://dist.repoze.org/bfg/1.1/simple/ > repoze.bfg.jinja2 > Searching for repoze.bfg.jinja2 > Best match: repoze.bfg.jinja2 0.5 > Processing repoze.bfg.jinja2-0.5-py2.5.egg > repoze.bfg.jinja2 0.5 is already the active version in > easy-install.pth > > Using > > > /home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg.jinja2-0.5-py2.5.egg > Processing dependencies for repoze.bfg.jinja2 > Searching for Jinja2 > Reading http://dist.repoze.org/bfg/1.1/simple/Jinja2/ > Best match: Jinja2 2.1.1 > Downloading > http://dist.repoze.org/bfg/1.1/Jinja2-2.1.1.tar.gz > Processing Jinja2-2.1.1.tar.gz > Running Jinja2-2.1.1/setup.py -q bdist_egg --dist-dir > /tmp/easy_install-wxGcPq/Jinja2-2.1.1/egg-dist-tmp-eTzSIB > warning: no files found matching 'Makefile' > warning: no files found matching 'ez_setup.py' > warning: no previously-included files matching '*' found > under > directory 'docs/_build/doctrees' > error: Setup script exited with error: Compiling > extensions is > not supported on Jython > > The problem with chameleon is that jython doesn't have the > parser module. > > Going to keep checking with other templating engines. > > On Mon, Jan 4, 2010 at 4:10 PM, Chris McDonough > <chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>>> wrote: > > Diaz, Eduardo wrote: > > That helps with the zcml problem but now, there is > a problem > with chameleon, is there another template language > I can use? > > This is the stack trace: > > paster serve MyProject.ini Starting server in PID > 8071. > serving on 0.0.0.0:6543 <http://0.0.0.0:6543> > <http://0.0.0.0:6543> > <http://0.0.0.0:6543> > <http://0.0.0.0:6543> view at http://127.0.0.1:6543 > > ---------------------------------------- > Exception happened during processing of request from > (u'127.0.0.1', 53678) > Traceback (most recent call last): > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/Paste-1.7.2-py2.5.egg/paste/httpserver.py", > line 1062, in process_request_in_thread > self.finish_request(request, client_address) > File > "/home/iamedu/Tools/jython2.5.1/Lib/SocketServer.py", line > 254, in finish_request > self.RequestHandlerClass(request, > client_address, self) > File > "/home/iamedu/Tools/jython2.5.1/Lib/SocketServer.py", line > 522, in __init__ > self.handle() > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/Paste-1.7.2-py2.5.egg/paste/httpserver.py", > line 436, in handle > BaseHTTPRequestHandler.handle(self) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/Paste-1.7.2-py2.5.egg/paste/httpserver.py", > line 436, in handle > BaseHTTPRequestHandler.handle(self) > File > "/home/iamedu/Tools/jython2.5.1/Lib/BaseHTTPServer.py", > line 316, in handle > self.handle_one_request() > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/Paste-1.7.2-py2.5.egg/paste/httpserver.py", > line 431, in handle_one_request > self.wsgi_execute() > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/Paste-1.7.2-py2.5.egg/paste/httpserver.py", > line 286, in wsgi_execute > result = > self.server.wsgi_application(self.wsgi_environ, > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/router.py", > line 127, in __call__ > response = view_callable(context, request) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/router.py", > line 127, in __call__ > response = view_callable(context, request) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/configuration.py", > line 1656, in _bfg_requestonly_view > response = rendered_response(renderer, > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/configuration.py", > line 1533, in rendered_response > result = renderer(response, {'view':view, > 'renderer_name':renderer_name, > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/chameleon_zpt.py", > line 43, in __call__ > result = self.template(**system) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/decorator.py", > line 13, in __get__ > val = self.wrapped(inst) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/chameleon_zpt.py", > line 33, in template > return PageTemplateFile(self.path, > auto_reload=auto_reload) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/chameleon_zpt.py", > line 11, in __init__ > raise ImportError(why[0]) > ImportError: No module named parser > ---------------------------------------- > > The source code where this happens says: > > try: > from chameleon.zpt.template import PageTemplateFile > except ImportError, why: # pragma: no cover > # Chameleon doesn't work on non-CPython platforms > class PageTemplateFile(object): > def __init__(self, *arg, **kw): > raise ImportError(why[0]) > > So I'm guessing that something needs to be compile > with C, I > tried jinja2 but I cannot even install it. > > > It's not actually a compilation requirement problem; > Chameleon has > no dependencies that have (non-optional) C code. > > The information in this traceback is obscured by the fact > that bfg > tries hard to be at least importable on platforms that > don't > support > Chameleon. You might try changing: > > > try: > from chameleon.zpt.template import PageTemplateFile > except ImportError, why: # pragma: no cover > # Chameleon doesn't work on non-CPython platforms > class PageTemplateFile(object): > def __init__(self, *arg, **kw): > raise ImportError(why[0]) > > to: > > > from chameleon.zpt.template import PageTemplateFile > > .. to prevent BFG from hiding traceback information > from you > here. > > I suspect the root cause may be due to the fact that > Chameleon > generates Python code using the "ast" module, which > seems to > typically only available in CPython. Chameleon > doesn't work > on GAE > for the same reason. But the only way to know for > sure is to see > the "real" traceback. > > I was going to suggest repoze.bfg.jinja2, but you say you > can't even > get Jinja2 to install. You might just try using a > templating > system > that's known to work on Jython. I don't know one that is, > because > I've never used Jython, but you could try Genshi, Mako, or > Cheetah. > Then just use its API to generate strings to use in > responses from > within BFG, e.g. (assuming Mako works): > > from mako.template import Template > from webob import Response > > def mako_view(request): > template = > Template(filename='/templates/template.mak') > result = > template.render(name=request.params['name']) > response = Response(result) > return response > > > Instructions for creating a more tight binding between > BFG and > arbitrary templating languages (in the form of a > "renderer", > which > can be used within view configuration) exists here: > > > http://docs.repoze.org/bfg/1.2/narr/views.html#adding-and-overriding-renderers > > > I'm going to see if I can do anything with the > zcml problem > meanwhile, it seems to me to be a problem with the > jython's xml > parsing. > > Thanks a lot for your help, and if you have any > suggestions I'll > be glad to read them. > > > Please let me know about how the above turns out, I'm > interested in > making this stuff work as widely as possible. > > Thanks! > > - C > > > > On Mon, Jan 4, 2010 at 10:51 AM, Chris McDonough > <chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>>>> wrote: > > OK... its possible that zope.configuration doesn't > work for some > reason under Jython; I don't know that anyone > has tried it > recently. > I may give it a shot myself over the next week > or so > out of > curiosity. > > In the meantime, however, you can disuse > "declarative" > (ZCML) > style > configuration, which will subvert > zope.configuration > entirely. To > do so, change the body of the "app" function in > run.py > of the > generated sample app from this: > > def app(global_config, **settings): > """ This function returns a ``repoze.bfg`` > application > object. It > is usually called by the PasteDeploy > framework > during > ``paster > serve``""" > zcml_file = settings.get('configure_zcml', > 'configure.zcml') > config = Configurator(root_factory=get_root, > settings=settings) > config.begin() > > config.load_zcml(zcml_file) > config.end() > return config.make_wsgi_app() > > to: > > def app(global_config, **settings): > """ This function returns a ``repoze.bfg`` > application > object. It > is usually called by the PasteDeploy > framework > during > ``paster > serve``""" > zcml_file = settings.get('configure_zcml', > 'configure.zcml') > config = Configurator(root_factory=get_root, > settings=settings) > config.begin() > config.add_view(context=MyModel, > view=my_view, > > renderer='templates/mytemplate.pt <http://mytemplate.pt> > <http://mytemplate.pt> > <http://mytemplate.pt> > <http://mytemplate.pt>') > > config.add_static_view(name='static', > path='templates/static') > config.end() > return config.make_wsgi_app() > > Diaz, Eduardo wrote: > > Yes, it does > > :P > > > On Mon, Jan 4, 2010 at 10:42 AM, Chris > McDonough > <chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>>> > <mailto:chr...@plope.com > <mailto:chr...@plope.com> <mailto:chr...@plope.com > <mailto:chr...@plope.com>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>> > <mailto:chr...@plope.com <mailto:chr...@plope.com> > <mailto:chr...@plope.com <mailto:chr...@plope.com>>>>>> wrote: > > Diaz, Eduardo wrote: > > Ok, I think I know why this is > happening, > > the exception raises in the > _validate method of > the Orderable > class, this is where it happends: > > if self.max is not None and value > > self.max: > raise TooBig(value, self.max) > > Here, max is a ValidatedProperty it > has a > __set___ > method > which > gives it a value, the problem with > jython > seems to > be that it > isn't getting the value from the > instance > dictionary, so > I came > up a workaround, > > I define the __get__ method in the > ValidatedPropertyClass > like this: > > > def __get__(self, inst, owner): > name, check = self._info > return inst.__dict__[name] > > And now the tests run ok: > > jython setup.py test -q > > running test > running egg_info > writing MyProject.egg-info/PKG-INFO > writing entry points to > MyProject.egg-info/entry_points.txt > writing requirements to > MyProject.egg-info/requires.txt > writing top-level names to > MyProject.egg-info/top_level.txt > writing dependency_links to > MyProject.egg-info/dependency_links.txt > reading manifest file > 'MyProject.egg-info/SOURCES.txt' > writing manifest file > 'MyProject.egg-info/SOURCES.txt' > running build_ext > . > > ---------------------------------------------------------------------- > Ran 1 test in 0.005s > > OK > > I know it is not elegant, and I'll > submit a > bug to > the jython > developers... but for now, I want to > go on > and there's > another > problem with running the project, > and here > it is: > > paster serve MyProject.ini > Traceback (most recent call last): > File > "/home/iamedu/Tests/jython/sys/bin/paster", > line 7, in > <module> > sys.exit( > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteScript-1.7.3-py2.5.egg/paste/script/command.py", > line 84, in run > invoke(command, command_name, > options, > args[1:]) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteScript-1.7.3-py2.5.egg/paste/script/command.py", > line 123, in invoke > exit_code = runner.run(args) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteScript-1.7.3-py2.5.egg/paste/script/command.py", > line 123, in invoke > exit_code = runner.run(args) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteScript-1.7.3-py2.5.egg/paste/script/command.py", > line 218, in run > result = self.command() > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteScript-1.7.3-py2.5.egg/paste/script/serve.py", > line 275, in command > app = self.loadapp(app_spec, > name=app_name, > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteScript-1.7.3-py2.5.egg/paste/script/serve.py", > line 311, in loadapp > return loadapp( > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteDeploy-1.3.3-py2.5.egg/paste/deploy/loadwsgi.py", > line 204, in loadapp > return loadobj(APP, uri, > name=name, **kw) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteDeploy-1.3.3-py2.5.egg/paste/deploy/loadwsgi.py", > line 225, in loadobj > return context.create() > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteDeploy-1.3.3-py2.5.egg/paste/deploy/loadwsgi.py", > line 625, in create > return self.object_type.invoke(self) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteDeploy-1.3.3-py2.5.egg/paste/deploy/loadwsgi.py", > line 110, in invoke > return fix_call(context.object, > context.global_conf, > **context.local_conf) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteDeploy-1.3.3-py2.5.egg/paste/deploy/util/fixtypeerror.py", > line 57, in fix_call > val = callable(*args, **kw) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/PasteDeploy-1.3.3-py2.5.egg/paste/deploy/util/fixtypeerror.py", > line 57, in fix_call > val = callable(*args, **kw) > File > > "/home/iamedu/Tests/jython/MyProject/myproject/run.py", > line 11, in app > config.load_zcml(zcml_file) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/repoze.bfg-1.2a10-py2.5.egg/repoze/bfg/configuration.py", > line 424, in load_zcml > xmlconfig.file(filename, package, > execute=True) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/xmlconfig.py", > line 647, in file > include(context, name, package) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/xmlconfig.py", > line 546, in include > processxmlfile(f, context) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/xmlconfig.py", > line 378, in processxmlfile > parser.parse(src) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/xmlconfig.py", > line 378, in processxmlfile > parser.parse(src) > File > > "/home/iamedu/Tools/jython2.5.1/Lib/xml/sax/drivers2/drv_javasax.py", > line 141, in parse > > self._parser.parse(JyInputSourceWrapper(source)) > File > > "/home/iamedu/Tools/jython2.5.1/Lib/xml/sax/drivers2/drv_javasax.py", > line 178, in startElement > > self._cont_handler.startElementNS((uri > or None, > lname), qname, > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/xmlconfig.py", > line 230, in startElementNS > self.context.begin(name, data, info) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/config.py", > line 534, in begin > > self.stack.append(self.stack[-1].contained(__name, __data, > __info)) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/config.py", > line 835, in contained > return > RootStackItem.contained(self, name, > data, info) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/config.py", > line 703, in contained > factory = > self.context.factory(self.context, name) > File > > > "/home/iamedu/Tests/jython/sys/Lib/site-packages/zope.configuration-3.6.0-py2.5.egg/zope/configuration/config.py", > line 480, in factory > raise ConfigurationError("Unknown > directive", > ns, n) > > zope.configuration.xmlconfig.ZopeXMLConfigurationError: File > > "file:///home/iamedu/Tests/jython/MyProject/myproject/configure.zcml", > line 10.8 > ConfigurationError: ('Unknown > directive', > u'http://namespaces.repoze.org/bfg', > u'view') > > > An obvious thing to check first.. does: > > <include package="repoze.bfg.includes"/> > > Come after the first <configure> tag but > before > any other > directive > in myproject/configure.zcml? Is this > the bare > configure.zcml > file > generated by the paster template or have you > made changes? > > - C > > > > > > > > > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Repoze-dev mailing list > Repoze-dev@lists.repoze.org <mailto:Repoze-dev@lists.repoze.org> > http://lists.repoze.org/listinfo/repoze-dev > > > _______________________________________________ Repoze-dev mailing list Repoze-dev@lists.repoze.org http://lists.repoze.org/listinfo/repoze-dev