[web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-07 Thread Ryan Seto
For future reference, this has been resolved with revision
a1619d2857e5 in the mercurial repository.

As mentioned before, simply include just the gluon/template.py file
from web2py, then use it similar to the following example.

example.py
~
from template import render

renderedText = render(
filename='/path/to/view.html',
context=dict( foo=bar )
)
~

View content is usually escaped, but if you run it standalone, you can
break out of escaping with the helper NOESCAPE().

Here's an example:

view.html
~
html
  body
{{= NOESCAPE( foo ) }}
  /body
/html
~


Thanks for everyone's help on this!

On Jun 6, 3:05 pm, Massimo Di Pierro massimo.dipie...@gmail.com
wrote:
 somebody email me the patch. :-)

 On Jun 6, 1:26 pm, Thadeus Burgess thade...@thadeusb.com wrote:







  What you have looked good. The exception looks like its pandocs fault not
  the template system.

  --
  Thadeus

  On Mon, Jun 6, 2011 at 1:03 PM, Ryan Seto mr.werew...@gmail.com wrote:
   I see.

   Would you like me to try and come up with a patch for this?

   On Mon, Jun 6, 2011 at 1:53 PM, Thadeus Burgess thade...@thadeusb.com
   wrote:
Yes..

You need some sort of response class that has a .write method... this 
can
   be
a hacked up cStringIO or other.

Alternatively you can perform the same thing manually by passing in
   writer,
which instead of the template engine writing ``response.write(%s)`` it
could write whatever you want as a callable function.

So for example, say you defined your ``CustomResponse`` class as earlier
   in
the list...

context['response'] = CustomReponse()
exec(parse_template(...)) in context
print context['response'].body.getvalue()

SO yeah... in the end if we implemented your suggestion of overriding 
the
response class on import, then the render function would work as
   expected.

--
Thadeus

On Mon, Jun 6, 2011 at 12:26 PM, Ryan Seto mr.werew...@gmail.com
   wrote:

Hm, that doesn't seem to be it either.  I don't get a requirement for
the globals module, but what I get back is this:

~
 print parse_template('view.html', path='templates',
 context=dict(content='test'))
response.write(content)
response.write('\r\n', escape=False)
~

Am I supposed to execute what parse_template returns?

Thank you for your help.

On Mon, Jun 6, 2011 at 11:53 AM, Thadeus Burgess thade...@thadeusb.com

wrote:
 What you really want is template.parse_template. Still requires
 restricted
 but only for the exception raising.

 Very simple.

 from template import parse_template

 print parse_template('main.html', path='/path/to/custom/views/',
 context=dict())

 --
 Thadeus

 On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro
 massimo.dipie...@gmail.com wrote:

 It is LGPL not GPL. very different. ;-)

 On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
 wrote:
  Hi,

  I've been using the web2py template engine for a while. I don't
  remember
  if I had to make some change to the template.py module nor the
  version
  of the web2py this module comes from so I attach it in this email.
  This
  was the way I could make it work (there is probably a simpler 
  one):

           from template import TemplateParser

           context = {}
           output = cStringIO.StringIO()
           def response_writer(data, escape=False):
               output.write(unicode(data))
           context['response_writer'] = response_writer
           source = self._template()
           exec(str(TemplateParser(source, context=context,
               writer='response_writer'))) in context
           content = output.getvalue()

  I have a question about this module. It's GPL3 license. If I 
  modify
  it
  an ditribute it in an application, do this application have to be
  GPL3
  licensed?

  I apologize if my english if very bad. My language is spanish.

  El 06/06/11 00:59, Ryan Seto escribi�:

   Thanks! That does solve the import restricted dependency.

   The import globals for the Response() object is still an issue.

   I tried fiddling with my copy to build a mock Response() object
   if
   we
   can't import globals.

   This is what I have so far:

   gluon/template.py | line 867
   ~
        # Here to avoid circular Imports
        try:
            from globals import Response
        except:
            import cStringIO
            from xml.sax.saxutils import escape, quoteattr
            class Response():
                def __init__(self):
                    self.body = cStringIO.StringIO()
                def write(self, data, escape=True):
                    if not escape:
                        

Re: [web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-06 Thread Thadeus Burgess
What you really want is template.parse_template. Still requires restricted
but only for the exception raising.

Very simple.

from template import parse_template

print parse_template('main.html', path='/path/to/custom/views/',
context=dict())

--
Thadeus




On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro 
massimo.dipie...@gmail.com wrote:

 It is LGPL not GPL. very different. ;-)

 On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
 wrote:
  Hi,
 
  I've been using the web2py template engine for a while. I don't remember
  if I had to make some change to the template.py module nor the version
  of the web2py this module comes from so I attach it in this email. This
  was the way I could make it work (there is probably a simpler one):
 
   from template import TemplateParser
 
   context = {}
   output = cStringIO.StringIO()
   def response_writer(data, escape=False):
   output.write(unicode(data))
   context['response_writer'] = response_writer
   source = self._template()
   exec(str(TemplateParser(source, context=context,
   writer='response_writer'))) in context
   content = output.getvalue()
 
  I have a question about this module. It's GPL3 license. If I modify it
  an ditribute it in an application, do this application have to be GPL3
  licensed?
 
  I apologize if my english if very bad. My language is spanish.
 
  El 06/06/11 00:59, Ryan Seto escribi�:
 
 
 
 
 
 
 
   Thanks! That does solve the import restricted dependency.
 
   The import globals for the Response() object is still an issue.
 
   I tried fiddling with my copy to build a mock Response() object if we
   can't import globals.
 
   This is what I have so far:
 
   gluon/template.py | line 867
   ~
# Here to avoid circular Imports
try:
from globals import Response
except:
import cStringIO
from xml.sax.saxutils import escape, quoteattr
class Response():
def __init__(self):
self.body = cStringIO.StringIO()
def write(self, data, escape=True):
if not escape:
self.body.write(str(data))
elif hasattr(data,'xml') and callable(data.xml):
self.body.write(data.xml())
else:
# otherwise, make it a string
if not isinstance(data, (str, unicode)):
data = str(data)
elif isinstance(data, unicode):
data = data.encode('utf8',
 'xmlcharrefreplace')
