diff --git a/.gitignore b/.gitignore index 57c945dd2b..ef242d2318 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.pyc *.db tmp +local_config diff --git a/TODO.md b/TODO.md index 8ac2b79885..f6a28803fd 100644 --- a/TODO.md +++ b/TODO.md @@ -1,8 +1,5 @@ # TODO -* STOCK CHART + compare time ranges -* Save a chart -* Datasource + Owner -* Column description +* compare time ranges * Label * CSV -* Bookmarks / url shortener +* Save / bookmark / url shortener diff --git a/app.db b/app.db index 7d4b7d0465..9b459d8478 100644 Binary files a/app.db and b/app.db differ diff --git a/app/__init__.py b/app/__init__.py index 8c8ef8829e..9bbdd8ea96 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -19,20 +19,5 @@ class MyIndexView(IndexView): appbuilder = AppBuilder( app, db.session, base_template='panoramix/base.html', indexview=MyIndexView) -#appbuilder.app_name = 'Panoramix' - - -""" -from sqlalchemy.engine import Engine -from sqlalchemy import event - -#Only include this for SQLLite constraints -@event.listens_for(Engine, "connect") -def set_sqlite_pragma(dbapi_connection, connection_record): - # Will force sqllite contraint foreign keys - cursor = dbapi_connection.cursor() - cursor.execute("PRAGMA foreign_keys=ON") - cursor.close() -""" from app import views diff --git a/app/models.py b/app/models.py index 221e73c6f5..82cc38797e 100644 --- a/app/models.py +++ b/app/models.py @@ -1,6 +1,7 @@ from flask.ext.appbuilder import Model from datetime import datetime, timedelta from flask.ext.appbuilder.models.mixins import AuditMixin, FileColumn, ImageColumn +from flask.ext.appbuilder.security.sqla.models import User from sqlalchemy import Column, Integer, String, ForeignKey, Text, Boolean from sqlalchemy.orm import relationship from app import db, utils @@ -18,6 +19,9 @@ class Datasource(Model, AuditMixin): is_hidden = Column(Boolean, default=False) description = Column(Text) default_endpoint = Column(Text) + user_id = Column(Integer, + ForeignKey('ab_user.id')) + owner = relationship('User', backref='datasources', foreign_keys=[user_id]) @property def metrics_combo(self): @@ -111,6 +115,7 @@ class Metric(Model): ForeignKey('datasources.datasource_name')) datasource = relationship('Datasource', backref='metrics') json = Column(Text) + description = Column(Text) @property def json_obj(self): @@ -132,6 +137,7 @@ class Column(Model, AuditMixin): max = Column(Boolean, default=False) min = Column(Boolean, default=False) filterable = Column(Boolean, default=False) + description = Column(Text) def __repr__(self): return self.column_name @@ -150,8 +156,6 @@ class Column(Model, AuditMixin): json=json.dumps({ 'type': 'count', 'name': 'count'}) )) - if self.datasource.datasource_name == 'platform' and self.column_name=='subject_id': - print((self.column_name, self.type, self.isnum)) if self.sum and self.isnum: mt = self.type.lower() + 'Sum' diff --git a/app/templates/appbuilder/baselayout.html b/app/templates/appbuilder/baselayout.html index 60b151f9b6..c45c3a3866 100644 --- a/app/templates/appbuilder/baselayout.html +++ b/app/templates/appbuilder/baselayout.html @@ -11,7 +11,7 @@ {% endblock %} -
+
{% block messages %} {% include 'appbuilder/flash.html' %} @@ -20,6 +20,10 @@ {% endblock %}
+
+ {% block content_fluid %} + {% endblock %} +
{% block footer %}