99
1010import peewee
1111from passlib .apps import custom_app_context as pwd_context
12- from playhouse .postgres_ext import ArrayField
12+ from playhouse .postgres_ext import ArrayField , DateTimeTZField , PostgresqlExtDatabase
1313from flask .ext .login import UserMixin , AnonymousUserMixin
1414
1515from redash import utils , settings
1818class Database (object ):
1919 def __init__ (self ):
2020 self .database_config = dict (settings .DATABASE_CONFIG )
21+ self .database_config ['register_hstore' ] = False
2122 self .database_name = self .database_config .pop ('name' )
22- self .database = peewee . PostgresqlDatabase (self .database_name , ** self .database_config )
23+ self .database = PostgresqlExtDatabase (self .database_name , ** self .database_config )
2324 self .app = None
2425 self .pid = os .getpid ()
2526
@@ -96,7 +97,7 @@ class Group(BaseModel):
9697 name = peewee .CharField (max_length = 100 )
9798 permissions = ArrayField (peewee .CharField , default = DEFAULT_PERMISSIONS )
9899 tables = ArrayField (peewee .CharField )
99- created_at = peewee . DateTimeField (default = datetime .datetime .now )
100+ created_at = DateTimeTZField (default = datetime .datetime .now )
100101
101102 class Meta :
102103 db_table = 'groups'
@@ -173,7 +174,7 @@ class ActivityLog(BaseModel):
173174 user = peewee .ForeignKeyField (User )
174175 type = peewee .IntegerField ()
175176 activity = peewee .TextField ()
176- created_at = peewee . DateTimeField (default = datetime .datetime .now )
177+ created_at = DateTimeTZField (default = datetime .datetime .now )
177178
178179 class Meta :
179180 db_table = 'activity_log'
@@ -198,7 +199,7 @@ class DataSource(BaseModel):
198199 options = peewee .TextField ()
199200 queue_name = peewee .CharField (default = "queries" )
200201 scheduled_queue_name = peewee .CharField (default = "queries" )
201- created_at = peewee . DateTimeField (default = datetime .datetime .now )
202+ created_at = DateTimeTZField (default = datetime .datetime .now )
202203
203204 class Meta :
204205 db_table = 'data_sources'
@@ -222,7 +223,7 @@ class QueryResult(BaseModel):
222223 query = peewee .TextField ()
223224 data = peewee .TextField ()
224225 runtime = peewee .FloatField ()
225- retrieved_at = peewee . DateTimeField ()
226+ retrieved_at = DateTimeTZField ()
226227
227228 class Meta :
228229 db_table = 'query_results'
@@ -297,7 +298,7 @@ class Query(BaseModel):
297298 user_email = peewee .CharField (max_length = 360 , null = True )
298299 user = peewee .ForeignKeyField (User )
299300 is_archived = peewee .BooleanField (default = False , index = True )
300- created_at = peewee . DateTimeField (default = datetime .datetime .now )
301+ created_at = DateTimeTZField (default = datetime .datetime .now )
301302
302303 class Meta :
303304 db_table = 'queries'
@@ -441,7 +442,7 @@ class Dashboard(BaseModel):
441442 layout = peewee .TextField ()
442443 dashboard_filters_enabled = peewee .BooleanField (default = False )
443444 is_archived = peewee .BooleanField (default = False , index = True )
444- created_at = peewee . DateTimeField (default = datetime .datetime .now )
445+ created_at = DateTimeTZField (default = datetime .datetime .now )
445446
446447 class Meta :
447448 db_table = 'dashboards'
@@ -552,7 +553,7 @@ class Widget(BaseModel):
552553 width = peewee .IntegerField ()
553554 options = peewee .TextField ()
554555 dashboard = peewee .ForeignKeyField (Dashboard , related_name = 'widgets' , index = True )
555- created_at = peewee . DateTimeField (default = datetime .datetime .now )
556+ created_at = DateTimeTZField (default = datetime .datetime .now )
556557
557558 # unused; kept for backward compatability:
558559 type = peewee .CharField (max_length = 100 , null = True )
@@ -586,13 +587,14 @@ def delete_instance(self, *args, **kwargs):
586587 self .dashboard .save ()
587588 super (Widget , self ).delete_instance (* args , ** kwargs )
588589
590+
589591class Event (BaseModel ):
590592 user = peewee .ForeignKeyField (User , related_name = "events" )
591593 action = peewee .CharField ()
592594 object_type = peewee .CharField ()
593595 object_id = peewee .CharField (null = True )
594596 additional_properties = peewee .TextField (null = True )
595- created_at = peewee . DateTimeField (default = datetime .datetime .now )
597+ created_at = DateTimeTZField (default = datetime .datetime .now )
596598
597599 class Meta :
598600 db_table = 'events'
0 commit comments