Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B75A8200C76 for ; Sat, 13 May 2017 21:10:57 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id B5F0D160BBB; Sat, 13 May 2017 19:10:57 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id D49FC160BB2 for ; Sat, 13 May 2017 21:10:56 +0200 (CEST) Received: (qmail 61290 invoked by uid 500); 13 May 2017 19:10:56 -0000 Mailing-List: contact commits-help@airflow.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@airflow.incubator.apache.org Delivered-To: mailing list commits@airflow.incubator.apache.org Received: (qmail 61281 invoked by uid 99); 13 May 2017 19:10:55 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 13 May 2017 19:10:55 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id D40A818128D for ; Sat, 13 May 2017 19:10:54 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.222 X-Spam-Level: X-Spam-Status: No, score=-4.222 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id 56QeRiv0QzPF for ; Sat, 13 May 2017 19:10:53 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with SMTP id 6693F5FC57 for ; Sat, 13 May 2017 19:10:52 +0000 (UTC) Received: (qmail 61270 invoked by uid 99); 13 May 2017 19:10:51 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 13 May 2017 19:10:51 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 7A79DDFE15; Sat, 13 May 2017 19:10:51 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: bolke@apache.org To: commits@airflow.incubator.apache.org Message-Id: <7e5643bb16464c19b419d1237ae1c310@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: incubator-airflow git commit: [AIRFLOW-1145] Fix closest_date_partition function with before set to True If we're looking for the closest date before, we should take the latest date in the list of date before. Date: Sat, 13 May 2017 19:10:51 +0000 (UTC) archived-at: Sat, 13 May 2017 19:10:57 -0000 Repository: incubator-airflow Updated Branches: refs/heads/v1-8-test 0db3249df -> 9e6dfcbdb [AIRFLOW-1145] Fix closest_date_partition function with before set to True If we're looking for the closest date before, we should take the latest date in the list of date before. Closes #2257 from julien-gm/fix_closest-date- partition (cherry picked from commit 0da540bf7840ae3cac866e352fba2b8b5cd9a625) Signed-off-by: Bolke de Bruin Project: http://git-wip-us.apache.org/repos/asf/incubator-airflow/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-airflow/commit/9e6dfcbd Tree: http://git-wip-us.apache.org/repos/asf/incubator-airflow/tree/9e6dfcbd Diff: http://git-wip-us.apache.org/repos/asf/incubator-airflow/diff/9e6dfcbd Branch: refs/heads/v1-8-test Commit: 9e6dfcbdb4a4bbd63a8683778e3b3dafe149150c Parents: 0db3249 Author: julien-gm Authored: Sat May 13 21:10:13 2017 +0200 Committer: Bolke de Bruin Committed: Sat May 13 21:10:46 2017 +0200 ---------------------------------------------------------------------- airflow/macros/hive.py | 4 ++-- tests/macros/__init__.py | 14 ++++++++++++++ tests/macros/test_hive.py | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/9e6dfcbd/airflow/macros/hive.py ---------------------------------------------------------------------- diff --git a/airflow/macros/hive.py b/airflow/macros/hive.py index 13b8234..c68c293 100644 --- a/airflow/macros/hive.py +++ b/airflow/macros/hive.py @@ -61,8 +61,8 @@ def _closest_date(target_dt, date_list, before_target=None): :returns: The closest date :rtype: datetime.date or None ''' - fb = lambda d: d - target_dt if d >= target_dt else datetime.timedelta.max - fa = lambda d: d - target_dt if d <= target_dt else datetime.timedelta.min + fb = lambda d: target_dt - d if d <= target_dt else datetime.timedelta.max + fa = lambda d: d - target_dt if d >= target_dt else datetime.timedelta.max fnone = lambda d: target_dt - d if d < target_dt else d - target_dt if before_target is None: return min(date_list, key=fnone).date() http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/9e6dfcbd/tests/macros/__init__.py ---------------------------------------------------------------------- diff --git a/tests/macros/__init__.py b/tests/macros/__init__.py new file mode 100644 index 0000000..759b563 --- /dev/null +++ b/tests/macros/__init__.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# +# Licensed 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. +# http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/9e6dfcbd/tests/macros/test_hive.py ---------------------------------------------------------------------- diff --git a/tests/macros/test_hive.py b/tests/macros/test_hive.py new file mode 100644 index 0000000..17ee68f --- /dev/null +++ b/tests/macros/test_hive.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Licensed 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 datetime import datetime, timedelta +import unittest + +from airflow.macros import hive + + +class Hive(unittest.TestCase): + def test_closest_ds_partition(self): + d1 = datetime.strptime('2017-04-24', '%Y-%m-%d') + d2 = datetime.strptime('2017-04-25', '%Y-%m-%d') + d3 = datetime.strptime('2017-04-26', '%Y-%m-%d') + d4 = datetime.strptime('2017-04-28', '%Y-%m-%d') + d5 = datetime.strptime('2017-04-29', '%Y-%m-%d') + target_dt = datetime.strptime('2017-04-27', '%Y-%m-%d') + date_list = [d1, d2, d3, d4, d5] + + self.assertEquals("2017-04-26", str(hive._closest_date(target_dt, date_list, True))) + self.assertEquals("2017-04-28", str(hive._closest_date(target_dt, date_list, False))) + + # when before is not set, the closest date should be returned + self.assertEquals("2017-04-26", str(hive._closest_date(target_dt, [d1, d2, d3, d5], None))) + self.assertEquals("2017-04-28", str(hive._closest_date(target_dt, [d1, d2, d4, d5]))) + self.assertEquals("2017-04-26", str(hive._closest_date(target_dt, date_list))) + + +if __name__ == '__main__': + unittest.main()