Add "Active at" column to user list. (#3026)

* add last_active_at to users page

* Use our JSON encoder as the SQLAlchemy JSON serializer.

* Fixed some inconsistencies in the user query class methods.

* Minor cosmetic fixes.

* Add some make tasks for easier development.

* Add user detail sync system based on Redis backend.

There is a periodic Celery task that updates a new “details” JSONB column in the “user” table with the data from Redis.

Currently this is only used for tracking the date of last activity of a user but can be extended with other user information later.

Updates a few dependencies.

* Normalize a few Flask extension API names.

* Reduce implementation complexity of JSONEncoder.

* Use request_started signal to make sure we have a request context.

Otherwise loading the user based on the request won’t work.

* Fix test that checks if disabled users can login.

This correctly uses a URL path that includes the current organization and checks for the error message.

The previous test seems to have been a red herring.

* Minor cosmetic fixes.

* Remove needs_sync in favor of just deleting things.

* Misc review fixes.

* Ignore line length.

* Split redash.models import several modules.

* Move walrus UTC DateTimeField into redash.models.types.

* Restore distinctly loading dashboards.

* Simplify default values for user details.

* Define __repr__ methods generically.

* Consistently have underscore methods at the top of model methods.

* Fix tests.

* Split redash.models import several modules.

* Update to latest walrus and redis-py.

* Update kombu to 4.2.2 for redis-py 3.x compatibility.

* Remove redis-cli container after running Make task.

* Move buffer condition after datetime/time conditions.

* Update walrus to 0.7.1.

* Refactor some query APIs.

This uses the flask-sqlalchemy helpers consistently and makes more use of mixins.

* Post rebase fixes.

* Use correct kombu version

* Fix migration down revision
This commit is contained in:
Jannis Leidel
2019-01-07 09:30:42 +01:00
committed by Arik Fraimovich
parent 569430e5cd
commit 44dff83046
27 changed files with 1201 additions and 773 deletions

View File

@@ -28,7 +28,6 @@ class TestUserListResourcePost(BaseTestCase):
rv = self.make_request('post', '/api/users', data=test_user, user=admin)
self.assertEqual(rv.status_code, 400)
def test_creates_user(self):
admin = self.factory.create_admin()
@@ -274,12 +273,12 @@ class TestUserDisable(BaseTestCase):
self.db.session.commit()
with patch('redash.handlers.authentication.login_user') as login_user_mock:
rv = self.client.post('/login', data={'email': user.email, 'password': 'password'})
rv = self.post_request('/login', data={'email': user.email, 'password': 'password'}, org=self.factory.org)
# login handler should not be called
login_user_mock.assert_not_called()
# check for redirect back to login page
self.assertEquals(rv.status_code, 301)
self.assertIn('/login', rv.headers.get('Location', None))
# check if error is raised
self.assertEquals(rv.status_code, 200)
self.assertIn('Wrong email or password', rv.data)
def test_disabled_user_should_not_access_api(self):
# Note: some API does not require user, so check the one which requires