Skip to content

Commit

Permalink
Fix the timing, use the UTC time.
Browse files Browse the repository at this point in the history
  • Loading branch information
Bogdan Kyryliuk committed Aug 19, 2016
1 parent 1838419 commit 7e6944b
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 6 deletions.
7 changes: 7 additions & 0 deletions caravel/migrations/versions/ad82a75afd82_add_query_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,15 @@ def upgrade():
)
op.add_column('dbs', sa.Column('select_as_create_table_as', sa.Boolean(),
nullable=True))
op.create_index(op.f('ix_query_changed_on'), 'query', ['changed_on'],
unique=False)
op.create_index(
op.f('ix_query_user_id'), 'query', ['user_id'], unique=False)


def downgrade():
op.drop_index(op.f('ix_query_user_id'), table_name='query')
op.drop_index(op.f('ix_query_changed_on'), table_name='query')
op.drop_table('query')
op.drop_column('dbs', 'select_as_create_table_as')

6 changes: 4 additions & 2 deletions caravel/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1763,7 +1763,8 @@ class Query(Model):

# Store the tmp table into the DB only if the user asks for it.
tmp_table_name = Column(String(256))
user_id = Column(Integer, ForeignKey('ab_user.id'), nullable=True)
user_id = Column(
Integer, ForeignKey('ab_user.id'), nullable=True, index=True)

# models.QueryStatus
status = Column(String(16))
Expand All @@ -1790,7 +1791,8 @@ class Query(Model):
start_time = Column(DateTime)
end_time = Column(DateTime)
changed_on = Column(
DateTime, default=datetime.now, onupdate=datetime.now, nullable=True)
DateTime, default=datetime.now, onupdate=datetime.now, nullable=True,
index=True)

def to_dict(self):
return {
Expand Down
19 changes: 15 additions & 4 deletions caravel/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import sys
import time
import traceback
from datetime import datetime
from datetime import datetime, timedelta

import functools
import pandas as pd
Expand Down Expand Up @@ -1492,13 +1492,24 @@ def sql_json(self):
@expose("/queries/<last_updated_ms>")
@log_this
def queries(self, last_updated_ms):
"""Runs arbitrary sql and returns and json"""
"""Get the updated queries."""

if not g.user.get_id():
return Response(
json.dumps({'error': "Please login to access the queries."}),
status=403,
mimetype="application/json")

# Unix time, milliseconds.
if not last_updated_ms:
last_updated_ms = 0

last_updated_dt = datetime.fromtimestamp(int(last_updated_ms) / 1000)
print(last_updated_dt)
# Local date time, DO NOT USE IT.
# last_updated_dt = datetime.fromtimestamp(int(last_updated_ms) / 1000)

# UTC date time, same that is stored in the DB.
last_updated_dt = utils.EPOCH + timedelta(
seconds=int(last_updated_ms) / 1000)

s = db.session()
sql_queries = s.query(models.Query).filter(
Expand Down
35 changes: 35 additions & 0 deletions tests/core_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -357,8 +357,43 @@ def test_sql_json_has_access(self):
appbuilder.sm.find_role('Astronaut'),
password='general')
data = self.run_sql('SELECT * FROM ab_user', 'gagarin')
db.session.query(models.Query).delete()
db.session.commit()
assert len(data['data']) > 0

def test_queries_endpoint(self):
db.session.query(models.Query).delete()
resp = self.client.get('/caravel/queries/{}'.format(0))
self.assertEquals(403, resp.status_code)

self.login('admin')
resp = self.client.get('/caravel/queries/{}'.format(0))
data = json.loads(resp.data.decode('utf-8'))
self.assertEquals(0, len(data))
self.logout()

self.run_sql("SELECT * FROM ab_user", 'admin')
self.run_sql("SELECT * FROM ab_user1", 'admin')
self.login('admin')
resp = self.client.get('/caravel/queries/{}'.format(0))
data = json.loads(resp.data.decode('utf-8'))
self.assertEquals(2, len(data))

query = db.session.query(models.Query).filter_by(
sql='SELECT * FROM ab_user').first()
query.changed_on = utils.EPOCH
db.session.commit()

resp = self.client.get('/caravel/queries/{}'.format(123456))
data = json.loads(resp.data.decode('utf-8'))
self.assertEquals(1, len(data))

self.logout()
resp = self.client.get('/caravel/queries/{}'.format(0))
self.assertEquals(403, resp.status_code)

db.session.query(models.Query).delete()

def test_sql_json(self):
data = self.run_sql("SELECT * FROM ab_user", 'admin')
assert len(data['data']) > 0
Expand Down

0 comments on commit 7e6944b

Please sign in to comment.