# Licensed to the Apache Software Foundation (ASF) under one# or more contributor license agreements. See the NOTICE file# distributed with this work for additional information# regarding copyright ownership. The ASF licenses this file# to you under the Apache License, Version 2.0 (the# "License"); you may not use this file except in compliance# with the License. You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing,# software distributed under the License is distributed on an# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY# KIND, either express or implied. See the License for the# specific language governing permissions and limitations# under the License.from__future__importannotationsimporttypingfromairflow.datasetsimportBaseDataset,DatasetAllfromairflow.exceptionsimportAirflowTimetableInvalidfromairflow.timetables.simpleimportDatasetTriggeredTimetableasDatasetTriggeredSchedulefromairflow.utils.typesimportDagRunTypeiftyping.TYPE_CHECKING:fromcollections.abcimportCollectionimportpendulumfromairflow.datasetsimportDatasetfromairflow.timetables.baseimportDagRunInfo,DataInterval,TimeRestriction,Timetable
[docs]classDatasetOrTimeSchedule(DatasetTriggeredSchedule):"""Combine time-based scheduling with event-based scheduling."""def__init__(self,*,timetable:Timetable,datasets:Collection[Dataset]|BaseDataset,)->None:
[docs]defvalidate(self)->None:ifisinstance(self.timetable,DatasetTriggeredSchedule):raiseAirflowTimetableInvalid("cannot nest dataset timetables")ifnotisinstance(self.dataset_condition,BaseDataset):raiseAirflowTimetableInvalid("all elements in 'datasets' must be datasets")
@property
[docs]defsummary(self)->str:returnf"Dataset or {self.timetable.summary}"