Alex Berndt
03/07/2024, 2:10 PMclass 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
@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.Scout
03/07/2024, 2:10 PMbuild_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: 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.