You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by bo...@apache.org on 2017/06/07 07:02:45 UTC

[2/3] incubator-airflow git commit: [AIRFLOW-1277] Forbid KE creation with empty fields

[AIRFLOW-1277] Forbid KE creation with empty fields

KE = KnownEvent


Project: http://git-wip-us.apache.org/repos/asf/incubator-airflow/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-airflow/commit/65184a10
Tree: http://git-wip-us.apache.org/repos/asf/incubator-airflow/tree/65184a10
Diff: http://git-wip-us.apache.org/repos/asf/incubator-airflow/diff/65184a10

Branch: refs/heads/master
Commit: 65184a109e0179b50e4dae534a38c6d66bf080d8
Parents: d5d02ff
Author: Stanislav Kudriashev <st...@gmail.com>
Authored: Tue Jun 6 16:21:49 2017 +0300
Committer: Stanislav Kudriashev <st...@gmail.com>
Committed: Tue Jun 6 19:29:12 2017 +0300

----------------------------------------------------------------------
 airflow/www/app.py      |  2 +-
 airflow/www/views.py    | 29 +++++++++++++++++++++++++----
 tests/www/test_views.py | 37 +++++++++++++++++++++++++------------
 3 files changed, 51 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/65184a10/airflow/www/app.py
----------------------------------------------------------------------
diff --git a/airflow/www/app.py b/airflow/www/app.py
index 80e9b87..1ae2731 100644
--- a/airflow/www/app.py
+++ b/airflow/www/app.py
@@ -72,7 +72,7 @@ def create_app(config=None, testing=False):
         av(vs.QueryView(name='Ad Hoc Query', category="Data Profiling"))
         av(vs.ChartModelView(
             models.Chart, Session, name="Charts", category="Data Profiling"))