self.body.write(data)
   ~
 
   I was planning to escape the data with the escape and quoteattr
   provided from xml.sax.saxutils, but I wasn't successful with that, so
   I left it out for now.
 
   Here's my code snippet:
 
   nixie/util/text.py | line 19
   ~
   import os, subprocess, paths, template
 
   def render(inFile):
content = pandoc(str(inFile))
templateFile = os.path.join(paths.get_prog_root(), 'templates',
 'view.html')
styles = []
styles.append(os.path.join(paths.get_prog_root(), 'css',
 'style.css'))
return template.render(
filename=templateFile,
context=dict(content=content, styles=styles)
)
   ~
 
   templates/view.html
   ~
   html
   head
  {{for css in styles:}}
link rel=stylesheet href={{=css}} type=text/css /
  {{pass}}
   /head
   body
  {{=content}}
   /body
   /html
   ~
 
   When I run this, I get an error message that doesn't really help me
   much.  Here's the output:
 
   ~
   C:\projects\nixiec:\Python26\python.exe Nixie.py README.txt
   Traceback (most recent call last):
  File C:\projects\nixie\nixie\qt\NixieAccessManager.py, line 41, in
   createRequest
reply = NixieReply(request.url(), self.GetOperation, parent=self)
  File C:\projects\nixie\nixie\qt\NixieReply.py, line 30, in
 __init__
self.content = text.render(url.toLocalFile())
  File C:\projects\nixie\nixie\util\text.py, line 22, in render
content = pandoc(str(inFile))
  File C:\projects\nixie\nixie\util\text.py, line 63, in pandoc
cwd = cwd
  File c:\Python26\lib\subprocess.py, line 623, in __init__
errread, errwrite)
  File c:\Python26\lib\subprocess.py, line 833, in _execute_child
startupinfo)
   WindowsError: [Error 123] The filename, directory name, or volume
   label syntax is incorrect
   ~
 
   Although it looks like pandoc(str(inFile)) might be the culprit from
   the stack trace, if I just use the output from pandoc(str(inFile)),
   everything works fine, so I doubt that this is the cause.
 
   I really appreciate your help.  I've started trying Pandoc
   (http://johnmacfarlane.net/pandoc/) instead of the python-markdown
  

Re: [web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-06 Thread Ryan Seto
Hm, that doesn't seem to be it either.  I don't get a requirement for
the globals module, but what I get back is this:

~
 print parse_template('view.html', path='templates', 
 context=dict(content='test'))
response.write(content)
response.write('\r\n', escape=False)
~

Am I supposed to execute what parse_template returns?

Thank you for your help.

On Mon, Jun 6, 2011 at 11:53 AM, Thadeus Burgess thade...@thadeusb.com wrote:
 What you really want is template.parse_template. Still requires restricted
 but only for the exception raising.

 Very simple.

 from template import parse_template

 print parse_template('main.html', path='/path/to/custom/views/',
 context=dict())

 --
 Thadeus




 On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro
 massimo.dipie...@gmail.com wrote:

 It is LGPL not GPL. very different. ;-)

 On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
 wrote:
  Hi,
 
  I've been using the web2py template engine for a while. I don't remember
  if I had to make some change to the template.py module nor the version
  of the web2py this module comes from so I attach it in this email. This
  was the way I could make it work (there is probably a simpler one):
 
           from template import TemplateParser
 
           context = {}
           output = cStringIO.StringIO()
           def response_writer(data, escape=False):
               output.write(unicode(data))
           context['response_writer'] = response_writer
           source = self._template()
           exec(str(TemplateParser(source, context=context,
               writer='response_writer'))) in context
           content = output.getvalue()
 
  I have a question about this module. It's GPL3 license. If I modify it
  an ditribute it in an application, do this application have to be GPL3
  licensed?
 
  I apologize if my english if very bad. My language is spanish.
 
  El 06/06/11 00:59, Ryan Seto escribi�:
 
 
 
 
 
 
 
   Thanks! That does solve the import restricted dependency.
 
   The import globals for the Response() object is still an issue.
 
   I tried fiddling with my copy to build a mock Response() object if we
   can't import globals.
 
   This is what I have so far:
 
   gluon/template.py | line 867
   ~
        # Here to avoid circular Imports
        try:
            from globals import Response
        except:
            import cStringIO
            from xml.sax.saxutils import escape, quoteattr
            class Response():
                def __init__(self):
                    self.body = cStringIO.StringIO()
                def write(self, data, escape=True):
                    if not escape:
                        self.body.write(str(data))
                    elif hasattr(data,'xml') and callable(data.xml):
                        self.body.write(data.xml())
                    else:
                        # otherwise, make it a string
                        if not isinstance(data, (str, unicode)):
                            data = str(data)
                        elif isinstance(data, unicode):
                            data = data.encode('utf8',
   'xmlcharrefreplace')
                        self.body.write(data)
   ~
 
   I was planning to escape the data with the escape and quoteattr
   provided from xml.sax.saxutils, but I wasn't successful with that, so
   I left it out for now.
 
   Here's my code snippet:
 
   nixie/util/text.py | line 19
   ~
   import os, subprocess, paths, template
 
   def render(inFile):
        content = pandoc(str(inFile))
        templateFile = os.path.join(paths.get_prog_root(), 'templates',
   'view.html')
        styles = []
        styles.append(os.path.join(paths.get_prog_root(), 'css',
   'style.css'))
        return template.render(
                filename=templateFile,
                context=dict(content=content, styles=styles)
            )
   ~
 
   templates/view.html
   ~
   html
   head
      {{for css in styles:}}
        link rel=stylesheet href={{=css}} type=text/css /
      {{pass}}
   /head
   body
      {{=content}}
   /body
   /html
   ~
 
   When I run this, I get an error message that doesn't really help me
   much.  Here's the output:
 
   ~
   C:\projects\nixiec:\Python26\python.exe Nixie.py README.txt
   Traceback (most recent call last):
      File C:\projects\nixie\nixie\qt\NixieAccessManager.py, line 41,
   in
   createRequest
        reply = NixieReply(request.url(), self.GetOperation, parent=self)
      File C:\projects\nixie\nixie\qt\NixieReply.py, line 30, in
   __init__
        self.content = text.render(url.toLocalFile())
      File C:\projects\nixie\nixie\util\text.py, line 22, in render
        content = pandoc(str(inFile))
      File C:\projects\nixie\nixie\util\text.py, line 63, in pandoc
        cwd = cwd
      File c:\Python26\lib\subprocess.py, line 623, in __init__
        errread, errwrite)
      File c:\Python26\lib\subprocess.py, line 833, in _execute_child
        

