This is an automated email from the ASF dual-hosted git repository. ephraimanierobi pushed a commit to branch v2-2-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit a99d290311f9e22762e750c2513e28863c41dad3 Author: Ping Zhang <pin...@umich.edu> AuthorDate: Thu Feb 10 04:40:51 2022 -0800 Fix Resources __eq__ check (#21442) (cherry picked from commit 6b308446eae2f83bf379f976c7d7801aa53370a3) --- airflow/utils/operator_resources.py | 4 ++++ tests/utils/test_operator_resources.py | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/airflow/utils/operator_resources.py b/airflow/utils/operator_resources.py index 8781021..010bf33 100644 --- a/airflow/utils/operator_resources.py +++ b/airflow/utils/operator_resources.py @@ -53,6 +53,8 @@ class Resource: self._qty = qty def __eq__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented return self.__dict__ == other.__dict__ def __repr__(self): @@ -133,6 +135,8 @@ class Resources: self.gpus = GpuResource(gpus) def __eq__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented return self.__dict__ == other.__dict__ def __repr__(self): diff --git a/tests/utils/test_operator_resources.py b/tests/utils/test_operator_resources.py new file mode 100644 index 0000000..fb15580 --- /dev/null +++ b/tests/utils/test_operator_resources.py @@ -0,0 +1,35 @@ +# +# 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. + +import unittest + +from airflow.utils.operator_resources import Resources + + +class TestResources(unittest.TestCase): + def test_resource_eq(self): + r = Resources(cpus=0.1, ram=2048) + assert r not in [{}, [], None] + assert r == r + + r2 = Resources(cpus=0.1, ram=2048) + assert r == r2 + assert r2 == r + + r3 = Resources(cpus=0.2, ram=2048) + assert r != r3