(Fwd) Re: [mod_python] How to pass values

export at hope.cz export at hope.cz
Sat Jan 27 07:12:07 EST 2007


Graham ,
Thank you again  for your help.
So I added .both to input filter and handler
  req.method
  req.uri
   req.connection.id
Now they looks like this:

###############
from mod_python import apache,Cookie
def inputfilter(filter):
	filter.req.log_error('Running inputfilter')
	filter.req.log_error('Setting myflag..')
	filter.req.myflag = True
	filter.req.log_error('myflag was set to:')
	filter.req.log_error(`filter.req.myflag`)
	filter.req.log_error('inputfilter-filter.req.method')
	filter.req.log_error(`filter.req.method`)
	filter.req.log_error('inputfilter-filter.req.uri:')
	filter.req.log_error(`filter.req.uri`)
	filter.req.log_error('inputfilter-filter.req.connection.i.d')
	filter.req.log_error(`filter.req.connection.id`)
	if filter.req.method != 'POST':
		filter.pass_on()
		return
	s = filter.read()
	while s:
		f.write(s)
		f.flush()
		filter.write(s)
		filter.flush()
		s = filter.read()
		
	if s is None:
		filter.close()
		f.close()
###############
and a part of handler looks like this
:
##############
else:
	if  req.method == 'POST':
	 	req.log_error('Myhandler')
		req.log_error('MyHandler, in POST request, has myflag')
		req.log_error('myhandler-req.method')
		req.log_error(`req.method`)
		req.log_error('myhandler-req.uri')
		req.log_error(`req.uri`)
		req.log_error('myhandler-req.connection.id')
		req.log_error(`req.connection.id`)
	
		req.log_error(`req.myflag`)
		
###############

and the error log is here
##################
[Sat Jan 27 13:01:33 2007] [notice] Apache/2.2.4 (Win32) configured -- resuming normal 
operations
[Sat Jan 27 13:01:33 2007] [notice] Server built: Jan  9 2007 23:17:20
[Sat Jan 27 13:01:33 2007] [notice] Parent: Created child process 1864
[Sat Jan 27 13:01:33 2007] [notice] mod_python: Creating 8 session mutexes based on 0 
max processes and 250 max threads.
[Sat Jan 27 13:01:34 2007] [notice] Child 1864: Child process is running
[Sat Jan 27 13:01:34 2007] [notice] Child 1864: Acquired the start mutex.
[Sat Jan 27 13:01:34 2007] [notice] Child 1864: Starting 250 worker threads.
[Sat Jan 27 13:01:34 2007] [notice] Child 1864: Starting thread to listen on port 80.
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] Running inputfilter
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] Setting myflag..
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] myflag was set to:
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] True
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] inputfilter-filter.req.method
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] 'GET'
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] inputfilter-filter.req.uri:
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] '/mod/uploadvideo.py'
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] inputfilter-filter.req.connection.i.d
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] 236
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] Running inputfilter
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] Setting myflag..
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] myflag was set to:
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] True
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] inputfilter-filter.req.method
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] 'GET'
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] inputfilter-filter.req.uri:
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] '/mod/uploadvideo.py'
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] inputfilter-filter.req.connection.i.d
[Sat Jan 27 13:01:41 2007] [error] [client 127.0.0.1] 236
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] Myhandler, referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] MyHandler, in POST request, has myflag, 
referer: http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] myhandler-req.method, referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] 'POST', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] myhandler-req.uri, referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] '/mod/uploadvideo.py', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] myhandler-req.connection.id, referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] 236, referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] mod_python (pid=1864, 
interpreter='www.emim.cz', phase='PythonHandler', handler='uploadvideo'): Application error, 
referer: http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] ServerName: 'www.emim.cz', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] DocumentRoot: 'C:/Program 
Files/Apache Software Foundation/Apache2.2/htdocs', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] URI: '/mod/uploadvideo.py', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] Location: '/mod', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] Directory: None, referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] Filename: 'C:/Program Files/Apache 
Software Foundation/Apache2.2/htdocs/mod', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] PathInfo: '/uploadvideo.py', referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] Traceback (most recent call last):, 
referer: http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1]   File "C:\\PYTHON23\\Lib\\site-
packages\\mod_python\\importer.py", line 1537, in HandlerDispatch\n    
default=default_handler, arg=req, silent=hlist.silent), referer: 
http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1]   File "C:\\PYTHON23\\Lib\\site-
packages\\mod_python\\importer.py", line 1229, in _process_target\n    result = 
_execute_target(config, req, object, arg), referer: http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1]   File "C:\\PYTHON23\\Lib\\site-
packages\\mod_python\\importer.py", line 1128, in _execute_target\n    result = object(arg), 
referer: http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1]   File 
"C:/Django/projekty/mimiproject/apps/mimi/mod\\uploadvideo.py", line 69, in handler\n    
req.log_error(`req.myflag`), referer: http://127.0.0.1/mod/uploadvideo.py?17644
[Sat Jan 27 13:01:48 2007] [error] [client 127.0.0.1] AttributeError: 'mp_request' object has no 
attribute 'myflag', referer: http://127.0.0.1/mod/uploadvideo.py?17644
################################