Re: [web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-06 Thread Thadeus Burgess
Yes..

You need some sort of response class that has a .write method... this can be
a hacked up cStringIO or other.

Alternatively you can perform the same thing manually by passing in writer,
which instead of the template engine writing ``response.write(%s)`` it
could write whatever you want as a callable function.


So for example, say you defined your ``CustomResponse`` class as earlier in
the list...

context['response'] = CustomReponse()
exec(parse_template(...)) in context
print context['response'].body.getvalue()

SO yeah... in the end if we implemented your suggestion of overriding the
response class on import, then the render function would work as expected.

--
Thadeus




On Mon, Jun 6, 2011 at 12:26 PM, Ryan Seto mr.werew...@gmail.com wrote:

 Hm, that doesn't seem to be it either.  I don't get a requirement for
 the globals module, but what I get back is this:

 ~
  print parse_template('view.html', path='templates',
 context=dict(content='test'))
 response.write(content)
 response.write('\r\n', escape=False)
 ~

 Am I supposed to execute what parse_template returns?

 Thank you for your help.

 On Mon, Jun 6, 2011 at 11:53 AM, Thadeus Burgess thade...@thadeusb.com
 wrote:
  What you really want is template.parse_template. Still requires
 restricted
  but only for the exception raising.
 
  Very simple.
 
  from template import parse_template
 
  print parse_template('main.html', path='/path/to/custom/views/',
  context=dict())
 
  --
  Thadeus
 
 
 
 
  On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro
  massimo.dipie...@gmail.com wrote:
 
  It is LGPL not GPL. very different. ;-)
 
  On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
  wrote:
   Hi,
  
   I've been using the web2py template engine for a while. I don't
 remember
   if I had to make some change to the template.py module nor the version
   of the web2py this module comes from so I attach it in this email.
 This
   was the way I could make it work (there is probably a simpler one):
  
from template import TemplateParser
  
context = {}
output = cStringIO.StringIO()
def response_writer(data, escape=False):
output.write(unicode(data))
context['response_writer'] = response_writer
source = self._template()
exec(str(TemplateParser(source, context=context,
writer='response_writer'))) in context
content = output.getvalue()
  
   I have a question about this module. It's GPL3 license. If I modify it
   an ditribute it in an application, do this application have to be GPL3
   licensed?
  
   I apologize if my english if very bad. My language is spanish.
  
   El 06/06/11 00:59, Ryan Seto escribi�:
  
  
  
  
  
  
  
Thanks! That does solve the import restricted dependency.
  
The import globals for the Response() object is still an issue.
  
I tried fiddling with my copy to build a mock Response() object if
 we
can't import globals.
  
This is what I have so far:
  
gluon/template.py | line 867
~
 # Here to avoid circular Imports
 try:
 from globals import Response
 except:
 import cStringIO
 from xml.sax.saxutils import escape, quoteattr
 class Response():
 def __init__(self):
 self.body = cStringIO.StringIO()
 def write(self, data, escape=True):
 if not escape:
 self.body.write(str(data))
 elif hasattr(data,'xml') and callable(data.xml):
 self.body.write(data.xml())
 else:
 # otherwise, make it a string
 if not isinstance(data, (str, unicode)):
 data = str(data)
 elif isinstance(data, unicode):
 data = data.encode('utf8',
'xmlcharrefreplace')
 self.body.write(data)
~
  
I was planning to escape the data with the escape and quoteattr
provided from xml.sax.saxutils, but I wasn't successful with that,
 so
I left it out for now.
  
Here's my code snippet:
  
nixie/util/text.py | line 19
~
import os, subprocess, paths, template
  
def render(inFile):
 content = pandoc(str(inFile))
 templateFile = os.path.join(paths.get_prog_root(), 'templates',
'view.html')
 styles = []
 styles.append(os.path.join(paths.get_prog_root(), 'css',
'style.css'))
 return template.render(
 filename=templateFile,
 context=dict(content=content, styles=styles)
 )
~
  
templates/view.html
~
html
head
   {{for css in styles:}}
 link rel=stylesheet href={{=css}} type=text/css /
   {{pass}}
/head
body
   {{=content}}

Re: [web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-06 Thread Ryan Seto
I see.

Would you like me to try and come up with a patch for this?

On Mon, Jun 6, 2011 at 1:53 PM, Thadeus Burgess thade...@thadeusb.com wrote:
 Yes..

 You need some sort of response class that has a .write method... this can be
 a hacked up cStringIO or other.

 Alternatively you can perform the same thing manually by passing in writer,
 which instead of the template engine writing ``response.write(%s)`` it
 could write whatever you want as a callable function.


 So for example, say you defined your ``CustomResponse`` class as earlier in
 the list...

 context['response'] = CustomReponse()
 exec(parse_template(...)) in context
 print context['response'].body.getvalue()

 SO yeah... in the end if we implemented your suggestion of overriding the
 response class on import, then the render function would work as expected.

 --
 Thadeus




 On Mon, Jun 6, 2011 at 12:26 PM, Ryan Seto mr.werew...@gmail.com wrote:

 Hm, that doesn't seem to be it either.  I don't get a requirement for
 the globals module, but what I get back is this:

 ~
  print parse_template('view.html', path='templates',
  context=dict(content='test'))
 response.write(content)
 response.write('\r\n', escape=False)
 ~

 Am I supposed to execute what parse_template returns?

 Thank you for your help.

 On Mon, Jun 6, 2011 at 11:53 AM, Thadeus Burgess thade...@thadeusb.com
 wrote:
  What you really want is template.parse_template. Still requires
  restricted
  but only for the exception raising.
 
  Very simple.
 
  from template import parse_template
 
  print parse_template('main.html', path='/path/to/custom/views/',
  context=dict())
 
  --
  Thadeus
 
 
 
 
  On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro
  massimo.dipie...@gmail.com wrote:
 
  It is LGPL not GPL. very different. ;-)
 
  On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
  wrote:
   Hi,
  
   I've been using the web2py template engine for a while. I don't
   remember
   if I had to make some change to the template.py module nor the
   version
   of the web2py this module comes from so I attach it in this email.
   This
   was the way I could make it work (there is probably a simpler one):
  
            from template import TemplateParser
  
            context = {}
            output = cStringIO.StringIO()
            def response_writer(data, escape=False):
                output.write(unicode(data))
            context['response_writer'] = response_writer
            source = self._template()
            exec(str(TemplateParser(source, context=context,
                writer='response_writer'))) in context
            content = output.getvalue()
  
   I have a question about this module. It's GPL3 license. If I modify
   it
   an ditribute it in an application, do this application have to be
   GPL3
   licensed?
  
   I apologize if my english if very bad. My language is spanish.
  
   El 06/06/11 00:59, Ryan Seto escribi�:
  
  
  
  
  
  
  
