[mod_python] Include file without writing output

Graham Dumpleton graham.dumpleton at gmail.com
Wed Jul 1 19:23:53 EDT 2009


Put the common stuff in a standard Python module as a variable and
import that module into PSP and then reference variable containing
common stuff from PSP code.

That or look at using traditional Apache server side include (SSI).

Avoid writing your output filter, it is much overkill.

Graham

2009/7/1 Andreas Sommer <AndiDog at web.de>:
> The only "simple" solution is the following output filter:
>
> def outputfilter(filter):
>   str = filter.read()
>   filter.write(str.lstrip())
>   filter.close()
>
> Can't that be done easier, i.e. without Apache configuration?
>
> Andreas Sommer wrote:
>>
>> I want to include a common "header" file in each of my PSP files (which
>> should produce XML), for example
>>
>> <%@ include file="common.inc" %><%
>> req.content_type = "text/xml"
>> # output some XML code here
>> %>
>>
>>
>> The "common.inc" file begins with <% and ends with %>, but because editors
>> automatically add a newline, it ends with a newline character.
>> My problem is that the XML output follows after the newline character, but
>> *must* be at the very beginning of the output - just try opening such a XML
>> file in Firefox and it will give you an error "XML or text declaration not
>> at start of entity". Removing the newline character causes mod_python to
>> throw an error.
>>
>>
>> I tried to work around that problem by including the common file like
>> this:
>>
>> PSP(req, "common.inc").run()
>>
>> ...but that gives me the following error:
>>
>> MOD_PYTHON ERROR
>>
>> ProcessId:      2787
>> Interpreter:    '127.0.1.1'
>>
>> ServerName:     '127.0.1.1'
>> DocumentRoot:   '/var/www/'
>>
>> URI:            '/login.psp'
>> Location:       None
>> Directory:      '/var/www/'
>> Filename:       '/var/www/login.psp'
>> PathInfo:       ''
>>
>> Phase:          'PythonHandler'
>> Handler:        'mod_python.psp'
>>
>> Traceback (most recent call last):
>>
>>  File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line
>> 1537, in HandlerDispatch
>>   default=default_handler, arg=req, silent=hlist.silent)
>>  File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line
>> 1229, in _process_target
>>   result = _execute_target(config, req, object, arg)
>>  File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line
>> 1128, in _execute_target
>>   result = object(arg)
>>  File "/usr/lib/python2.5/site-packages/mod_python/psp.py", line 337, in
>> handler
>>   p.run()
>>  File "/usr/lib/python2.5/site-packages/mod_python/psp.py", line 243, in
>> run
>>   exec code in global_scope
>>  File "/var/www/login.psp", line 2, in <module>
>>   PSP(req, filename = "common.inc")
>>  File "/usr/lib/python2.5/site-packages/mod_python/psp.py", line 119, in
>> __init__
>>   self.load_from_file()
>>  File "/usr/lib/python2.5/site-packages/mod_python/psp.py", line 185, in
>> load_from_file
>>   code = self.cfile_get(filename, mtime)
>>  File "/usr/lib/python2.5/site-packages/mod_python/psp.py", line 169, in
>> cfile_get
>>   return str2code(open(cname).read())
>>  File "/usr/lib/python2.5/site-packages/mod_python/psp.py", line 57, in
>> str2code
>>   return new.code(*marshal.loads(s))
>> MemoryError
>>
>>
>> Using the absolute path /var/www/common.inc doesn't work either. Any
>> suggestions how to work around this problem??
>> _______________________________________________
>> Mod_python mailing list
>> Mod_python at modpython.org
>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>



More information about the Mod_python mailing list