ashb closed pull request #3743: [AIRFLOW-2799] Filtering UI objects by datetime 
is broken
URL: https://github.com/apache/incubator-airflow/pull/3743
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/airflow/www/utils.py b/airflow/www/utils.py
index 0c4f4b05d6..941b9c2819 100644
--- a/airflow/www/utils.py
+++ b/airflow/www/utils.py
@@ -29,11 +29,19 @@
 import gzip
 import json
 import time
+import datetime
 
 from flask import after_this_request, request, Response
 from flask_admin.contrib.sqla.filters import FilterConverter
+from flask_admin.model.filters import BaseDateTimeFilter
 from flask_admin.model import filters
 from flask_login import current_user
+from flask_admin.contrib.sqla.filters import ( 
+    DateTimeEqualFilter, DateTimeNotEqualFilter,
+    DateTimeGreaterFilter, DateTimeSmallerFilter,
+    DateTimeBetweenFilter, DateTimeNotBetweenFilter,
+    FilterEmpty
+)
 import wtforms
 from wtforms.compat import text_type
 
@@ -41,6 +49,7 @@
 from airflow.utils.db import create_session
 from airflow.utils import timezone
 from airflow.utils.json import AirflowJsonEncoder
+from airflow.utils.timezone import make_aware
 
 AUTHENTICATE = configuration.conf.getboolean('webserver', 'AUTHENTICATE')
 
@@ -428,7 +437,26 @@ def __call__(self, field, **kwargs):
         return wtforms.widgets.core.HTMLString(html)
 
 
+# This class simply does the same as the base class, but returns
+# an aware datetime object (should be in UTC)
+class BaseUTCDateTimeFilter(BaseDateTimeFilter):
+    def clean(self, value):
+        return make_aware(datetime.datetime.strptime(value, '%Y-%m-%d 
%H:%M:%S'))
+
+class UTCDateTimeEqualFilter(DateTimeEqualFilter, BaseUTCDateTimeFilter): pass
+class UTCDateTimeNotEqualFilter(DateTimeNotEqualFilter, 
BaseUTCDateTimeFilter): pass
+class UTCDateTimeGreaterFilter(DateTimeGreaterFilter, BaseUTCDateTimeFilter): 
pass
+class UTCDateTimeSmallerFilter(DateTimeSmallerFilter, BaseUTCDateTimeFilter): 
pass
+class UTCDateTimeBetweenFilter(DateTimeBetweenFilter, BaseUTCDateTimeFilter): 
pass
+class UTCDateTimeNotBetweenFilter(DateTimeNotBetweenFilter, 
BaseUTCDateTimeFilter): pass
+
+
 class UtcFilterConverter(FilterConverter):
+    utcdatetime_filters = (UTCDateTimeEqualFilter, UTCDateTimeNotEqualFilter,
+                           UTCDateTimeGreaterFilter, UTCDateTimeSmallerFilter,
+                           UTCDateTimeBetweenFilter, 
UTCDateTimeNotBetweenFilter,
+                           FilterEmpty)
+
     @filters.convert('utcdatetime')
     def conv_utcdatetime(self, column, name, **kwargs):
-        return self.conv_datetime(column, name, **kwargs)
+        return [f(column, name, **kwargs) for f in self.utcdatetime_filters]


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to