Thanks! That does solve the import restricted dependency.
  
The import globals for the Response() object is still an issue.
  
I tried fiddling with my copy to build a mock Response() object if
we
can't import globals.
  
This is what I have so far:
  
gluon/template.py | line 867
~
     # Here to avoid circular Imports
     try:
         from globals import Response
     except:
         import cStringIO
         from xml.sax.saxutils import escape, quoteattr
         class Response():
             def __init__(self):
                 self.body = cStringIO.StringIO()
             def write(self, data, escape=True):
                 if not escape:
                     self.body.write(str(data))
                 elif hasattr(data,'xml') and callable(data.xml):
                     self.body.write(data.xml())
                 else:
                     # otherwise, make it a string
                     if not isinstance(data, (str, unicode)):
                         data = str(data)
                     elif isinstance(data, unicode):
                         data = data.encode('utf8',
'xmlcharrefreplace')
                     self.body.write(data)
~
  
I was planning to escape the data with the escape and quoteattr
provided from xml.sax.saxutils, but I wasn't successful with that,
so
I left it out for now.
  
Here's my code snippet:
  
nixie/util/text.py | line 19
~
import os, subprocess, paths, template
  
def render(inFile):
     content = pandoc(str(inFile))
     templateFile = os.path.join(paths.get_prog_root(),
'templates',
'view.html')
     styles = []
     styles.append(os.path.join(paths.get_prog_root(), 'css',
'style.css'))
     return template.render(
             filename=templateFile,
             context=dict(content=content, styles=styles)
         )
~
  

Re: [web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-06 Thread Thadeus Burgess
What you have looked good. The exception looks like its pandocs fault not
the template system.

--
Thadeus




On Mon, Jun 6, 2011 at 1:03 PM, Ryan Seto mr.werew...@gmail.com wrote:

 I see.

 Would you like me to try and come up with a patch for this?

 On Mon, Jun 6, 2011 at 1:53 PM, Thadeus Burgess thade...@thadeusb.com
 wrote:
  Yes..
 
  You need some sort of response class that has a .write method... this can
 be
  a hacked up cStringIO or other.
 
  Alternatively you can perform the same thing manually by passing in
 writer,
  which instead of the template engine writing ``response.write(%s)`` it
  could write whatever you want as a callable function.
 
 
  So for example, say you defined your ``CustomResponse`` class as earlier
 in
  the list...
 
  context['response'] = CustomReponse()
  exec(parse_template(...)) in context
  print context['response'].body.getvalue()
 
  SO yeah... in the end if we implemented your suggestion of overriding the
  response class on import, then the render function would work as
 expected.
 
  --
  Thadeus
 
 
 
 
  On Mon, Jun 6, 2011 at 12:26 PM, Ryan Seto mr.werew...@gmail.com
 wrote:
 
  Hm, that doesn't seem to be it either.  I don't get a requirement for
  the globals module, but what I get back is this:
 
  ~
   print parse_template('view.html', path='templates',
   context=dict(content='test'))
  response.write(content)
  response.write('\r\n', escape=False)
  ~
 
  Am I supposed to execute what parse_template returns?
 
  Thank you for your help.
 
  On Mon, Jun 6, 2011 at 11:53 AM, Thadeus Burgess thade...@thadeusb.com
 
  wrote:
   What you really want is template.parse_template. Still requires
   restricted
   but only for the exception raising.
  
   Very simple.
  
   from template import parse_template
  
   print parse_template('main.html', path='/path/to/custom/views/',
   context=dict())
  
   --
   Thadeus
  
  
  
  
   On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro
   massimo.dipie...@gmail.com wrote:
  
   It is LGPL not GPL. very different. ;-)
  
   On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
   wrote:
Hi,
   
I've been using the web2py template engine for a while. I don't
remember
if I had to make some change to the template.py module nor the
version
of the web2py this module comes from so I attach it in this email.
This
was the way I could make it work (there is probably a simpler one):
   
 from template import TemplateParser
   
 context = {}
 output = cStringIO.StringIO()
 def response_writer(data, escape=False):
 output.write(unicode(data))
 context['response_writer'] = response_writer
 source = self._template()
 exec(str(TemplateParser(source, context=context,
 writer='response_writer'))) in context
 content = output.getvalue()
   
I have a question about this module. It's GPL3 license. If I modify
it
an ditribute it in an application, do this application have to be
GPL3
licensed?
   
I apologize if my english if very bad. My language is spanish.
   
El 06/06/11 00:59, Ryan Seto escribi�:
   
   
   
   
   
   
   
 Thanks! That does solve the import restricted dependency.
   
 The import globals for the Response() object is still an issue.
   
 I tried fiddling with my copy to build a mock Response() object
 if
 we
 can't import globals.
   
 This is what I have so far:
   
 gluon/template.py | line 867
 ~
  # Here to avoid circular Imports
  try:
  from globals import Response
  except:
  import cStringIO
  from xml.sax.saxutils import escape, quoteattr
  class Response():
  def __init__(self):
  self.body = cStringIO.StringIO()
  def write(self, data, escape=True):
  if not escape:
  self.body.write(str(data))
  elif hasattr(data,'xml') and callable(data.xml):
  self.body.write(data.xml())
  else:
  # otherwise, make it a string
  if not isinstance(data, (str, unicode)):
  data = str(data)
  elif isinstance(data, unicode):
  data = data.encode('utf8',
 'xmlcharrefreplace')
  self.body.write(data)
 ~
   
 I was planning to escape the data with the escape and quoteattr
 provided from xml.sax.saxutils, but I wasn't successful with
 that,
 so
 I left it out for now.
   
 Here's my code snippet:
   
 nixie/util/text.py | line 19
 ~
 import os, subprocess, paths, template
   
 def render(inFile):
  content = pandoc(str(inFile))
  