-        av(vs.KnowEventView(
+        av(vs.KnownEventView(
             models.KnownEvent,
             Session, name="Known Events", category="Data Profiling"))
         av(vs.SlaMissModelView(

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/65184a10/airflow/www/views.py
----------------------------------------------------------------------
diff --git a/airflow/www/views.py b/airflow/www/views.py
index e16d201..aadd200 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -2140,7 +2140,7 @@ chart_mapping = (
 chart_mapping = dict(chart_mapping)
 
 
-class KnowEventView(wwwutils.DataProfilingMixin, AirflowModelView):
+class KnownEventView(wwwutils.DataProfilingMixin, AirflowModelView):
     verbose_name = "known event"
     verbose_name_plural = "known events"
     form_columns = (
@@ -2152,10 +2152,31 @@ class KnowEventView(wwwutils.DataProfilingMixin, AirflowModelView):
         'description',
     )
     form_args = {
+        'label': {
+            'validators': [
+                validators.DataRequired(),
+            ],
+        },
+        'event_type': {
+            'validators': [
+                validators.DataRequired(),
+            ],
+        },
+        'start_date': {
+            'validators': [
+                validators.DataRequired(),
+            ],
+        },
         'end_date': {
-            'validators': {
+            'validators': [
+                validators.DataRequired(),
                 GreaterEqualThan(fieldname='start_date'),
-            }
+            ],
+        },
+        'reported_by': {
+            'validators': [
+                validators.DataRequired(),
+            ],
         }
     }
     column_list = (
@@ -2168,7 +2189,7 @@ class KnowEventView(wwwutils.DataProfilingMixin, AirflowModelView):
     column_default_sort = ("start_date", True)
 
 
-class KnowEventTypeView(wwwutils.DataProfilingMixin, AirflowModelView):
+class KnownEventTypeView(wwwutils.DataProfilingMixin, AirflowModelView):
     pass
 
 

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/65184a10/tests/www/test_views.py
----------------------------------------------------------------------
diff --git a/tests/www/test_views.py b/tests/www/test_views.py
index 3e2fe61..5a20cbd 100644
--- a/tests/www/test_views.py
+++ b/tests/www/test_views.py
@@ -15,7 +15,7 @@
 import unittest
 
 from airflow import configuration
-from airflow.models import KnownEvent, Pool
+from airflow import models
 from airflow.settings import Session
 from airflow.www import app as application
 
@@ -28,8 +28,13 @@ class TestKnownEventView(unittest.TestCase):
     def setUpClass(cls):
         super(TestKnownEventView, cls).setUpClass()
         session = Session()
-        session.query(KnownEvent).delete()
+        session.query(models.KnownEvent).delete()
+        session.query(models.User).delete()
         session.commit()
+        user = models.User(username='airflow')
+        session.add(user)
+        session.commit()
+        cls.user_id = user.id
         session.close()
 
     def setUp(self):
@@ -41,19 +46,27 @@ class TestKnownEventView(unittest.TestCase):
         self.session = Session()
         self.known_event = {
             'label': 'event-label',
-            'event_type': 1,
+            'event_type': '1',
             'start_date': '2017-06-05 12:00:00',
             'end_date': '2017-06-05 13:00:00',
-            'reported_by': 'airflow',
+            'reported_by': self.user_id,
             'description': '',
         }
 
     def tearDown(self):
-        self.session.query(KnownEvent).delete()
+        self.session.query(models.KnownEvent).delete()
         self.session.commit()
         self.session.close()
         super(TestKnownEventView, self).tearDown()
 
+    @classmethod
+    def tearDownClass(cls):
+        session = Session()
+        session.query(models.User).delete()
+        session.commit()
+        session.close()
+        super(TestKnownEventView, cls).tearDownClass()
+
     def test_create_known_event(self):
         response = self.app.post(
             self.CREATE_ENDPOINT,
@@ -61,7 +74,7 @@ class TestKnownEventView(unittest.TestCase):
             follow_redirects=True,
         )
         self.assertEqual(response.status_code, 200)
-        self.assertEqual(self.session.query(KnownEvent).count(), 1)
+        self.assertEqual(self.session.query(models.KnownEvent).count(), 1)
 
     def test_create_known_event_with_end_data_earlier_than_start_date(self):
         self.known_event['end_date'] = '2017-06-05 11:00:00'
@@ -74,7 +87,7 @@ class TestKnownEventView(unittest.TestCase):
             'Field must be greater than or equal to Start Date.',
             response.data.decode('utf-8'),
         )
-        self.assertEqual(self.session.query(KnownEvent).count(), 0)
+        self.assertEqual(self.session.query(models.KnownEvent).count(), 0)
 
 
 class TestPoolModelView(unittest.TestCase):
@@ -85,7 +98,7 @@ class TestPoolModelView(unittest.TestCase):
     def setUpClass(cls):
         super(TestPoolModelView, cls).setUpClass()
         session = Session()
-        session.query(Pool).delete()
+        session.query(models.Pool).delete()
         session.commit()
         session.close()
 
@@ -103,7 +116,7 @@ class TestPoolModelView(unittest.TestCase):
         }
 
     def tearDown(self):
-        self.session.query(Pool).delete()
+        self.session.query(models.Pool).delete()
         self.session.commit()
         self.session.close()
         super(TestPoolModelView, self).tearDown()
@@ -115,7 +128,7 @@ class TestPoolModelView(unittest.TestCase):
             follow_redirects=True,
         )
         self.assertEqual(response.status_code, 200)
-        self.assertEqual(self.session.query(Pool).count(), 1)
+        self.assertEqual(self.session.query(models.Pool).count(), 1)
 
     def test_create_pool_with_same_name(self):
         # create test pool
@@ -131,7 +144,7 @@ class TestPoolModelView(unittest.TestCase):
             follow_redirects=True,
         )
         self.assertIn('Already exists.', response.data.decode('utf-8'))
-        self.assertEqual(self.session.query(Pool).count(), 1)
+        self.assertEqual(self.session.query(models.Pool).count(), 1)
 
     def test_create_pool_with_empty_name(self):
         self.pool['pool'] = ''
@@ -141,7 +154,7 @@ class TestPoolModelView(unittest.TestCase):
             follow_redirects=True,
         )
         self.assertIn('This field is required.', response.data.decode('utf-8'))
-        self.assertEqual(self.session.query(Pool).count(), 0)
+        self.assertEqual(self.session.query(models.Pool).count(), 0)
 
 
 if __name__ == '__main__':