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>> 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> 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>>> 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>') > > 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>>>> 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 http://lists.repoze.org/listinfo/repoze-dev