TruffleOil
03/11/2024, 8:10 AMScout
03/11/2024, 8:10 AMDefinitions
class to bundle your jobs, sensors, and resources together. The Definitions
class allows you to specify resources that can be used by your sensors and jobs. Here's how you can attach resource definitions to a sensor and a job using the Definitions
class: 1. Define your resources using the @resource
decorator or by creating instances of ResourceDefinition
. 2. Define your sensor and job, making sure to specify any required resource keys in the sensor and job definitions. 3. Create an instance of the Definitions
class, passing in your resources, sensors, and jobs. Here is an example based on the documentation: python from dagster import sensor, job, resource, Definitions # Define your resources @resource def my_resource(_): # Resource initialization logic return "my_resource_value" # Define your job with required resource keys @job(resource_defs={"my_resource": my_resource}) def my_job(): # Job logic that uses the resource pass # Define your sensor with required resource keys @sensor(job=my_job, required_resource_keys={"my_resource"}) def my_sensor(context): # Sensor logic that uses the resource pass # Create Definitions instance with your resources, sensors, and jobs defs = Definitions( jobs=[my_job], sensors=[my_sensor], resources={"my_resource": my_resource}, )
In this example, my_resource
is a resource that is required by both my_job
and my_sensor
. When creating the Definitions
instance, you pass in the resource, job, and sensor definitions. The Definitions
class takes care of binding the resources to the sensors and jobs, so they can be used within their execution context. Remember that the Definitions
class is the preferred way to organize your Dagster assets, schedules, sensors, and jobs starting from version 1.6 onwards. If you are migrating from an older version that used the @repository
decorator, you can use the create_repository_using_definitions_args
function as a stopgap to create a repository from your Definitions
instance. However, the recommended approach is to use Definitions
directly for new code.