diff --git a/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/types/GetEvaluationsQuery.types.ts b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/types/GetEvaluationsQuery.types.ts index 57ec52bb1417e..e8a07f2cc6926 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/types/GetEvaluationsQuery.types.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/assets/AutoMaterializePolicyPage/types/GetEvaluationsQuery.types.ts @@ -348,7 +348,7 @@ export type AssetConditionEvaluationRecordFragment = { startTimestamp: number | null; endTimestamp: number | null; isLegacy: boolean; - assetKey: {__typename: 'AssetKey'; path: Array}; + assetKey: {__typename: 'AssetKey'; path: Array} | null; evaluation: { __typename: 'AssetConditionEvaluation'; rootUniqueId: string; @@ -765,7 +765,7 @@ export type GetEvaluationsQuery = { startTimestamp: number | null; endTimestamp: number | null; isLegacy: boolean; - assetKey: {__typename: 'AssetKey'; path: Array}; + assetKey: {__typename: 'AssetKey'; path: Array} | null; evaluation: { __typename: 'AssetConditionEvaluation'; rootUniqueId: string; diff --git a/js_modules/dagster-ui/packages/ui-core/src/graphql/possibleTypes.generated.json b/js_modules/dagster-ui/packages/ui-core/src/graphql/possibleTypes.generated.json index 25046b8064e0f..07f601b122e6f 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/graphql/possibleTypes.generated.json +++ b/js_modules/dagster-ui/packages/ui-core/src/graphql/possibleTypes.generated.json @@ -1 +1 @@ -{"DisplayableEvent":["EngineEvent","ExecutionStepOutputEvent","ExpectationResult","FailureMetadata","HandledOutputEvent","LoadedInputEvent","ObjectStoreOperationResult","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","MaterializationEvent","ObservationEvent","TypeCheck"],"MarkerEvent":["EngineEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","StepWorkerStartedEvent","StepWorkerStartingEvent"],"ErrorEvent":["EngineEvent","ExecutionStepFailureEvent","ExecutionStepUpForRetryEvent","HookErroredEvent","RunCanceledEvent","RunFailureEvent","ResourceInitFailureEvent"],"MessageEvent":["EngineEvent","ExecutionStepFailureEvent","ExecutionStepInputEvent","ExecutionStepOutputEvent","ExecutionStepRestartEvent","ExecutionStepSkippedEvent","ExecutionStepStartEvent","ExecutionStepSuccessEvent","ExecutionStepUpForRetryEvent","HandledOutputEvent","HookCompletedEvent","HookErroredEvent","HookSkippedEvent","LoadedInputEvent","LogMessageEvent","ObjectStoreOperationEvent","RunCanceledEvent","RunCancelingEvent","RunDequeuedEvent","RunEnqueuedEvent","RunFailureEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","RunStartEvent","RunStartingEvent","RunSuccessEvent","StepExpectationResultEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","MaterializationEvent","ObservationEvent","AssetMaterializationPlannedEvent","LogsCapturedEvent","AlertStartEvent","AlertSuccessEvent","AlertFailureEvent","AssetCheckEvaluationPlannedEvent","AssetCheckEvaluationEvent"],"RunEvent":["RunCanceledEvent","RunCancelingEvent","RunDequeuedEvent","RunEnqueuedEvent","RunFailureEvent","RunStartEvent","RunStartingEvent","RunSuccessEvent","AssetMaterializationPlannedEvent","AlertStartEvent","AlertSuccessEvent","AlertFailureEvent"],"PipelineRunStepStats":["RunStepStats"],"StepEvent":["EngineEvent","ExecutionStepFailureEvent","ExecutionStepInputEvent","ExecutionStepOutputEvent","ExecutionStepRestartEvent","ExecutionStepSkippedEvent","ExecutionStepStartEvent","ExecutionStepSuccessEvent","ExecutionStepUpForRetryEvent","HandledOutputEvent","HookCompletedEvent","HookErroredEvent","HookSkippedEvent","LoadedInputEvent","ObjectStoreOperationEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","StepExpectationResultEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","MaterializationEvent","ObservationEvent","AssetCheckEvaluationPlannedEvent","AssetCheckEvaluationEvent"],"AssetOwner":["UserAssetOwner","TeamAssetOwner"],"AssetPartitionStatuses":["DefaultPartitionStatuses","MultiPartitionStatuses","TimePartitionStatuses"],"PartitionStatus1D":["TimePartitionStatuses","DefaultPartitionStatuses"],"AssetChecksOrError":["AssetChecks","AssetCheckNeedsMigrationError","AssetCheckNeedsUserCodeUpgrade","AssetCheckNeedsAgentUpgradeError"],"Instigator":["Schedule","Sensor"],"EvaluationStackEntry":["EvaluationStackListItemEntry","EvaluationStackPathEntry","EvaluationStackMapKeyEntry","EvaluationStackMapValueEntry"],"IPipelineSnapshot":["Pipeline","PipelineSnapshot","Job"],"PipelineConfigValidationError":["FieldNotDefinedConfigError","FieldsNotDefinedConfigError","MissingFieldConfigError","MissingFieldsConfigError","RuntimeMismatchConfigError","SelectorTypeConfigError"],"PipelineConfigValidationInvalid":["RunConfigValidationInvalid"],"PipelineConfigValidationResult":["InvalidSubsetError","PipelineConfigValidationValid","RunConfigValidationInvalid","PipelineNotFoundError","PythonError"],"PipelineReference":["PipelineSnapshot","UnknownPipeline"],"PipelineRun":["Run"],"DagsterRunEvent":["ExecutionStepFailureEvent","ExecutionStepInputEvent","ExecutionStepOutputEvent","ExecutionStepSkippedEvent","ExecutionStepStartEvent","ExecutionStepSuccessEvent","ExecutionStepUpForRetryEvent","ExecutionStepRestartEvent","LogMessageEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","RunFailureEvent","RunStartEvent","RunEnqueuedEvent","RunDequeuedEvent","RunStartingEvent","RunCancelingEvent","RunCanceledEvent","RunSuccessEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","HandledOutputEvent","LoadedInputEvent","LogsCapturedEvent","ObjectStoreOperationEvent","StepExpectationResultEvent","MaterializationEvent","ObservationEvent","EngineEvent","HookCompletedEvent","HookSkippedEvent","HookErroredEvent","AlertStartEvent","AlertSuccessEvent","AlertFailureEvent","AssetMaterializationPlannedEvent","AssetCheckEvaluationPlannedEvent","AssetCheckEvaluationEvent"],"PipelineRunLogsSubscriptionPayload":["PipelineRunLogsSubscriptionSuccess","PipelineRunLogsSubscriptionFailure"],"RunOrError":["Run","RunNotFoundError","PythonError"],"PipelineRunStatsSnapshot":["RunStatsSnapshot"],"RunStatsSnapshotOrError":["RunStatsSnapshot","PythonError"],"PipelineSnapshotOrError":["PipelineNotFoundError","PipelineSnapshot","PipelineSnapshotNotFoundError","PythonError"],"RunsFeedEntry":["Run","PartitionBackfill"],"AssetOrError":["Asset","AssetNotFoundError"],"AssetsOrError":["AssetConnection","PythonError"],"DeletePipelineRunResult":["DeletePipelineRunSuccess","UnauthorizedError","PythonError","RunNotFoundError"],"ExecutionPlanOrError":["ExecutionPlan","RunConfigValidationInvalid","PipelineNotFoundError","InvalidSubsetError","PythonError"],"LaunchMultipleRunsResultOrError":["LaunchMultipleRunsResult","PythonError"],"PipelineOrError":["Pipeline","PipelineNotFoundError","InvalidSubsetError","PythonError"],"ReloadRepositoryLocationMutationResult":["WorkspaceLocationEntry","ReloadNotSupported","RepositoryLocationNotFound","UnauthorizedError","PythonError"],"RepositoryLocationOrLoadError":["RepositoryLocation","PythonError"],"ReloadWorkspaceMutationResult":["Workspace","UnauthorizedError","PythonError"],"ShutdownRepositoryLocationMutationResult":["ShutdownRepositoryLocationSuccess","RepositoryLocationNotFound","UnauthorizedError","PythonError"],"TerminatePipelineExecutionFailure":["TerminateRunFailure"],"TerminatePipelineExecutionSuccess":["TerminateRunSuccess"],"TerminateRunResult":["TerminateRunSuccess","TerminateRunFailure","RunNotFoundError","UnauthorizedError","PythonError"],"ScheduleMutationResult":["PythonError","UnauthorizedError","ScheduleStateResult","ScheduleNotFoundError"],"ScheduleOrError":["Schedule","ScheduleNotFoundError","PythonError"],"SchedulerOrError":["Scheduler","SchedulerNotDefinedError","PythonError"],"SchedulesOrError":["Schedules","RepositoryNotFoundError","PythonError"],"ScheduleTickSpecificData":["ScheduleTickSuccessData","ScheduleTickFailureData"],"LaunchBackfillResult":["LaunchBackfillSuccess","PartitionSetNotFoundError","PartitionKeysNotFoundError","InvalidStepError","InvalidOutputError","RunConfigValidationInvalid","PipelineNotFoundError","RunConflict","UnauthorizedError","PythonError","InvalidSubsetError","PresetNotFoundError","ConflictingExecutionParamsError","NoModeProvidedError"],"ConfigTypeOrError":["EnumConfigType","CompositeConfigType","RegularConfigType","PipelineNotFoundError","ConfigTypeNotFoundError","PythonError"],"ConfigType":["ArrayConfigType","CompositeConfigType","EnumConfigType","NullableConfigType","RegularConfigType","ScalarUnionConfigType","MapConfigType"],"WrappingConfigType":["ArrayConfigType","NullableConfigType"],"DagsterType":["ListDagsterType","NullableDagsterType","RegularDagsterType"],"DagsterTypeOrError":["RegularDagsterType","PipelineNotFoundError","DagsterTypeNotFoundError","PythonError"],"WrappingDagsterType":["ListDagsterType","NullableDagsterType"],"Error":["AssetCheckNeedsMigrationError","AssetCheckNeedsUserCodeUpgrade","AssetCheckNeedsAgentUpgradeError","PartitionKeysNotFoundError","AssetNotFoundError","ConflictingExecutionParamsError","ConfigTypeNotFoundError","DagsterTypeNotFoundError","InvalidPipelineRunsFilterError","InvalidSubsetError","ModeNotFoundError","NoModeProvidedError","PartitionSetNotFoundError","PipelineNotFoundError","RunConflict","PipelineSnapshotNotFoundError","PresetNotFoundError","PythonError","ErrorChainLink","UnauthorizedError","ReloadNotSupported","RepositoryLocationNotFound","RepositoryNotFoundError","ResourceNotFoundError","RunGroupNotFoundError","RunNotFoundError","ScheduleNotFoundError","SchedulerNotDefinedError","SensorNotFoundError","UnsupportedOperationError","DuplicateDynamicPartitionError","InstigationStateNotFoundError","SolidStepStatusUnavailableError","GraphNotFoundError","BackfillNotFoundError","PartitionSubsetDeserializationError","AutoMaterializeAssetEvaluationNeedsMigrationError"],"PipelineRunConflict":["RunConflict"],"PipelineRunNotFoundError":["RunNotFoundError"],"RepositoriesOrError":["RepositoryConnection","RepositoryNotFoundError","PythonError"],"RepositoryOrError":["PythonError","Repository","RepositoryNotFoundError"],"WorkspaceLocationEntryOrError":["WorkspaceLocationEntry","PythonError"],"InstigationTypeSpecificData":["SensorData","ScheduleData"],"InstigationStateOrError":["InstigationState","InstigationStateNotFoundError","PythonError"],"InstigationStatesOrError":["InstigationStates","PythonError"],"MetadataEntry":["TableColumnLineageMetadataEntry","TableSchemaMetadataEntry","TableMetadataEntry","FloatMetadataEntry","IntMetadataEntry","JsonMetadataEntry","BoolMetadataEntry","MarkdownMetadataEntry","PathMetadataEntry","NotebookMetadataEntry","PythonArtifactMetadataEntry","TextMetadataEntry","UrlMetadataEntry","PipelineRunMetadataEntry","AssetMetadataEntry","JobMetadataEntry","CodeReferencesMetadataEntry","NullMetadataEntry","TimestampMetadataEntry"],"SourceLocation":["LocalFileCodeReference","UrlCodeReference"],"PartitionRunConfigOrError":["PartitionRunConfig","PythonError"],"AssetBackfillStatus":["AssetPartitionsStatusCounts","UnpartitionedAssetStatus"],"PartitionSetOrError":["PartitionSet","PartitionSetNotFoundError","PythonError"],"PartitionSetsOrError":["PartitionSets","PipelineNotFoundError","PythonError"],"PartitionsOrError":["Partitions","PythonError"],"PartitionStatusesOrError":["PartitionStatuses","PythonError"],"PartitionTagsOrError":["PartitionTags","PythonError"],"RunConfigSchemaOrError":["RunConfigSchema","PipelineNotFoundError","InvalidSubsetError","ModeNotFoundError","PythonError"],"LaunchRunResult":["LaunchRunSuccess","InvalidStepError","InvalidOutputError","RunConfigValidationInvalid","PipelineNotFoundError","RunConflict","UnauthorizedError","PythonError","InvalidSubsetError","PresetNotFoundError","ConflictingExecutionParamsError","NoModeProvidedError"],"LaunchRunReexecutionResult":["LaunchRunSuccess","InvalidStepError","InvalidOutputError","RunConfigValidationInvalid","PipelineNotFoundError","RunConflict","UnauthorizedError","PythonError","InvalidSubsetError","PresetNotFoundError","ConflictingExecutionParamsError","NoModeProvidedError"],"LaunchPipelineRunSuccess":["LaunchRunSuccess"],"RunsOrError":["Runs","InvalidPipelineRunsFilterError","PythonError"],"PipelineRuns":["Runs"],"RunGroupOrError":["RunGroup","RunGroupNotFoundError","PythonError"],"SensorOrError":["Sensor","SensorNotFoundError","UnauthorizedError","PythonError"],"SensorsOrError":["Sensors","RepositoryNotFoundError","PythonError"],"StopSensorMutationResultOrError":["StopSensorMutationResult","UnauthorizedError","PythonError"],"ISolidDefinition":["CompositeSolidDefinition","SolidDefinition"],"SolidContainer":["Pipeline","PipelineSnapshot","Job","CompositeSolidDefinition","Graph"],"SolidStepStatsOrError":["SolidStepStatsConnection","SolidStepStatusUnavailableError"],"WorkspaceOrError":["Workspace","PythonError"],"WorkspaceLocationStatusEntriesOrError":["WorkspaceLocationStatusEntries","PythonError"],"ResourcesOrError":["ResourceConnection","PipelineNotFoundError","InvalidSubsetError","PythonError"],"GraphOrError":["Graph","GraphNotFoundError","PythonError"],"ResourceDetailsOrError":["ResourceDetails","ResourceNotFoundError","PythonError"],"ResourceDetailsListOrError":["ResourceDetailsList","RepositoryNotFoundError","PythonError"],"EnvVarWithConsumersOrError":["EnvVarWithConsumersList","PythonError"],"RunsFeedConnectionOrError":["RunsFeedConnection","PythonError"],"RunsFeedCountOrError":["RunsFeedCount","PythonError"],"RunTagKeysOrError":["PythonError","RunTagKeys"],"RunTagsOrError":["PythonError","RunTags"],"RunIdsOrError":["RunIds","InvalidPipelineRunsFilterError","PythonError"],"AssetNodeOrError":["AssetNode","AssetNotFoundError"],"PartitionBackfillOrError":["PartitionBackfill","BackfillNotFoundError","PythonError"],"PartitionBackfillsOrError":["PartitionBackfills","PythonError"],"EventConnectionOrError":["EventConnection","RunNotFoundError","PythonError"],"AutoMaterializeAssetEvaluationRecordsOrError":["AutoMaterializeAssetEvaluationRecords","AutoMaterializeAssetEvaluationNeedsMigrationError"],"PartitionKeysOrError":["PartitionKeys","PartitionSubsetDeserializationError"],"AutoMaterializeRuleEvaluationData":["TextRuleEvaluationData","ParentMaterializedRuleEvaluationData","WaitingOnKeysRuleEvaluationData"],"AssetConditionEvaluationNode":["UnpartitionedAssetConditionEvaluationNode","PartitionedAssetConditionEvaluationNode","SpecificPartitionAssetConditionEvaluationNode"],"AssetConditionEvaluationRecordsOrError":["AssetConditionEvaluationRecords","AutoMaterializeAssetEvaluationNeedsMigrationError"],"SensorDryRunResult":["PythonError","SensorNotFoundError","DryRunInstigationTick"],"ScheduleDryRunResult":["DryRunInstigationTick","PythonError","ScheduleNotFoundError"],"TerminateRunsResultOrError":["TerminateRunsResult","PythonError"],"AssetWipeMutationResult":["AssetNotFoundError","UnauthorizedError","PythonError","UnsupportedOperationError","AssetWipeSuccess"],"ReportRunlessAssetEventsResult":["UnauthorizedError","PythonError","ReportRunlessAssetEventsSuccess"],"ResumeBackfillResult":["ResumeBackfillSuccess","UnauthorizedError","PythonError"],"CancelBackfillResult":["CancelBackfillSuccess","UnauthorizedError","PythonError"],"LogTelemetryMutationResult":["LogTelemetrySuccess","PythonError"],"AddDynamicPartitionResult":["AddDynamicPartitionSuccess","UnauthorizedError","PythonError","DuplicateDynamicPartitionError"],"DeleteDynamicPartitionsResult":["DeleteDynamicPartitionsSuccess","UnauthorizedError","PythonError"]} \ No newline at end of file +{"DisplayableEvent":["EngineEvent","ExecutionStepOutputEvent","ExpectationResult","FailureMetadata","HandledOutputEvent","LoadedInputEvent","ObjectStoreOperationResult","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","MaterializationEvent","ObservationEvent","TypeCheck"],"MarkerEvent":["EngineEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","StepWorkerStartedEvent","StepWorkerStartingEvent"],"ErrorEvent":["EngineEvent","ExecutionStepFailureEvent","ExecutionStepUpForRetryEvent","HookErroredEvent","RunCanceledEvent","RunFailureEvent","ResourceInitFailureEvent"],"MessageEvent":["EngineEvent","ExecutionStepFailureEvent","ExecutionStepInputEvent","ExecutionStepOutputEvent","ExecutionStepRestartEvent","ExecutionStepSkippedEvent","ExecutionStepStartEvent","ExecutionStepSuccessEvent","ExecutionStepUpForRetryEvent","HandledOutputEvent","HookCompletedEvent","HookErroredEvent","HookSkippedEvent","LoadedInputEvent","LogMessageEvent","ObjectStoreOperationEvent","RunCanceledEvent","RunCancelingEvent","RunDequeuedEvent","RunEnqueuedEvent","RunFailureEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","RunStartEvent","RunStartingEvent","RunSuccessEvent","StepExpectationResultEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","MaterializationEvent","ObservationEvent","AssetMaterializationPlannedEvent","LogsCapturedEvent","AlertStartEvent","AlertSuccessEvent","AlertFailureEvent","AssetCheckEvaluationPlannedEvent","AssetCheckEvaluationEvent"],"RunEvent":["RunCanceledEvent","RunCancelingEvent","RunDequeuedEvent","RunEnqueuedEvent","RunFailureEvent","RunStartEvent","RunStartingEvent","RunSuccessEvent","AssetMaterializationPlannedEvent","AlertStartEvent","AlertSuccessEvent","AlertFailureEvent"],"PipelineRunStepStats":["RunStepStats"],"StepEvent":["EngineEvent","ExecutionStepFailureEvent","ExecutionStepInputEvent","ExecutionStepOutputEvent","ExecutionStepRestartEvent","ExecutionStepSkippedEvent","ExecutionStepStartEvent","ExecutionStepSuccessEvent","ExecutionStepUpForRetryEvent","HandledOutputEvent","HookCompletedEvent","HookErroredEvent","HookSkippedEvent","LoadedInputEvent","ObjectStoreOperationEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","StepExpectationResultEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","MaterializationEvent","ObservationEvent","AssetCheckEvaluationPlannedEvent","AssetCheckEvaluationEvent"],"AssetOwner":["UserAssetOwner","TeamAssetOwner"],"AssetPartitionStatuses":["DefaultPartitionStatuses","MultiPartitionStatuses","TimePartitionStatuses"],"PartitionStatus1D":["TimePartitionStatuses","DefaultPartitionStatuses"],"AssetChecksOrError":["AssetChecks","AssetCheckNeedsMigrationError","AssetCheckNeedsUserCodeUpgrade","AssetCheckNeedsAgentUpgradeError"],"Instigator":["Schedule","Sensor"],"EvaluationStackEntry":["EvaluationStackListItemEntry","EvaluationStackPathEntry","EvaluationStackMapKeyEntry","EvaluationStackMapValueEntry"],"IPipelineSnapshot":["Pipeline","PipelineSnapshot","Job"],"PipelineConfigValidationError":["FieldNotDefinedConfigError","FieldsNotDefinedConfigError","MissingFieldConfigError","MissingFieldsConfigError","RuntimeMismatchConfigError","SelectorTypeConfigError"],"PipelineConfigValidationInvalid":["RunConfigValidationInvalid"],"PipelineConfigValidationResult":["InvalidSubsetError","PipelineConfigValidationValid","RunConfigValidationInvalid","PipelineNotFoundError","PythonError"],"PipelineReference":["PipelineSnapshot","UnknownPipeline"],"PipelineRun":["Run"],"DagsterRunEvent":["ExecutionStepFailureEvent","ExecutionStepInputEvent","ExecutionStepOutputEvent","ExecutionStepSkippedEvent","ExecutionStepStartEvent","ExecutionStepSuccessEvent","ExecutionStepUpForRetryEvent","ExecutionStepRestartEvent","LogMessageEvent","ResourceInitFailureEvent","ResourceInitStartedEvent","ResourceInitSuccessEvent","RunFailureEvent","RunStartEvent","RunEnqueuedEvent","RunDequeuedEvent","RunStartingEvent","RunCancelingEvent","RunCanceledEvent","RunSuccessEvent","StepWorkerStartedEvent","StepWorkerStartingEvent","HandledOutputEvent","LoadedInputEvent","LogsCapturedEvent","ObjectStoreOperationEvent","StepExpectationResultEvent","MaterializationEvent","ObservationEvent","EngineEvent","HookCompletedEvent","HookSkippedEvent","HookErroredEvent","AlertStartEvent","AlertSuccessEvent","AlertFailureEvent","AssetMaterializationPlannedEvent","AssetCheckEvaluationPlannedEvent","AssetCheckEvaluationEvent"],"PipelineRunLogsSubscriptionPayload":["PipelineRunLogsSubscriptionSuccess","PipelineRunLogsSubscriptionFailure"],"RunOrError":["Run","RunNotFoundError","PythonError"],"PipelineRunStatsSnapshot":["RunStatsSnapshot"],"RunStatsSnapshotOrError":["RunStatsSnapshot","PythonError"],"PipelineSnapshotOrError":["PipelineNotFoundError","PipelineSnapshot","PipelineSnapshotNotFoundError","PythonError"],"RunsFeedEntry":["Run","PartitionBackfill"],"AssetOrError":["Asset","AssetNotFoundError"],"AssetsOrError":["AssetConnection","PythonError"],"DeletePipelineRunResult":["DeletePipelineRunSuccess","UnauthorizedError","PythonError","RunNotFoundError"],"ExecutionPlanOrError":["ExecutionPlan","RunConfigValidationInvalid","PipelineNotFoundError","InvalidSubsetError","PythonError"],"LaunchMultipleRunsResultOrError":["LaunchMultipleRunsResult","PythonError"],"PipelineOrError":["Pipeline","PipelineNotFoundError","InvalidSubsetError","PythonError"],"ReloadRepositoryLocationMutationResult":["WorkspaceLocationEntry","ReloadNotSupported","RepositoryLocationNotFound","UnauthorizedError","PythonError"],"RepositoryLocationOrLoadError":["RepositoryLocation","PythonError"],"ReloadWorkspaceMutationResult":["Workspace","UnauthorizedError","PythonError"],"ShutdownRepositoryLocationMutationResult":["ShutdownRepositoryLocationSuccess","RepositoryLocationNotFound","UnauthorizedError","PythonError"],"TerminatePipelineExecutionFailure":["TerminateRunFailure"],"TerminatePipelineExecutionSuccess":["TerminateRunSuccess"],"TerminateRunResult":["TerminateRunSuccess","TerminateRunFailure","RunNotFoundError","UnauthorizedError","PythonError"],"ScheduleMutationResult":["PythonError","UnauthorizedError","ScheduleStateResult","ScheduleNotFoundError"],"ScheduleOrError":["Schedule","ScheduleNotFoundError","PythonError"],"SchedulerOrError":["Scheduler","SchedulerNotDefinedError","PythonError"],"SchedulesOrError":["Schedules","RepositoryNotFoundError","PythonError"],"ScheduleTickSpecificData":["ScheduleTickSuccessData","ScheduleTickFailureData"],"LaunchBackfillResult":["LaunchBackfillSuccess","PartitionSetNotFoundError","PartitionKeysNotFoundError","InvalidStepError","InvalidOutputError","RunConfigValidationInvalid","PipelineNotFoundError","RunConflict","UnauthorizedError","PythonError","InvalidSubsetError","PresetNotFoundError","ConflictingExecutionParamsError","NoModeProvidedError"],"ConfigTypeOrError":["EnumConfigType","CompositeConfigType","RegularConfigType","PipelineNotFoundError","ConfigTypeNotFoundError","PythonError"],"ConfigType":["ArrayConfigType","CompositeConfigType","EnumConfigType","NullableConfigType","RegularConfigType","ScalarUnionConfigType","MapConfigType"],"WrappingConfigType":["ArrayConfigType","NullableConfigType"],"DagsterType":["ListDagsterType","NullableDagsterType","RegularDagsterType"],"DagsterTypeOrError":["RegularDagsterType","PipelineNotFoundError","DagsterTypeNotFoundError","PythonError"],"WrappingDagsterType":["ListDagsterType","NullableDagsterType"],"Error":["AssetCheckNeedsMigrationError","AssetCheckNeedsUserCodeUpgrade","AssetCheckNeedsAgentUpgradeError","PartitionKeysNotFoundError","AssetNotFoundError","ConflictingExecutionParamsError","ConfigTypeNotFoundError","DagsterTypeNotFoundError","InvalidPipelineRunsFilterError","InvalidSubsetError","ModeNotFoundError","NoModeProvidedError","PartitionSetNotFoundError","PipelineNotFoundError","RunConflict","PipelineSnapshotNotFoundError","PresetNotFoundError","PythonError","ErrorChainLink","UnauthorizedError","ReloadNotSupported","RepositoryLocationNotFound","RepositoryNotFoundError","ResourceNotFoundError","RunGroupNotFoundError","RunNotFoundError","ScheduleNotFoundError","SchedulerNotDefinedError","SensorNotFoundError","UnsupportedOperationError","DuplicateDynamicPartitionError","InstigationStateNotFoundError","SolidStepStatusUnavailableError","GraphNotFoundError","BackfillNotFoundError","PartitionSubsetDeserializationError","AutoMaterializeAssetEvaluationNeedsMigrationError"],"PipelineRunConflict":["RunConflict"],"PipelineRunNotFoundError":["RunNotFoundError"],"RepositoriesOrError":["RepositoryConnection","RepositoryNotFoundError","PythonError"],"RepositoryOrError":["PythonError","Repository","RepositoryNotFoundError"],"WorkspaceLocationEntryOrError":["WorkspaceLocationEntry","PythonError"],"InstigationTypeSpecificData":["SensorData","ScheduleData"],"InstigationStateOrError":["InstigationState","InstigationStateNotFoundError","PythonError"],"InstigationStatesOrError":["InstigationStates","PythonError"],"MetadataEntry":["TableColumnLineageMetadataEntry","TableSchemaMetadataEntry","TableMetadataEntry","FloatMetadataEntry","IntMetadataEntry","JsonMetadataEntry","BoolMetadataEntry","MarkdownMetadataEntry","PathMetadataEntry","NotebookMetadataEntry","PythonArtifactMetadataEntry","TextMetadataEntry","UrlMetadataEntry","PipelineRunMetadataEntry","AssetMetadataEntry","JobMetadataEntry","CodeReferencesMetadataEntry","NullMetadataEntry","TimestampMetadataEntry"],"SourceLocation":["LocalFileCodeReference","UrlCodeReference"],"PartitionRunConfigOrError":["PartitionRunConfig","PythonError"],"AssetBackfillStatus":["AssetPartitionsStatusCounts","UnpartitionedAssetStatus"],"PartitionSetOrError":["PartitionSet","PartitionSetNotFoundError","PythonError"],"PartitionSetsOrError":["PartitionSets","PipelineNotFoundError","PythonError"],"PartitionsOrError":["Partitions","PythonError"],"PartitionStatusesOrError":["PartitionStatuses","PythonError"],"PartitionTagsOrError":["PartitionTags","PythonError"],"RunConfigSchemaOrError":["RunConfigSchema","PipelineNotFoundError","InvalidSubsetError","ModeNotFoundError","PythonError"],"LaunchRunResult":["LaunchRunSuccess","InvalidStepError","InvalidOutputError","RunConfigValidationInvalid","PipelineNotFoundError","RunConflict","UnauthorizedError","PythonError","InvalidSubsetError","PresetNotFoundError","ConflictingExecutionParamsError","NoModeProvidedError"],"LaunchRunReexecutionResult":["LaunchRunSuccess","InvalidStepError","InvalidOutputError","RunConfigValidationInvalid","PipelineNotFoundError","RunConflict","UnauthorizedError","PythonError","InvalidSubsetError","PresetNotFoundError","ConflictingExecutionParamsError","NoModeProvidedError"],"LaunchPipelineRunSuccess":["LaunchRunSuccess"],"RunsOrError":["Runs","InvalidPipelineRunsFilterError","PythonError"],"PipelineRuns":["Runs"],"RunGroupOrError":["RunGroup","RunGroupNotFoundError","PythonError"],"SensorOrError":["Sensor","SensorNotFoundError","UnauthorizedError","PythonError"],"SensorsOrError":["Sensors","RepositoryNotFoundError","PythonError"],"StopSensorMutationResultOrError":["StopSensorMutationResult","UnauthorizedError","PythonError"],"ISolidDefinition":["CompositeSolidDefinition","SolidDefinition"],"SolidContainer":["Pipeline","PipelineSnapshot","Job","CompositeSolidDefinition","Graph"],"SolidStepStatsOrError":["SolidStepStatsConnection","SolidStepStatusUnavailableError"],"WorkspaceOrError":["Workspace","PythonError"],"WorkspaceLocationStatusEntriesOrError":["WorkspaceLocationStatusEntries","PythonError"],"ResourcesOrError":["ResourceConnection","PipelineNotFoundError","InvalidSubsetError","PythonError"],"GraphOrError":["Graph","GraphNotFoundError","PythonError"],"ResourceDetailsOrError":["ResourceDetails","ResourceNotFoundError","PythonError"],"ResourceDetailsListOrError":["ResourceDetailsList","RepositoryNotFoundError","PythonError"],"EnvVarWithConsumersOrError":["EnvVarWithConsumersList","PythonError"],"RunsFeedConnectionOrError":["RunsFeedConnection","PythonError"],"RunsFeedCountOrError":["RunsFeedCount","PythonError"],"RunTagKeysOrError":["PythonError","RunTagKeys"],"RunTagsOrError":["PythonError","RunTags"],"RunIdsOrError":["RunIds","InvalidPipelineRunsFilterError","PythonError"],"AssetNodeOrError":["AssetNode","AssetNotFoundError"],"PartitionBackfillOrError":["PartitionBackfill","BackfillNotFoundError","PythonError"],"PartitionBackfillsOrError":["PartitionBackfills","PythonError"],"EventConnectionOrError":["EventConnection","RunNotFoundError","PythonError"],"AutoMaterializeAssetEvaluationRecordsOrError":["AutoMaterializeAssetEvaluationRecords","AutoMaterializeAssetEvaluationNeedsMigrationError"],"PartitionKeysOrError":["PartitionKeys","PartitionSubsetDeserializationError"],"AutoMaterializeRuleEvaluationData":["TextRuleEvaluationData","ParentMaterializedRuleEvaluationData","WaitingOnKeysRuleEvaluationData"],"AssetConditionEvaluationNode":["UnpartitionedAssetConditionEvaluationNode","PartitionedAssetConditionEvaluationNode","SpecificPartitionAssetConditionEvaluationNode"],"AssetConditionEvaluationRecordsOrError":["AssetConditionEvaluationRecords","AutoMaterializeAssetEvaluationNeedsMigrationError"],"EntityKey":["AssetKey","AssetCheckhandle"],"SensorDryRunResult":["PythonError","SensorNotFoundError","DryRunInstigationTick"],"ScheduleDryRunResult":["DryRunInstigationTick","PythonError","ScheduleNotFoundError"],"TerminateRunsResultOrError":["TerminateRunsResult","PythonError"],"AssetWipeMutationResult":["AssetNotFoundError","UnauthorizedError","PythonError","UnsupportedOperationError","AssetWipeSuccess"],"ReportRunlessAssetEventsResult":["UnauthorizedError","PythonError","ReportRunlessAssetEventsSuccess"],"ResumeBackfillResult":["ResumeBackfillSuccess","UnauthorizedError","PythonError"],"CancelBackfillResult":["CancelBackfillSuccess","UnauthorizedError","PythonError"],"LogTelemetryMutationResult":["LogTelemetrySuccess","PythonError"],"AddDynamicPartitionResult":["AddDynamicPartitionSuccess","UnauthorizedError","PythonError","DuplicateDynamicPartitionError"],"DeleteDynamicPartitionsResult":["DeleteDynamicPartitionsSuccess","UnauthorizedError","PythonError"]} \ No newline at end of file diff --git a/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql b/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql index 2f4c3193df0c9..67f179dc4ba58 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql +++ b/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql @@ -899,6 +899,7 @@ type AssetCheck { canExecuteIndividually: AssetCheckCanExecuteIndividually! blocking: Boolean! additionalAssetKeys: [AssetKey!]! + automationCondition: AutomationCondition } type AssetCheckExecution { @@ -3365,7 +3366,8 @@ type Query { cursor: String ): AutoMaterializeAssetEvaluationRecordsOrError truePartitionsForAutomationConditionEvaluationNode( - assetKey: AssetKeyInput! + assetKey: AssetKeyInput + assetCheckKey: AssetCheckHandleInput evaluationId: ID! nodeUniqueId: String ): [String!]! @@ -3373,12 +3375,14 @@ type Query { evaluationId: ID! ): AutoMaterializeAssetEvaluationRecordsOrError assetConditionEvaluationForPartition( - assetKey: AssetKeyInput! + assetKey: AssetKeyInput + assetCheckKey: AssetCheckHandleInput evaluationId: ID! partition: String! ): AssetConditionEvaluation assetConditionEvaluationRecordsOrError( - assetKey: AssetKeyInput! + assetKey: AssetKeyInput + assetCheckKey: AssetCheckHandleInput limit: Int! cursor: String ): AssetConditionEvaluationRecordsOrError @@ -3689,7 +3693,8 @@ type AssetConditionEvaluationRecord { evaluationId: ID! runIds: [String!]! timestamp: Float! - assetKey: AssetKey! + assetKey: AssetKey + entityKey: EntityKey! numRequested: Int! startTimestamp: Float endTimestamp: Float @@ -3699,6 +3704,8 @@ type AssetConditionEvaluationRecord { evaluationNodes: [AutomationConditionEvaluationNode!]! } +union EntityKey = AssetKey | AssetCheckhandle + type AutomationConditionEvaluationNode { uniqueId: String! userLabel: String diff --git a/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts b/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts index ed57441d95d09..c7e808c264606 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts @@ -146,6 +146,7 @@ export type AssetCheck = { __typename: 'AssetCheck'; additionalAssetKeys: Array; assetKey: AssetKey; + automationCondition: Maybe; blocking: Scalars['Boolean']['output']; canExecuteIndividually: AssetCheckCanExecuteIndividually; description: Maybe; @@ -299,8 +300,9 @@ export type AssetConditionEvaluationNode = export type AssetConditionEvaluationRecord = { __typename: 'AssetConditionEvaluationRecord'; - assetKey: AssetKey; + assetKey: Maybe; endTimestamp: Maybe; + entityKey: EntityKey; evaluation: AssetConditionEvaluation; evaluationId: Scalars['ID']['output']; evaluationNodes: Array; @@ -1257,6 +1259,8 @@ export type EngineEvent = DisplayableEvent & timestamp: Scalars['String']['output']; }; +export type EntityKey = AssetCheckhandle | AssetKey; + export type EnumConfigType = ConfigType & { __typename: 'EnumConfigType'; description: Maybe; @@ -3813,13 +3817,15 @@ export type QueryAssetCheckExecutionsArgs = { }; export type QueryAssetConditionEvaluationForPartitionArgs = { - assetKey: AssetKeyInput; + assetCheckKey?: InputMaybe; + assetKey?: InputMaybe; evaluationId: Scalars['ID']['input']; partition: Scalars['String']['input']; }; export type QueryAssetConditionEvaluationRecordsOrErrorArgs = { - assetKey: AssetKeyInput; + assetCheckKey?: InputMaybe; + assetKey?: InputMaybe; cursor?: InputMaybe; limit: Scalars['Int']['input']; }; @@ -4040,7 +4046,8 @@ export type QueryTopLevelResourceDetailsOrErrorArgs = { }; export type QueryTruePartitionsForAutomationConditionEvaluationNodeArgs = { - assetKey: AssetKeyInput; + assetCheckKey?: InputMaybe; + assetKey?: InputMaybe; evaluationId: Scalars['ID']['input']; nodeUniqueId?: InputMaybe; }; @@ -6001,6 +6008,12 @@ export const buildAssetCheck = ( : relationshipsToOmit.has('AssetKey') ? ({} as AssetKey) : buildAssetKey({}, relationshipsToOmit), + automationCondition: + overrides && overrides.hasOwnProperty('automationCondition') + ? overrides.automationCondition! + : relationshipsToOmit.has('AutomationCondition') + ? ({} as AutomationCondition) + : buildAutomationCondition({}, relationshipsToOmit), blocking: overrides && overrides.hasOwnProperty('blocking') ? overrides.blocking! : true, canExecuteIndividually: overrides && overrides.hasOwnProperty('canExecuteIndividually') @@ -6266,6 +6279,12 @@ export const buildAssetConditionEvaluationRecord = ( : buildAssetKey({}, relationshipsToOmit), endTimestamp: overrides && overrides.hasOwnProperty('endTimestamp') ? overrides.endTimestamp! : 4.33, + entityKey: + overrides && overrides.hasOwnProperty('entityKey') + ? overrides.entityKey! + : relationshipsToOmit.has('AssetCheckhandle') + ? ({} as AssetCheckhandle) + : buildAssetCheckhandle({}, relationshipsToOmit), evaluation: overrides && overrides.hasOwnProperty('evaluation') ? overrides.evaluation! diff --git a/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_checks.py b/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_checks.py index 799f6bd5ec3d7..0a0a224947ac7 100644 --- a/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_checks.py +++ b/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_checks.py @@ -10,10 +10,9 @@ from dagster._core.storage.asset_check_execution_record import AssetCheckExecutionRecordStatus from dagster._core.storage.dagster_run import RunRecord -from dagster_graphql.schema.asset_checks import GrapheneAssetCheckExecution - if TYPE_CHECKING: - from dagster_graphql.schema.pipelines.pipeline import GrapheneAssetCheckHandle + from dagster_graphql.schema.asset_checks import GrapheneAssetCheckExecution + from dagster_graphql.schema.entity_key import GrapheneAssetCheckHandle from dagster_graphql.schema.util import ResolveInfo @@ -32,7 +31,9 @@ def fetch_asset_check_executions( asset_check_key: AssetCheckKey, limit: int, cursor: Optional[str], -) -> List[GrapheneAssetCheckExecution]: +) -> List["GrapheneAssetCheckExecution"]: + from dagster_graphql.schema.asset_checks import GrapheneAssetCheckExecution + check_records = loading_context.instance.event_log_storage.get_asset_check_execution_history( check_key=asset_check_key, limit=limit, @@ -50,7 +51,7 @@ def fetch_asset_check_executions( def get_asset_checks_for_run_id( graphene_info: "ResolveInfo", run_id: str ) -> Sequence["GrapheneAssetCheckHandle"]: - from dagster_graphql.schema.pipelines.pipeline import GrapheneAssetCheckHandle + from dagster_graphql.schema.entity_key import GrapheneAssetCheckHandle check.str_param(run_id, "run_id") diff --git a/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_condition_evaluations.py b/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_condition_evaluations.py index 29d3eb286355d..e754b67658f43 100644 --- a/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_condition_evaluations.py +++ b/python_modules/dagster-graphql/dagster_graphql/implementation/fetch_asset_condition_evaluations.py @@ -1,7 +1,7 @@ -from typing import TYPE_CHECKING, Optional, Sequence +from typing import TYPE_CHECKING, Optional, Sequence, Union import dagster._check as check -from dagster import AssetKey +from dagster._core.definitions.asset_key import AssetCheckKey, AssetKey, EntityKey from dagster._core.scheduler.instigation import AutoMaterializeAssetEvaluationRecord from dagster_graphql.schema.asset_condition_evaluations import ( @@ -13,7 +13,7 @@ from dagster_graphql.schema.auto_materialize_asset_evaluations import ( GrapheneAutoMaterializeAssetEvaluationNeedsMigrationError, ) -from dagster_graphql.schema.inputs import GrapheneAssetKeyInput +from dagster_graphql.schema.inputs import GrapheneAssetCheckHandleInput, GrapheneAssetKeyInput if TYPE_CHECKING: from dagster_graphql.schema.util import ResolveInfo @@ -67,20 +67,29 @@ def fetch_asset_condition_evaluation_record_for_partition( ) +def entity_key_from_graphql_input( + graphene_input: Union[GrapheneAssetKeyInput, GrapheneAssetCheckHandleInput], +) -> EntityKey: + if "path" in graphene_input: + return AssetKey.from_graphql_input(graphene_input) + else: + return AssetCheckKey.from_graphql_input(graphene_input) + + def fetch_true_partitions_for_evaluation_node( graphene_info: "ResolveInfo", - graphene_asset_key: GrapheneAssetKeyInput, + graphene_entity_key: Union[GrapheneAssetKeyInput, GrapheneAssetCheckHandleInput], evaluation_id: int, node_unique_id: str, ) -> Sequence[str]: - asset_key = AssetKey.from_graphql_input(graphene_asset_key) + key = entity_key_from_graphql_input(graphene_entity_key) schedule_storage = check.not_none(graphene_info.context.instance.schedule_storage) record = next( iter( schedule_storage.get_auto_materialize_asset_evaluations( # there is no method to get a specific evaluation by id, so instead get the first # evaluation before evaluation_id + 1 - key=asset_key, + key=key, cursor=evaluation_id + 1, limit=1, ) @@ -104,7 +113,7 @@ def fetch_true_partitions_for_evaluation_node( def fetch_asset_condition_evaluation_records_for_asset_key( graphene_info: "ResolveInfo", - graphene_asset_key: GrapheneAssetKeyInput, + graphene_entity_key: Union[GrapheneAssetKeyInput, GrapheneAssetCheckHandleInput], limit: int, cursor: Optional[str], ) -> GrapheneAssetConditionEvaluationRecordsOrError: @@ -113,13 +122,13 @@ def fetch_asset_condition_evaluation_records_for_asset_key( if migration_error: return migration_error - asset_key = AssetKey.from_graphql_input(graphene_asset_key) + key = entity_key_from_graphql_input(graphene_entity_key) schedule_storage = check.not_none(graphene_info.context.instance.schedule_storage) return _get_graphene_records_from_evaluations( graphene_info, schedule_storage.get_auto_materialize_asset_evaluations( - key=asset_key, + key=key, limit=limit, cursor=int(cursor) if cursor else None, ), diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/__init__.py b/python_modules/dagster-graphql/dagster_graphql/schema/__init__.py index 7ad606e5f4c8c..b84cddd321d9e 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/__init__.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/__init__.py @@ -6,7 +6,6 @@ def types(): - from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.backfill import ( GrapheneLaunchBackfillResult, GrapheneLaunchBackfillSuccess, @@ -14,6 +13,7 @@ def types(): from dagster_graphql.schema.config_type_or_error import GrapheneConfigTypeOrError from dagster_graphql.schema.config_types import types as config_types from dagster_graphql.schema.dagster_types import types as dagster_types_types + from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import types as errors_types from dagster_graphql.schema.execution import types as execution_types from dagster_graphql.schema.external import types as external_types diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/asset_checks.py b/python_modules/dagster-graphql/dagster_graphql/schema/asset_checks.py index ca864bc4fa98b..ac14762b2ccfc 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/asset_checks.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/asset_checks.py @@ -7,8 +7,11 @@ AssetCheckEvaluation, AssetCheckEvaluationTargetMaterializationData, ) -from dagster._core.definitions.asset_check_spec import AssetCheckKey, AssetCheckSeverity +from dagster._core.definitions.asset_check_spec import AssetCheckSeverity from dagster._core.definitions.asset_key import AssetKey +from dagster._core.definitions.declarative_automation.serialized_objects import ( + AutomationConditionSnapshot, +) from dagster._core.definitions.remote_asset_graph import RemoteAssetCheckNode from dagster._core.events import DagsterEventType from dagster._core.storage.asset_check_execution_record import ( @@ -17,7 +20,9 @@ ) from dagster_graphql.implementation.events import iterate_metadata_entries -from dagster_graphql.schema.asset_key import GrapheneAssetKey +from dagster_graphql.schema.auto_materialize_policy import GrapheneAutoMaterializePolicy +from dagster_graphql.schema.automation_condition import GrapheneAutomationCondition +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import GrapheneError from dagster_graphql.schema.metadata import GrapheneMetadataEntry from dagster_graphql.schema.util import ResolveInfo, non_null_list @@ -134,6 +139,7 @@ class GrapheneAssetCheck(graphene.ObjectType): canExecuteIndividually = graphene.NonNull(GrapheneAssetCheckCanExecuteIndividually) blocking = graphene.NonNull(graphene.Boolean) additionalAssetKeys = non_null_list(GrapheneAssetKey) + automationCondition = graphene.Field(GrapheneAutomationCondition) class Meta: name = "AssetCheck" @@ -185,6 +191,22 @@ def resolve_additionalAssetKeys(self, _) -> Sequence[GrapheneAssetKey]: for asset_key in self._asset_check.additional_asset_keys ] + def resolve_automationCondition( + self, _graphene_info: ResolveInfo + ) -> Optional[GrapheneAutoMaterializePolicy]: + automation_condition = ( + self._asset_check.automation_condition_snapshot + or self._asset_check.automation_condition + ) + if automation_condition: + return GrapheneAutomationCondition( + # we only store one of automation_condition or automation_condition_snapshot + automation_condition + if isinstance(automation_condition, AutomationConditionSnapshot) + else automation_condition.get_snapshot() + ) + return None + class GrapheneAssetChecks(graphene.ObjectType): checks = non_null_list(GrapheneAssetCheck) @@ -234,14 +256,3 @@ class Meta: GrapheneAssetCheckNeedsAgentUpgradeError, ) name = "AssetChecksOrError" - - -class GrapheneAssetCheckHandle(graphene.ObjectType): - name = graphene.NonNull(graphene.String) - assetKey = graphene.NonNull(GrapheneAssetKey) - - class Meta: - name = "AssetCheckhandle" - - def __init__(self, handle: AssetCheckKey): - super().__init__(name=handle.name, assetKey=GrapheneAssetKey(path=handle.asset_key.path)) diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/asset_condition_evaluations.py b/python_modules/dagster-graphql/dagster_graphql/schema/asset_condition_evaluations.py index d5626cc10c1e4..5e522a5b8077f 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/asset_condition_evaluations.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/asset_condition_evaluations.py @@ -4,6 +4,7 @@ import graphene from dagster._core.asset_graph_view.serializable_entity_subset import SerializableEntitySubset +from dagster._core.definitions.asset_key import AssetKey from dagster._core.definitions.declarative_automation.serialized_objects import ( AutomationConditionEvaluation, AutomationConditionSnapshot, @@ -11,10 +12,10 @@ from dagster._core.scheduler.instigation import AutoMaterializeAssetEvaluationRecord from dagster_graphql.implementation.events import iterate_metadata_entries -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.auto_materialize_asset_evaluations import ( GrapheneAutoMaterializeAssetEvaluationNeedsMigrationError, ) +from dagster_graphql.schema.entity_key import GrapheneAssetKey, GrapheneEntityKey from dagster_graphql.schema.metadata import GrapheneMetadataEntry from dagster_graphql.schema.util import ResolveInfo, non_null_list @@ -251,7 +252,8 @@ class GrapheneAssetConditionEvaluationRecord(graphene.ObjectType): runIds = non_null_list(graphene.String) timestamp = graphene.NonNull(graphene.Float) - assetKey = graphene.NonNull(GrapheneAssetKey) + assetKey = graphene.Field(GrapheneAssetKey) + entityKey = graphene.NonNull(GrapheneEntityKey) numRequested = graphene.NonNull(graphene.Int) startTimestamp = graphene.Field(graphene.Float) @@ -282,7 +284,10 @@ def __init__( evaluationId=record.evaluation_id, timestamp=record.timestamp, runIds=evaluation_with_run_ids.run_ids, - assetKey=GrapheneAssetKey(path=record.key.path), + assetKey=GrapheneEntityKey.from_entity_key(record.key) + if isinstance(record.key, AssetKey) + else None, + entityKey=GrapheneEntityKey.from_entity_key(record.key), numRequested=root_evaluation.true_subset.size, startTimestamp=root_evaluation.start_timestamp, endTimestamp=root_evaluation.end_timestamp, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py b/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py index 4b59f18050e30..6473b7e1bbed3 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py @@ -61,7 +61,6 @@ GrapheneAssetChecks, GrapheneAssetChecksOrError, ) -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.auto_materialize_policy import GrapheneAutoMaterializePolicy from dagster_graphql.schema.automation_condition import GrapheneAutomationCondition from dagster_graphql.schema.backfill import GrapheneBackfillPolicy @@ -73,6 +72,7 @@ GrapheneRegularDagsterType, to_dagster_type, ) +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import GrapheneAssetNotFoundError from dagster_graphql.schema.freshness_policy import ( GrapheneAssetFreshnessInfo, @@ -839,7 +839,7 @@ def resolve_autoMaterializePolicy( def resolve_automationCondition( self, _graphene_info: ResolveInfo - ) -> Optional[GrapheneAutoMaterializePolicy]: + ) -> Optional[GrapheneAutomationCondition]: automation_condition = ( self._asset_node_snap.automation_condition_snapshot or self._asset_node_snap.automation_condition diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/asset_key.py b/python_modules/dagster-graphql/dagster_graphql/schema/asset_key.py deleted file mode 100644 index d0945dc669b24..0000000000000 --- a/python_modules/dagster-graphql/dagster_graphql/schema/asset_key.py +++ /dev/null @@ -1,18 +0,0 @@ -import graphene - -from dagster_graphql.schema.util import non_null_list - - -class GrapheneAssetKey(graphene.ObjectType): - path = non_null_list(graphene.String) - - class Meta: - name = "AssetKey" - - -class GrapheneAssetLineageInfo(graphene.ObjectType): - assetKey = graphene.NonNull(GrapheneAssetKey) - partitions = non_null_list(graphene.String) - - class Meta: - name = "AssetLineageInfo" diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/asset_selections.py b/python_modules/dagster-graphql/dagster_graphql/schema/asset_selections.py index 09c872a8d879d..64e4c49cbbdb2 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/asset_selections.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/asset_selections.py @@ -7,7 +7,7 @@ from dagster_graphql.implementation.fetch_assets import get_asset from dagster_graphql.implementation.utils import capture_error -from dagster_graphql.schema.asset_key import GrapheneAssetKey +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.util import ResolveInfo, non_null_list if TYPE_CHECKING: diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/auto_materialize_asset_evaluations.py b/python_modules/dagster-graphql/dagster_graphql/schema/auto_materialize_asset_evaluations.py index d1e9c4d7f0025..a52bc5d44d4b1 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/auto_materialize_asset_evaluations.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/auto_materialize_asset_evaluations.py @@ -10,8 +10,8 @@ from dagster._core.definitions.metadata import DagsterAssetMetadataValue from dagster._core.scheduler.instigation import AutoMaterializeAssetEvaluationRecord -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.auto_materialize_policy import GrapheneAutoMaterializeRule +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import GrapheneError from dagster_graphql.schema.partition_keys import ( GraphenePartitionKeys, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/backfill.py b/python_modules/dagster-graphql/dagster_graphql/schema/backfill.py index 81aba8d6a52e6..56549667aab45 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/backfill.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/backfill.py @@ -33,7 +33,7 @@ partition_statuses_from_run_partition_data, ) from dagster_graphql.implementation.utils import has_permission_for_asset_graph -from dagster_graphql.schema.asset_key import GrapheneAssetKey +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import ( GrapheneError, GrapheneInvalidOutputError, @@ -383,7 +383,7 @@ class Meta: description="Included to comply with RunsFeedEntry interface.", ) assetCheckSelection = graphene.List( - graphene.NonNull("dagster_graphql.schema.asset_checks.GrapheneAssetCheckHandle") + graphene.NonNull("dagster_graphql.schema.entity_key.GrapheneAssetCheckHandle") ) def __init__(self, backfill_job: PartitionBackfill): diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/entity_key.py b/python_modules/dagster-graphql/dagster_graphql/schema/entity_key.py new file mode 100644 index 0000000000000..a1e9696511eb8 --- /dev/null +++ b/python_modules/dagster-graphql/dagster_graphql/schema/entity_key.py @@ -0,0 +1,44 @@ +import graphene +from dagster._core.definitions.asset_check_spec import AssetCheckKey +from dagster._core.definitions.asset_key import AssetKey, EntityKey + +from dagster_graphql.schema.util import non_null_list + + +class GrapheneAssetKey(graphene.ObjectType): + path = non_null_list(graphene.String) + + class Meta: + name = "AssetKey" + + +class GrapheneAssetCheckHandle(graphene.ObjectType): + name = graphene.NonNull(graphene.String) + assetKey = graphene.NonNull(GrapheneAssetKey) + + class Meta: + name = "AssetCheckhandle" + + def __init__(self, handle: AssetCheckKey): + super().__init__(name=handle.name, assetKey=GrapheneAssetKey(path=handle.asset_key.path)) + + +class GrapheneEntityKey(graphene.Union): + class Meta: + name = "EntityKey" + types = (GrapheneAssetKey, GrapheneAssetCheckHandle) + + @staticmethod + def from_entity_key(key: EntityKey) -> "GrapheneEntityKey": + if isinstance(key, AssetKey): + return GrapheneAssetKey(path=key.path) + else: + return GrapheneAssetCheckHandle(handle=key) + + +class GrapheneAssetLineageInfo(graphene.ObjectType): + assetKey = graphene.NonNull(GrapheneAssetKey) + partitions = non_null_list(graphene.String) + + class Meta: + name = "AssetLineageInfo" diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/instigation.py b/python_modules/dagster-graphql/dagster_graphql/schema/instigation.py index e58cc9b863cae..26005c6708c6a 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/instigation.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/instigation.py @@ -33,7 +33,7 @@ from dagster_graphql.implementation.fetch_ticks import get_instigation_ticks from dagster_graphql.implementation.loader import RepositoryScopedBatchLoader from dagster_graphql.implementation.utils import UserFacingGraphQLError -from dagster_graphql.schema.asset_key import GrapheneAssetKey +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import ( GrapheneError, GraphenePythonError, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/logs/events.py b/python_modules/dagster-graphql/dagster_graphql/schema/logs/events.py index 46a1dbc8bf0e2..0014e2051980a 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/logs/events.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/logs/events.py @@ -11,7 +11,7 @@ from dagster_graphql.implementation.events import construct_basic_params from dagster_graphql.implementation.fetch_runs import gen_run_by_id, get_step_stats from dagster_graphql.schema.asset_checks import GrapheneAssetCheckEvaluation -from dagster_graphql.schema.asset_key import GrapheneAssetKey, GrapheneAssetLineageInfo +from dagster_graphql.schema.entity_key import GrapheneAssetKey, GrapheneAssetLineageInfo from dagster_graphql.schema.errors import GraphenePythonError, GrapheneRunNotFoundError from dagster_graphql.schema.logs.log_level import GrapheneLogLevel from dagster_graphql.schema.metadata import GrapheneMetadataEntry diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/metadata.py b/python_modules/dagster-graphql/dagster_graphql/schema/metadata.py index dfcec93939e13..2e5fa989f7f0d 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/metadata.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/metadata.py @@ -1,6 +1,6 @@ import graphene -from dagster_graphql.schema.asset_key import GrapheneAssetKey +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.table import ( GrapheneTable, GrapheneTableColumnLineageEntry, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/partition_sets.py b/python_modules/dagster-graphql/dagster_graphql/schema/partition_sets.py index 6610edfd4fcf4..3b20c41fbf330 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/partition_sets.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/partition_sets.py @@ -29,8 +29,8 @@ ) from dagster_graphql.implementation.fetch_runs import get_runs from dagster_graphql.implementation.utils import capture_error -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.backfill import GraphenePartitionBackfill +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import ( GrapheneDuplicateDynamicPartitionError, GraphenePartitionSetNotFoundError, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/pipelines/pipeline.py b/python_modules/dagster-graphql/dagster_graphql/schema/pipelines/pipeline.py index be0b522e2da82..22f4e32623dda 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/pipelines/pipeline.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/pipelines/pipeline.py @@ -36,14 +36,13 @@ apply_cursor_limit_reverse, capture_error, ) -from dagster_graphql.schema.asset_checks import GrapheneAssetCheckHandle -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.dagster_types import ( GrapheneDagsterType, GrapheneDagsterTypeOrError, GrapheneDagsterTypeUnion, to_dagster_type, ) +from dagster_graphql.schema.entity_key import GrapheneAssetCheckHandle, GrapheneAssetKey from dagster_graphql.schema.errors import ( GrapheneDagsterTypeNotFoundError, GraphenePythonError, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/resources.py b/python_modules/dagster-graphql/dagster_graphql/schema/resources.py index b6b942fe17458..43946513601dd 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/resources.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/resources.py @@ -11,8 +11,8 @@ ResourceValueSnap, ) -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.config_types import GrapheneConfigTypeField +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import ( GraphenePythonError, GrapheneRepositoryNotFoundError, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/roots/mutation.py b/python_modules/dagster-graphql/dagster_graphql/schema/roots/mutation.py index 31d51fc9be512..24d67095948e4 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/roots/mutation.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/roots/mutation.py @@ -44,13 +44,13 @@ pipeline_selector_from_graphql, require_permission_check, ) -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.backfill import ( GrapheneAssetPartitionRange, GrapheneCancelBackfillResult, GrapheneLaunchBackfillResult, GrapheneResumeBackfillResult, ) +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import ( GrapheneAssetNotFoundError, GrapheneConflictingExecutionParamsError, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/roots/query.py b/python_modules/dagster-graphql/dagster_graphql/schema/roots/query.py index 48a244bee6457..123cdfdf37789 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/roots/query.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/roots/query.py @@ -103,7 +103,6 @@ GrapheneAssetConditionEvaluationRecordsOrError, ) from dagster_graphql.schema.asset_graph import ( - GrapheneAssetKey, GrapheneAssetLatestInfo, GrapheneAssetNode, GrapheneAssetNodeDefinitionCollision, @@ -118,6 +117,7 @@ GraphenePartitionBackfillOrError, GraphenePartitionBackfillsOrError, ) +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.env_vars import GrapheneEnvVarWithConsumersListOrError from dagster_graphql.schema.external import ( GrapheneRepositoriesOrError, @@ -129,6 +129,7 @@ ) from dagster_graphql.schema.inputs import ( GrapheneAssetBackfillPreviewParams, + GrapheneAssetCheckHandleInput, GrapheneAssetGroupSelector, GrapheneAssetKeyInput, GrapheneBulkActionsFilter, @@ -578,7 +579,8 @@ class Meta: truePartitionsForAutomationConditionEvaluationNode = graphene.Field( non_null_list(graphene.String), - assetKey=graphene.Argument(graphene.NonNull(GrapheneAssetKeyInput)), + assetKey=graphene.Argument(GrapheneAssetKeyInput), + assetCheckKey=graphene.Argument(GrapheneAssetCheckHandleInput), evaluationId=graphene.Argument(graphene.NonNull(graphene.ID)), nodeUniqueId=graphene.Argument(graphene.String), description="Retrieve the partition keys which were true for a specific automation condition evaluation node.", @@ -594,7 +596,8 @@ class Meta: assetConditionEvaluationForPartition = graphene.Field( GrapheneAssetConditionEvaluation, - assetKey=graphene.Argument(graphene.NonNull(GrapheneAssetKeyInput)), + assetKey=graphene.Argument(GrapheneAssetKeyInput), + assetCheckKey=graphene.Argument(GrapheneAssetCheckHandleInput), evaluationId=graphene.Argument(graphene.NonNull(graphene.ID)), partition=graphene.Argument(graphene.NonNull(graphene.String)), description="Retrieve the condition evaluation for an asset and partition.", @@ -602,7 +605,8 @@ class Meta: assetConditionEvaluationRecordsOrError = graphene.Field( GrapheneAssetConditionEvaluationRecordsOrError, - assetKey=graphene.Argument(graphene.NonNull(GrapheneAssetKeyInput)), + assetKey=graphene.Argument(GrapheneAssetKeyInput), + assetCheckKey=graphene.Argument(GrapheneAssetCheckHandleInput), limit=graphene.Argument(graphene.NonNull(graphene.Int)), cursor=graphene.Argument(graphene.String), description="Retrieve the condition evaluation records for an asset.", @@ -1269,7 +1273,8 @@ def resolve_autoMaterializeEvaluationsForEvaluationId( def resolve_assetConditionEvaluationForPartition( self, graphene_info: ResolveInfo, - assetKey: GrapheneAssetKeyInput, + assetKey: Optional[GrapheneAssetKeyInput], + assetCheckKey: Optional[GrapheneAssetCheckHandleInput], evaluationId: str, partition: str, ): @@ -1283,13 +1288,14 @@ def resolve_assetConditionEvaluationForPartition( def resolve_assetConditionEvaluationRecordsOrError( self, graphene_info: ResolveInfo, - assetKey: GrapheneAssetKeyInput, + assetKey: Optional[GrapheneAssetKeyInput], + assetCheckKey: Optional[GrapheneAssetCheckHandleInput], limit: int, cursor: Optional[str] = None, ): return fetch_asset_condition_evaluation_records_for_asset_key( graphene_info=graphene_info, - graphene_asset_key=assetKey, + graphene_entity_key=assetKey or assetCheckKey, cursor=cursor, limit=limit, ) @@ -1297,13 +1303,14 @@ def resolve_assetConditionEvaluationRecordsOrError( def resolve_truePartitionsForAutomationConditionEvaluationNode( self, graphene_info: ResolveInfo, - assetKey: GrapheneAssetKeyInput, + assetKey: Optional[GrapheneAssetKeyInput], + assetCheckKey: Optional[GrapheneAssetCheckHandleInput], evaluationId: str, nodeUniqueId: str, ): return fetch_true_partitions_for_evaluation_node( graphene_info=graphene_info, - graphene_asset_key=assetKey, + graphene_entity_key=assetKey or assetCheckKey, evaluation_id=int(evaluationId), node_unique_id=nodeUniqueId, ) diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/runs_feed.py b/python_modules/dagster-graphql/dagster_graphql/schema/runs_feed.py index 112ee46f89a03..73dfee2e3e8eb 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/runs_feed.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/runs_feed.py @@ -1,6 +1,6 @@ import graphene -from dagster_graphql.schema.asset_key import GrapheneAssetKey +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import GraphenePythonError from dagster_graphql.schema.util import non_null_list @@ -15,7 +15,7 @@ class GrapheneRunsFeedEntry(graphene.Interface): jobName = graphene.String() assetSelection = graphene.List(graphene.NonNull(GrapheneAssetKey)) assetCheckSelection = graphene.List( - graphene.NonNull("dagster_graphql.schema.asset_checks.GrapheneAssetCheckHandle") + graphene.NonNull("dagster_graphql.schema.entity_key.GrapheneAssetCheckHandle") ) class Meta: diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/sensors.py b/python_modules/dagster-graphql/dagster_graphql/schema/sensors.py index 627565bfb80c7..8cefee63c4a79 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/sensors.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/sensors.py @@ -25,8 +25,8 @@ capture_error, require_permission_check, ) -from dagster_graphql.schema.asset_key import GrapheneAssetKey from dagster_graphql.schema.asset_selections import GrapheneAssetSelection +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.errors import ( GraphenePythonError, GrapheneRepositoryNotFoundError, diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/table.py b/python_modules/dagster-graphql/dagster_graphql/schema/table.py index 08d1e6e22b645..472071dbe7aa3 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/table.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/table.py @@ -3,7 +3,7 @@ import graphene from dagster._core.definitions.metadata.table import TableColumn -from dagster_graphql.schema.asset_key import GrapheneAssetKey +from dagster_graphql.schema.entity_key import GrapheneAssetKey from dagster_graphql.schema.tags import GrapheneDefinitionTag from dagster_graphql.schema.util import non_null_list diff --git a/python_modules/libraries/dagster-components/dagster_components/core/component_generator.py b/python_modules/libraries/dagster-components/dagster_components/core/component_generator.py new file mode 100644 index 0000000000000..7535c24cf46b9 --- /dev/null +++ b/python_modules/libraries/dagster-components/dagster_components/core/component_generator.py @@ -0,0 +1 @@ +class ComponentGenerator: ...