@@ -443,16 +443,25 @@ def request_body_from_file(context, path, package_name):
443443
444444
445445@given (parsers .parse ('request contains "{name}" parameter from "{path}"' ))
446- def request_parameter (context , name , path ):
446+ def request_parameter (context , name , path , path_parameters ):
447447 """Set request parameter."""
448- context ["api_request" ]["kwargs" ][escape_reserved_keyword (snake_case (name ))] = json .dumps (glom (context , path ))
448+ value = json .dumps (glom (context , path ))
449+ param_name = escape_reserved_keyword (snake_case (name ))
450+ context ["api_request" ]["kwargs" ][param_name ] = value
451+ # Store in path_parameters for undo operations
452+ path_parameters [name ] = value
453+ path_parameters [param_name ] = value
449454
450455
451456@given (parsers .parse ('request contains "{name}" parameter with value {value}' ))
452- def request_parameter_with_value (context , name , value ):
457+ def request_parameter_with_value (context , name , value , path_parameters ):
453458 """Set request parameter."""
454459 tpl = Template (value ).render (** context )
455- context ["api_request" ]["kwargs" ][escape_reserved_keyword (snake_case (name ))] = tpl
460+ param_name = escape_reserved_keyword (snake_case (name ))
461+ context ["api_request" ]["kwargs" ][param_name ] = tpl
462+ # Store in path_parameters for undo operations
463+ path_parameters [name ] = tpl
464+ path_parameters [param_name ] = tpl
456465
457466
458467def assert_no_unparsed (data ):
@@ -554,7 +563,13 @@ def extract_parameters(kwargs, data, parameter):
554563
555564
556565@pytest .fixture
557- def undo (package_name , undo_operations , client ):
566+ def path_parameters ():
567+ """Store path parameters for undo operations."""
568+ return {}
569+
570+
571+ @pytest .fixture
572+ def undo (package_name , undo_operations , client , path_parameters ):
558573 """Clean after operation."""
559574
560575 def cleanup (api , version , operation_id , response , request , client = client ):
@@ -582,10 +597,21 @@ def cleanup(api, version, operation_id, response, request, client=client):
582597 kwargs = {}
583598 parameters = operation .get ("parameters" , [])
584599 for parameter in parameters :
585- if "origin" not in parameter or parameter ["origin" ] == "response" :
586- extract_parameters (kwargs , response , parameter )
587- elif parameter ["origin" ] == "request" :
600+ origin = parameter .get ("origin" , "response" )
601+ if origin == "path" :
602+ # Extract from path parameters
603+ if "source" in parameter :
604+ param_name = parameter ["source" ]
605+ if param_name in path_parameters :
606+ kwargs [parameter ["name" ]] = path_parameters [param_name ]
607+ else :
608+ warnings .warn (f"Path parameter '{ param_name } ' not found" )
609+ else :
610+ warnings .warn (f"Path origin requires 'source' field" )
611+ elif origin == "request" :
588612 extract_parameters (kwargs , request , parameter )
613+ else : # response or default
614+ extract_parameters (kwargs , response , parameter )
589615 if operation_name in client .configuration .unstable_operations :
590616 client .configuration .unstable_operations [operation_name ] = True
591617
0 commit comments