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>> 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>>> 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> 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>>>> 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>')
> 
>                          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>>>>> 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

_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to