Skip to content

fail gracefully if code object can't be extracted from fixture #43

@kapilt

Description

@kapilt

i was trying out pytest-opentelemetry, seems pretty cool, but ran into one issue due to some dynamic fixtures from pytest-terraform, which allows for fixture parameterization via class creation on the decorator, this unfortunately causes a traceback for pytest-opentelemetry. can this be changed to fail gracefully via conditional and getattr(). happy to put up a pr, if open to that.

     
fixturedef.execute(request=subrequest)                                                                                                                                
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/_pytest/fixtures.py", line 1069, in execute
    result = ihook.pytest_fixture_setup(fixturedef=self, request=request)                                                                                                                                                                                                                                                                            
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                 
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/pluggy/_hooks.py", line 512, in __call__                                                 
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)                                                                                         
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                         
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/pluggy/_manager.py", line 120, in _hookexec                                              
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)                                                                                                  
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                  
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 167, in _multicall                                                                                                                                                                                                                        
    raise exception                                                                                                                                                                                                                                                                                                                                  
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 107, in _multicall                                             
    next(function_gen)  # first yield                                                                                                                                     
    ^^^^^^^^^^^^^^^^^^                                                                                                                                                                                                                                                                                                                               
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/pluggy/_callers.py", line 34, in run_old_style_hookwrapper                               
    next(teardown)                                                                                                                                                                                                                                                                                                                                   
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/pytest_opentelemetry/instrumentation.py", line 127, in pytest_fixture_setup              
    attributes=self._attributes_from_fixturedef(fixturedef),                                                                                                              
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                               
  File "/Users/kapil/projects/cloud-custodian/.venv/lib/python3.12/site-packages/pytest_opentelemetry/instrumentation.py", line 103, in _attributes_from_fixturedef       
    SpanAttributes.CODE_FILEPATH: fixturedef.func.__code__.co_filename,                                                                                                   
                                  ^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                                                                                                                                                                                                           
AttributeError: 'ScopedTerraformFixture' object has no attribute '__code__'. Did you mean: '__call__'?  

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions