https://dagster.io/ logo
#ask-ai
Title
# ask-ai
a

Alex Berndt

03/07/2024, 2:10 PM
I am trying to test a sensor which uses a resource. My code looks as follows
Copy code
class FakeInstance(DagsterInstance):
        def __init__(self):
            pass

        def get_dynamic_partitions(self, partitions_def_name):
            return []

context = build_sensor_context(FakeInstance(), resources={"tree_crowns_constants": tree_crowns_constants["local"]})
sensor_result = tc_create_partitions_sensor(context)
The
tc_create_partitions_sensor
is defined as
Copy code
@sensor(
    default_status=DefaultSensorStatus.STOPPED,
    minimum_interval_seconds=60 * 120,  # Every 120 minutes
    required_resource_keys={"tree_crowns_constants"},
)
def tc_create_partitions_sensor(context: SensorEvaluationContext):
   ...
However, this yields an error saying: `TypeError: tc_create_partitions_sensor() got an unexpected keyword argument 'tree_crowns_constants'`f Please help me debug this error.
s

Scout

03/07/2024, 2:10 PM
Based on the documentation, when you are using the
build_sensor_context
function to create a context for testing a sensor, you should not pass resources as keyword arguments directly to the sensor function. Instead, resources should be included in the context object that is passed to the sensor. The
build_sensor_context
function allows you to specify resources as part of the context. However, you need to ensure that the resources are passed correctly. The
resources
parameter of
build_sensor_context
expects a dictionary where the keys are resource keys and the values are resource definitions. Here's a step-by-step guide to debug the error based on the documentation: 1. Ensure that
tree_crowns_constants
is a resource definition that matches the key
"tree_crowns_constants"
expected by the sensor. 2. When calling
build_sensor_context
, pass the resources as a dictionary to the
resources
parameter. The keys should be the resource keys, and the values should be the actual resource instances or definitions. 3. The
FakeInstance
class should inherit from
DagsterInstance
and implement the necessary methods. If you are using a fake instance for testing, make sure it adheres to the expected interface of a
DagsterInstance
. 4. The sensor function
tc_create_partitions_sensor
should not be called with resource keys as arguments. Instead, it should be called with the context that contains the resources. Here is an example of how you might modify your test setup:
Copy code
python from dagster import build_sensor_context, DagsterInstance  # Assuming tree_crowns_constants is a resource definition tree_crowns_constants_resource = tree_crowns_constants["local"]  # Create a fake instance if necessary class FakeInstance(DagsterInstance):     # Implement necessary methods or use a real instance for testing     pass  # Build the sensor context with the resources dictionary context = build_sensor_context(     instance=FakeInstance(),     resources={"tree_crowns_constants": tree_crowns_constants_resource} )  # Call the sensor with the context sensor_result = tc_create_partitions_sensor(context)
Make sure that the
tree_crowns_constants
resource is correctly defined and that it matches the expectations of the sensor. If the resource is expected to be a certain type or have certain methods, ensure that the provided resource definition meets those requirements. If you continue to encounter issues, you may want to verify that the
tree_crowns_constants
resource is correctly configured and that the
FakeInstance
class properly mimics the behavior of a
DagsterInstance
as required for your sensor's logic.