Re: [web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-06 Thread Ryan Seto
If you could, let me try and get my solution to work.

When I'm done, should I post a patch here in the group or should I
email it directly to you?

On Mon, Jun 6, 2011 at 2:26 PM, Thadeus Burgess thade...@thadeusb.com wrote:
 What you have looked good. The exception looks like its pandocs fault not
 the template system.

 --
 Thadeus




 On Mon, Jun 6, 2011 at 1:03 PM, Ryan Seto mr.werew...@gmail.com wrote:

 I see.

 Would you like me to try and come up with a patch for this?

 On Mon, Jun 6, 2011 at 1:53 PM, Thadeus Burgess thade...@thadeusb.com
 wrote:
  Yes..
 
  You need some sort of response class that has a .write method... this
  can be
  a hacked up cStringIO or other.
 
  Alternatively you can perform the same thing manually by passing in
  writer,
  which instead of the template engine writing ``response.write(%s)`` it
  could write whatever you want as a callable function.
 
 
  So for example, say you defined your ``CustomResponse`` class as earlier
  in
  the list...
 
  context['response'] = CustomReponse()
  exec(parse_template(...)) in context
  print context['response'].body.getvalue()
 
  SO yeah... in the end if we implemented your suggestion of overriding
  the
  response class on import, then the render function would work as
  expected.
 
  --
  Thadeus
 
 
 
 
  On Mon, Jun 6, 2011 at 12:26 PM, Ryan Seto mr.werew...@gmail.com
  wrote:
 
  Hm, that doesn't seem to be it either.  I don't get a requirement for
  the globals module, but what I get back is this:
 
  ~
   print parse_template('view.html', path='templates',
   context=dict(content='test'))
  response.write(content)
  response.write('\r\n', escape=False)
  ~
 
  Am I supposed to execute what parse_template returns?
 
  Thank you for your help.
 
  On Mon, Jun 6, 2011 at 11:53 AM, Thadeus Burgess
  thade...@thadeusb.com
  wrote:
   What you really want is template.parse_template. Still requires
   restricted
   but only for the exception raising.
  
   Very simple.
  
   from template import parse_template
  
   print parse_template('main.html', path='/path/to/custom/views/',
   context=dict())
  
   --
   Thadeus
  
  
  
  
   On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro
   massimo.dipie...@gmail.com wrote:
  
   It is LGPL not GPL. very different. ;-)
  
   On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
   wrote:
Hi,
   
I've been using the web2py template engine for a while. I don't
remember
if I had to make some change to the template.py module nor the
version
of the web2py this module comes from so I attach it in this email.
This
was the way I could make it work (there is probably a simpler
one):
   
         from template import TemplateParser
   
         context = {}
         output = cStringIO.StringIO()
         def response_writer(data, escape=False):
             output.write(unicode(data))
         context['response_writer'] = response_writer
         source = self._template()
         exec(str(TemplateParser(source, context=context,
             writer='response_writer'))) in context
         content = output.getvalue()
   
I have a question about this module. It's GPL3 license. If I
modify
it
an ditribute it in an application, do this application have to be
GPL3
licensed?
   
I apologize if my english if very bad. My language is spanish.
   
El 06/06/11 00:59, Ryan Seto escribi�:
   
   
   
   
   
   
   
 Thanks! That does solve the import restricted dependency.
   
 The import globals for the Response() object is still an issue.
   
 I tried fiddling with my copy to build a mock Response() object
 if
 we
 can't import globals.
   
 This is what I have so far:
   
 gluon/template.py | line 867
 ~
      # Here to avoid circular Imports
      try:
          from globals import Response
      except:
          import cStringIO
          from xml.sax.saxutils import escape, quoteattr
          class Response():
              def __init__(self):
                  self.body = cStringIO.StringIO()
              def write(self, data, escape=True):
                  if not escape:
                      self.body.write(str(data))
                  elif hasattr(data,'xml') and
 callable(data.xml):
                      self.body.write(data.xml())
                  else:
                      # otherwise, make it a string
                      if not isinstance(data, (str, unicode)):
                          data = str(data)
                      elif isinstance(data, unicode):
                          data = data.encode('utf8',
 'xmlcharrefreplace')
                      self.body.write(data)
 ~
   
 I was planning to escape the data with the escape and quoteattr
 provided from xml.sax.saxutils, but I wasn't successful with
   

[web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-06 Thread Massimo Di Pierro
somebody email me the patch. :-)

On Jun 6, 1:26 pm, Thadeus Burgess thade...@thadeusb.com wrote:
 What you have looked good. The exception looks like its pandocs fault not
 the template system.

 --
 Thadeus







 On Mon, Jun 6, 2011 at 1:03 PM, Ryan Seto mr.werew...@gmail.com wrote:
  I see.

  Would you like me to try and come up with a patch for this?

  On Mon, Jun 6, 2011 at 1:53 PM, Thadeus Burgess thade...@thadeusb.com
  wrote:
   Yes..

   You need some sort of response class that has a .write method... this can
  be
   a hacked up cStringIO or other.

   Alternatively you can perform the same thing manually by passing in
  writer,
   which instead of the template engine writing ``response.write(%s)`` it
   could write whatever you want as a callable function.

   So for example, say you defined your ``CustomResponse`` class as earlier
  in
   the list...

   context['response'] = CustomReponse()
   exec(parse_template(...)) in context
   print context['response'].body.getvalue()

   SO yeah... in the end if we implemented your suggestion of overriding the
   response class on import, then the render function would work as
  expected.

   --
   Thadeus

   On Mon, Jun 6, 2011 at 12:26 PM, Ryan Seto mr.werew...@gmail.com
  wrote:

   Hm, that doesn't seem to be it either.  I don't get a requirement for
   the globals module, but what I get back is this:

   ~
print parse_template('view.html', path='templates',
context=dict(content='test'))
   response.write(content)
   response.write('\r\n', escape=False)
   ~

   Am I supposed to execute what parse_template returns?

   Thank you for your help.

   On Mon, Jun 6, 2011 at 11:53 AM, Thadeus Burgess thade...@thadeusb.com

   wrote:
What you really want is template.parse_template. Still requires
restricted
but only for the exception raising.

Very simple.

from template import parse_template

print parse_template('main.html', path='/path/to/custom/views/',
context=dict())

--
Thadeus

On Mon, Jun 6, 2011 at 12:55 AM, Massimo Di Pierro
massimo.dipie...@gmail.com wrote:

It is LGPL not GPL. very different. ;-)

On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
wrote:
 Hi,

 I've been using the web2py template engine for a while. I don't
 remember
 if I had to make some change to the template.py module nor the
 version
 of the web2py this module comes from so I attach it in this email.
 This
 was the way I could make it work (there is probably a simpler one):

          from template import TemplateParser

          context = {}
          output = cStringIO.StringIO()
          def response_writer(data, escape=False):
              output.write(unicode(data))
          context['response_writer'] = response_writer
          source = self._template()
          exec(str(TemplateParser(source, context=context,
              writer='response_writer'))) in context
          content = output.getvalue()

 I have a question about this module. It's GPL3 license. If I modify
 it
 an ditribute it in an application, do this application have to be
 GPL3
 licensed?

 I apologize if my english if very bad. My language is spanish.

 El 06/06/11 00:59, Ryan Seto escribi�:

  Thanks! That does solve the import restricted dependency.

  The import globals for the Response() object is still an issue.

  I tried fiddling with my copy to build a mock Response() object
  if
  we
  can't import globals.

  This is what I have so far:

  gluon/template.py | line 867
  ~
       # Here to avoid circular Imports
       try:
           from globals import Response
       except:
           import cStringIO
           from xml.sax.saxutils import escape, quoteattr
           class Response():
               def __init__(self):
                   self.body = cStringIO.StringIO()
               def write(self, data, escape=True):
                   if not escape:
                       self.body.write(str(data))
                   elif hasattr(data,'xml') and callable(data.xml):
                       self.body.write(data.xml())
                   else:
                       # otherwise, make it a string
                       if not isinstance(data, (str, unicode)):
                           data = str(data)
                       elif isinstance(data, unicode):
                           data = data.encode('utf8',
  'xmlcharrefreplace')
                       self.body.write(data)
  ~

  I was planning to escape the data with the escape and quoteattr
  provided from xml.sax.saxutils, but I wasn't successful with
  that,
  so
  I left it out for now.

  Here's my code snippet:

  nixie/util/text.py | line 19
  ~
  import os, 