Can you see any problem there?
Thank you for help and reply
Lad.



> 
> There is 4 seconds between the filter call and the handler call. That  
> seems a bit
> long. Are you sure they come from the same request?
> 
> In both filter and handler also log the following attributes:
> 
>    req.method
>    req.uri
>    req.connection.id
> 
> For the filter, prefix with 'filter.' to get to req object first  
> obviously.
> 
> You might also log result of os.getpid() to verify that each is run  
> in the same
> process.
> 
> Anyway, I suspect that it isn't from the same request. What is  
> missing here and
> you need to understand is that the input filters for a request are  
> not actually
> called until the handler calls req.read() or one of the other read  
> methods of the
> request object. It is only after req.read() is called that the  
> req.myflag value would
> have been set. So, if you haven't called req.read() before accessing  
> the attribute
> it will fail.
> 
> Graham
> 
> On 27/01/2007, at 8:01 PM, export at hope.cz wrote:
> 
> >  Graham,
> > Thank you for your reply.
> > So, I used the debugging  techniques like this:
> >
> > in input filter
> > ###########################
> > from mod_python import apache,Cookie
> > def inputfilter(filter):
> > 	filter.req.log_error('Running inputfilter')
> > 	filter.req.log_error('Setting myflag..')
> > 	filter.req.myflag = True
> > 	filter.req.log_error('myflag was set to:')
> > 	filter.req.log_error(`filter.req.myflag`)
> > 	if filter.req.method != 'POST':
> > 		filter.pass_on()
> > 		return
> > 	s = filter.read()
> > 	while s:
> > 		f.write(s)
> > 		f.flush()
> > 		filter.write(s)
> > 		filter.flush()
> > 		s = filter.read()
> > 		
> > 	if s is None:
> > 		filter.close()
> > 		f.close()
> > ########################
> >
> > in handler
> > ##########################
> >
> > def handler(req):
> >      if req.method == 'GET':
> > 	......
> >
> >     else:
> > 	if  req.method == 'POST':
> > 	 	req.log_error('Myhandler')
> > 		req.log_error('MyHandler, in POST request, has myflag')
> > 		req.log_error(`req.myflag`)
> > 	....
> > 	....
> > #######################
> > and here is a part of error log
> >
> > ..
> > [Sat Jan 27 09:48:54 2007] [notice] Child 2196: Starting thread to  
> > listen on port 80.
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] Running  
> > inputfilter
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] Setting myflag..
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] myflag was  
> > set to:
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] True
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] Running  
> > inputfilter
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] Setting myflag..
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] myflag was  
> > set to:
> > [Sat Jan 27 09:49:05 2007] [error] [client 127.0.0.1] True
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] Running  
> > inputfilter
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] Setting myflag..
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] myflag was  
> > set to:
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] True
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] Running  
> > inputfilter
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] Setting myflag..
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] myflag was  
> > set to:
> > [Sat Jan 27 09:49:08 2007] [error] [client 127.0.0.1] True
> > [Sat Jan 27 09:49:12 2007] [error] [client 127.0.0.1] Myhandler,  
> > referer:
> > http://127.0.0.1/mod/uploadvideo.py?17644
> > [Sat Jan 27 09:49:12 2007] [error] [client 127.0.0.1] MyHandler, in  
> > POST request, has myflag,
> > referer: http://127.0.0.1/mod/uploadvideo.py?17644
> > .....
> > ....
> > ....
> > [Sat Jan 27 09:49:12 2007] [error] [client 127.0.0.1]  
> > AttributeError: 'mp_request' object has no
> > attribute 'myflag', referer: http://127.0.0.1/mod/uploadvideo.py?17644
> > ...
> >
> >
> > Where can be a problem? What shall I try?
> > Can you see any mistake I make?
> > Thank you again for help
> > Lad
> >
> >
> >> Use some standard debugging techniques yourself to try and work it  
> >> out.
> >>
> >> On 26/01/2007, at 10:44 PM, export at hope.cz wrote:
> >>
> >>> Graham,
> >>> Thank you for your reply.
> >>> I have
> >>>
> >>> def inputfilter(filter):
> >>> filter.req.myflag = True
> >>
> >> Add:
> >>
> >>    filter.req.log_error('inputfilter')
> >>
> >>> ...
> >>> ...
> >>>
> >>> so, as you can see the first command in input filter
> >>> is filter.req.myflag = True
> >>> but yet, I can not access the req.myflag
> >>> in my request handler.
> >>> When I try
> >>> req.write(`req.myflag`)
> >>
> >> Add before this:
> >>
> >>    req.log_error('handler')
> >>
> >> In other words, use the logging system to dump information into the
> >> Apache
> >> log files to see if the input filter is actually being called. It
> >> would look like it
> >> isn't. What have you done so far to confirm it is?
> >>
> >> Graham
> >>
> >>> I will receive the same error:
> >>>
> >>> AttributeError: 'mp_request' object has no attribute 'myflag'
> >>>
> >>> What shall I try to solve the problem. Do you have any idea?
> >>> Thank you
> >>> Lad
> >>>
> >>>> Your input filter can't have been called then, or not the part
> >>>> where you
> >>>> assigned the attribute. If the variable may not be there in all
> >>>> situations,
> >>>> then use:
> >>>>
> >>>> if hasattr(req, 'myflag'):
> >>>> if req.myflag:
> >>>> ..
> >>>>
> >>>> Graham
> >>>>
> >>>> On 26/01/2007, at 7:09 PM, export at hope.cz wrote:
> >>>>
> >>>>> Graham ,
> >>>>> Thank you for your reply and help.
> >>>>> I tried the way you suggested but I received the error
> >>>>>
> >>>>> AttributeError: 'mp_request' object has no attribute 'myflag'
> >>>>>
> >>>>> Can you please help?
> >>>>> Thank you
> >>>>> Lad.
> >>>>>
> >>>>>
> >>>>>>
> >>>>>> On 26/01/2007, at 2:45 AM, export at hope.cz wrote:
> >>>>>>
> >>>>>>> Depending on a value being calculated in input filter,
> >>>>>>> I will have to make a decission in request handler.
> >>>>>>> What is a way to find out the value of the variable from input
> >>>>>>> filter in request handler?
> >>>>>>
> >>>>>> I believe this was mentioned before.
> >>>>>>
> >>>>>> In filter, set an attribute on the request object:
> >>>>>>
> >>>>>> def inputfilter(filter):
> >>>>>> ...
> >>>>>> filter.req.myflag = True
> >>>>>> ...
> >>>>>>
> >>>>>> In the request handler, you can then access that variable.
> >>>>>>
> >>>>>> def handler(req):
> >>>>>> ...
> >>>>>> if req.myflag:
> >>>>>> ...
> >>>>>> ...
> >>>>>>
> >>>>>> Graham
> >>>>>
> >>>>
> >>>>
> >>>
> >>>
> >>> ------- End of forwarded message -------
> >




More information about the Mod_python mailing list