[web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-05 Thread Ryan Seto
Thank you very much for your prompt response.

It looks like the file gluon/template.py does pull in some extra
dependencies, however.

It tries to import restricted on line 20 and import globals on line 863.

The restricted module dependency may be easy to remove, since it
appears that it only uses it for raising exceptions.  However, it
looks like the Response object is used from the globals module.

On Sun, Jun 5, 2011 at 9:12 PM, Massimo Di Pierro
massimo.dipie...@gmail.com wrote:


 On Jun 4, 7:58 pm, Ryan Seto mr.werew...@gmail.com wrote:
  I really like how elegant and simple it is to create views in web2py.
  Would it be possible to use the view/template engine in a standalone
  application?

 yes.

 you only need the file gluon/template.py

 look at the example inside. You only the render function.

 
  I'm writing a desktop application to view formatted text, like
  markdown, using PyQT's QtWebKit to render the generated html, and I
  would like to integrate web2py's method for generating views into my
  project.
 
  I've been looking through web2py's source and the mailing list, and it
  seems that response.render( view_text, dict() ) might be the closest
  thing to what I'm looking for.  However, it looks like there's a lot
  of dependencies wrapped around it and the objects weren't made to be
  used in the context of another application.
 
  If this is the case, would it make sense to compartmentalize the parts
  for rendering a view into it's own module so they can be used in a
  standalone application, similar to the dal?  I would be willing to
  come up with a patch for this, if I could get some hints on where to
  start.


[web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-05 Thread Massimo Di Pierro
check trunk. I removed it. I am sure we can do better.

On Jun 5, 2011, at 9:26 PM, Ryan Seto wrote:

 Thank you very much for your prompt response.
 
 It looks like the file gluon/template.py does pull in some extra
 dependencies, however.
 
 It tries to import restricted on line 20 and import globals on line 863.
 
 The restricted module dependency may be easy to remove, since it
 appears that it only uses it for raising exceptions.  However, it
 looks like the Response object is used from the globals module.
 
 On Sun, Jun 5, 2011 at 9:12 PM, Massimo Di Pierro
 massimo.dipie...@gmail.com wrote:
 
 
 On Jun 4, 7:58 pm, Ryan Seto mr.werew...@gmail.com wrote:
 I really like how elegant and simple it is to create views in web2py.
 Would it be possible to use the view/template engine in a standalone
 application?
 
 yes.
 
 you only need the file gluon/template.py
 
 look at the example inside. You only the render function.
 
 
 I'm writing a desktop application to view formatted text, like
 markdown, using PyQT's QtWebKit to render the generated html, and I
 would like to integrate web2py's method for generating views into my
 project.
 
 I've been looking through web2py's source and the mailing list, and it
 seems that response.render( view_text, dict() ) might be the closest
 thing to what I'm looking for.  However, it looks like there's a lot
 of dependencies wrapped around it and the objects weren't made to be
 used in the context of another application.
 
 If this is the case, would it make sense to compartmentalize the parts
 for rendering a view into it's own module so they can be used in a
 standalone application, similar to the dal?  I would be willing to
 come up with a patch for this, if I could get some hints on where to
 start.



[web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-05 Thread Ryan Seto
Thanks! That does solve the import restricted dependency.

The import globals for the Response() object is still an issue.

I tried fiddling with my copy to build a mock Response() object if we
can't import globals.

This is what I have so far:

gluon/template.py | line 867
~
# Here to avoid circular Imports
try:
from globals import Response
except:
import cStringIO
from xml.sax.saxutils import escape, quoteattr
class Response():
def __init__(self):
self.body = cStringIO.StringIO()
def write(self, data, escape=True):
if not escape:
self.body.write(str(data))
elif hasattr(data,'xml') and callable(data.xml):
self.body.write(data.xml())
else:
# otherwise, make it a string
if not isinstance(data, (str, unicode)):
data = str(data)
elif isinstance(data, unicode):
data = data.encode('utf8', 'xmlcharrefreplace')
self.body.write(data)
~

I was planning to escape the data with the escape and quoteattr
provided from xml.sax.saxutils, but I wasn't successful with that, so
I left it out for now.

Here's my code snippet:

nixie/util/text.py | line 19
~
import os, subprocess, paths, template

def render(inFile):
content = pandoc(str(inFile))
templateFile = os.path.join(paths.get_prog_root(), 'templates', 'view.html')
styles = []
styles.append(os.path.join(paths.get_prog_root(), 'css', 'style.css'))
return template.render(
filename=templateFile,
context=dict(content=content, styles=styles)
)
~

templates/view.html
~
html
head
  {{for css in styles:}}
link rel=stylesheet href={{=css}} type=text/css /
  {{pass}}
/head
body
  {{=content}}
/body
/html
~

When I run this, I get an error message that doesn't really help me
much.  Here's the output:

~
C:\projects\nixiec:\Python26\python.exe Nixie.py README.txt
Traceback (most recent call last):
  File C:\projects\nixie\nixie\qt\NixieAccessManager.py, line 41, in
createRequest
reply = NixieReply(request.url(), self.GetOperation, parent=self)
  File C:\projects\nixie\nixie\qt\NixieReply.py, line 30, in __init__
self.content = text.render(url.toLocalFile())
  File C:\projects\nixie\nixie\util\text.py, line 22, in render
content = pandoc(str(inFile))
  File C:\projects\nixie\nixie\util\text.py, line 63, in pandoc
cwd = cwd
  File c:\Python26\lib\subprocess.py, line 623, in __init__
errread, errwrite)
  File c:\Python26\lib\subprocess.py, line 833, in _execute_child
startupinfo)
WindowsError: [Error 123] The filename, directory name, or volume
label syntax is incorrect
~

Although it looks like pandoc(str(inFile)) might be the culprit from
the stack trace, if I just use the output from pandoc(str(inFile)),
everything works fine, so I doubt that this is the cause.

I really appreciate your help.  I've started trying Pandoc
(http://johnmacfarlane.net/pandoc/) instead of the python-markdown
module, and I noticed that Pandoc comes with it's own template system.
 So, it may make more sense for me to use Pandoc's templates instead,
if I decide to go with it.


On Sun, Jun 5, 2011 at 10:45 PM, Massimo Di Pierro
massimo.dipie...@gmail.com wrote:
 check trunk. I removed it. I am sure we can do better.

 On Jun 5, 2011, at 9:26 PM, Ryan Seto wrote:

 Thank you very much for your prompt response.

 It looks like the file gluon/template.py does pull in some extra
 dependencies, however.

 It tries to import restricted on line 20 and import globals on line 863.

 The restricted module dependency may be easy to remove, since it
 appears that it only uses it for raising exceptions.  However, it
 looks like the Response object is used from the globals module.

 On Sun, Jun 5, 2011 at 9:12 PM, Massimo Di Pierro
 massimo.dipie...@gmail.com wrote:


 On Jun 4, 7:58 pm, Ryan Seto mr.werew...@gmail.com wrote:
 I really like how elegant and simple it is to create views in web2py.
 Would it be possible to use the view/template engine in a standalone
 application?

 yes.

 you only need the file gluon/template.py

 look at the example inside. You only the render function.


 I'm writing a desktop application to view formatted text, like
 markdown, using PyQT's QtWebKit to render the generated html, and I
 would like to integrate web2py's method for generating views into my
 project.

 I've been looking through web2py's source and the mailing list, and it
 seems that response.render( view_text, dict() ) might be the closest
 thing to what I'm looking for.  However, it looks like there's a lot
 of dependencies wrapped around it and the objects weren't made to be
 used in the context of another application.

 If this is the case, would it make sense to compartmentalize the parts
 for rendering a view 

Re: [web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-05 Thread Karel Antonio Verdecia Ortiz

Hi,

I've been using the web2py template engine for a while. I don't remember 
if I had to make some change to the template.py module nor the version 
of the web2py this module comes from so I attach it in this email. This 
was the way I could make it work (there is probably a simpler one):


from template import TemplateParser

context = {}
output = cStringIO.StringIO()
def response_writer(data, escape=False):
output.write(unicode(data))
context['response_writer'] = response_writer
source = self._template()
exec(str(TemplateParser(source, context=context,
writer='response_writer'))) in context
content = output.getvalue()


I have a question about this module. It's GPL3 license. If I modify it 
an ditribute it in an application, do this application have to be GPL3 
licensed?


I apologize if my english if very bad. My language is spanish.


El 06/06/11 00:59, Ryan Seto escribió:

Thanks! That does solve the import restricted dependency.

The import globals for the Response() object is still an issue.

I tried fiddling with my copy to build a mock Response() object if we
can't import globals.

This is what I have so far:

gluon/template.py | line 867
~
 # Here to avoid circular Imports
 try:
 from globals import Response
 except:
 import cStringIO
 from xml.sax.saxutils import escape, quoteattr
 class Response():
 def __init__(self):
 self.body = cStringIO.StringIO()
 def write(self, data, escape=True):
 if not escape:
 self.body.write(str(data))
 elif hasattr(data,'xml') and callable(data.xml):
 self.body.write(data.xml())
 else:
 # otherwise, make it a string
 if not isinstance(data, (str, unicode)):
 data = str(data)
 elif isinstance(data, unicode):
 data = data.encode('utf8', 'xmlcharrefreplace')
 self.body.write(data)
~

I was planning to escape the data with the escape and quoteattr
provided from xml.sax.saxutils, but I wasn't successful with that, so
I left it out for now.

Here's my code snippet:

nixie/util/text.py | line 19
~
import os, subprocess, paths, template

def render(inFile):
 content = pandoc(str(inFile))
 templateFile = os.path.join(paths.get_prog_root(), 'templates', 
'view.html')
 styles = []
 styles.append(os.path.join(paths.get_prog_root(), 'css', 'style.css'))
 return template.render(
 filename=templateFile,
 context=dict(content=content, styles=styles)
 )
~

templates/view.html
~
html
head
   {{for css in styles:}}
 link rel=stylesheet href={{=css}} type=text/css /
   {{pass}}
/head
body
   {{=content}}
/body
/html
~

When I run this, I get an error message that doesn't really help me
much.  Here's the output:

~
C:\projects\nixiec:\Python26\python.exe Nixie.py README.txt
Traceback (most recent call last):
   File C:\projects\nixie\nixie\qt\NixieAccessManager.py, line 41, in
createRequest
 reply = NixieReply(request.url(), self.GetOperation, parent=self)
   File C:\projects\nixie\nixie\qt\NixieReply.py, line 30, in __init__
 self.content = text.render(url.toLocalFile())
   File C:\projects\nixie\nixie\util\text.py, line 22, in render
 content = pandoc(str(inFile))
   File C:\projects\nixie\nixie\util\text.py, line 63, in pandoc
 cwd = cwd
   File c:\Python26\lib\subprocess.py, line 623, in __init__
 errread, errwrite)
   File c:\Python26\lib\subprocess.py, line 833, in _execute_child
 startupinfo)
WindowsError: [Error 123] The filename, directory name, or volume
label syntax is incorrect
~

Although it looks like pandoc(str(inFile)) might be the culprit from
the stack trace, if I just use the output from pandoc(str(inFile)),
everything works fine, so I doubt that this is the cause.

I really appreciate your help.  I've started trying Pandoc
(http://johnmacfarlane.net/pandoc/) instead of the python-markdown
module, and I noticed that Pandoc comes with it's own template system.
  So, it may make more sense for me to use Pandoc's templates instead,
if I decide to go with it.


On Sun, Jun 5, 2011 at 10:45 PM, Massimo Di Pierro
massimo.dipie...@gmail.com  wrote:

check trunk. I removed it. I am sure we can do better.

On Jun 5, 2011, at 9:26 PM, Ryan Seto wrote:


Thank you very much for your prompt response.

It looks like the file gluon/template.py does pull in some extra
dependencies, however.

It tries to import restricted on line 20 and import globals on line 863.

The restricted module dependency may be easy to remove, since it
appears that it only uses it for raising exceptions.  However, it
looks like the Response object is used from the globals module.

On Sun, Jun 5, 2011 at 9:12 

[web2py] Re: Using web2py's view/template engine in a standalone application

2011-06-05 Thread Massimo Di Pierro
It is LGPL not GPL. very different. ;-)

On Jun 6, 12:36 am, Karel Antonio Verdecia Ortiz kverde...@uci.cu
wrote:
 Hi,

 I've been using the web2py template engine for a while. I don't remember
 if I had to make some change to the template.py module nor the version
 of the web2py this module comes from so I attach it in this email. This
 was the way I could make it work (there is probably a simpler one):

          from template import TemplateParser

          context = {}
          output = cStringIO.StringIO()
          def response_writer(data, escape=False):
              output.write(unicode(data))
          context['response_writer'] = response_writer
          source = self._template()
          exec(str(TemplateParser(source, context=context,
              writer='response_writer'))) in context
          content = output.getvalue()

 I have a question about this module. It's GPL3 license. If I modify it
 an ditribute it in an application, do this application have to be GPL3
 licensed?

 I apologize if my english if very bad. My language is spanish.

 El 06/06/11 00:59, Ryan Seto escribi�:







  Thanks! That does solve the import restricted dependency.

  The import globals for the Response() object is still an issue.

  I tried fiddling with my copy to build a mock Response() object if we
  can't import globals.

  This is what I have so far:

  gluon/template.py | line 867
  ~
       # Here to avoid circular Imports
       try:
           from globals import Response
       except:
           import cStringIO
           from xml.sax.saxutils import escape, quoteattr
           class Response():
               def __init__(self):
                   self.body = cStringIO.StringIO()
               def write(self, data, escape=True):
                   if not escape:
                       self.body.write(str(data))
                   elif hasattr(data,'xml') and callable(data.xml):
                       self.body.write(data.xml())
                   else:
                       # otherwise, make it a string
                       if not isinstance(data, (str, unicode)):
                           data = str(data)
                       elif isinstance(data, unicode):
                           data = data.encode('utf8', 'xmlcharrefreplace')
                       self.body.write(data)
  ~

  I was planning to escape the data with the escape and quoteattr
  provided from xml.sax.saxutils, but I wasn't successful with that, so
  I left it out for now.

  Here's my code snippet:

  nixie/util/text.py | line 19
  ~
  import os, subprocess, paths, template

  def render(inFile):
       content = pandoc(str(inFile))
       templateFile = os.path.join(paths.get_prog_root(), 'templates', 
  'view.html')
       styles = []
       styles.append(os.path.join(paths.get_prog_root(), 'css', 'style.css'))
       return template.render(
               filename=templateFile,
               context=dict(content=content, styles=styles)
           )
  ~

  templates/view.html
  ~
  html
  head
     {{for css in styles:}}
       link rel=stylesheet href={{=css}} type=text/css /
     {{pass}}
  /head
  body
     {{=content}}
  /body
  /html
  ~

  When I run this, I get an error message that doesn't really help me
  much.  Here's the output:

  ~
  C:\projects\nixiec:\Python26\python.exe Nixie.py README.txt
  Traceback (most recent call last):
     File C:\projects\nixie\nixie\qt\NixieAccessManager.py, line 41, in
  createRequest
       reply = NixieReply(request.url(), self.GetOperation, parent=self)
     File C:\projects\nixie\nixie\qt\NixieReply.py, line 30, in __init__
       self.content = text.render(url.toLocalFile())
     File C:\projects\nixie\nixie\util\text.py, line 22, in render
       content = pandoc(str(inFile))
     File C:\projects\nixie\nixie\util\text.py, line 63, in pandoc
       cwd = cwd
     File c:\Python26\lib\subprocess.py, line 623, in __init__
       errread, errwrite)
     File c:\Python26\lib\subprocess.py, line 833, in _execute_child
       startupinfo)
  WindowsError: [Error 123] The filename, directory name, or volume
  label syntax is incorrect
  ~

  Although it looks like pandoc(str(inFile)) might be the culprit from
  the stack trace, if I just use the output from pandoc(str(inFile)),
  everything works fine, so I doubt that this is the cause.

  I really appreciate your help.  I've started trying Pandoc
  (http://johnmacfarlane.net/pandoc/) instead of the python-markdown
  module, and I noticed that Pandoc comes with it's own template system.
    So, it may make more sense for me to use Pandoc's templates instead,
  if I decide to go with it.

  On Sun, Jun 5, 2011 at 10:45 PM, Massimo Di Pierro
  massimo.dipie...@gmail.com  wrote:
  check trunk. I removed it. I am sure we can do better.

  On Jun 5, 2011, at 9:26 PM, Ryan Seto wrote:

  Thank you very much for your prompt response.

  It looks like the file gluon/template.py does pull in some