Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions common/models/project_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,29 @@
class ProjectModel(db.Document):
user = db.ReferenceField(UserModel, reverse_delete_rule=db.CASCADE, required=True)
name = db.StringField(max_length=300, required=True)
created_at = db.DateTimeField(default=datetime.datetime.now)

def to_smt_json(self, request):
from ..models import RecordModel
query = RecordModel.objects(project=self)
records = [r.to_json() for r in query]
return json.dumps({'project' : self.name, 'url' : request.url, 'records' : records})

def _count(self):
@property
def record_count(self):
return self.records.count()

@property
def records(self):
from ..models import RecordModel
return RecordModel.objects(project=self).count()
return RecordModel.objects(project=self)

@property
def last_updated(self):
return self.records.order_by('-last_updated').limit(1).first().last_updated

@property
def duration(self):
return self.records.sum('duration')



12 changes: 10 additions & 2 deletions common/models/record_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@ class RecordModel(db.Document):
possible_status = ["crashed", "unknown", "started", "running", "finished"]
status = db.StringField(default="unknown", choices=possible_status)
tags = db.ListField(db.StringField(max_length=100))
created_at = db.DateTimeField(default=datetime.datetime.now)
last_updated = db.DateTimeField(default=datetime.datetime.now())

def save(self, *args, **kwargs):
self.last_updated = datetime.datetime.now()
return super(RecordModel, self).save(*args, **kwargs)

def update_fields(self, data):
for k, v in self._fields.iteritems():
if not v.required:
Expand All @@ -23,8 +27,12 @@ def update_fields(self, data):
def update(self, data):
for k, v in self.update_fields(data):
if k in data.keys():
setattr(self, k, data[k])
if k == 'timestamp':
self.timestamp = datetime.datetime.strptime(data[k], '%Y-%m-%d %X')
else:
setattr(self, k, data[k])
del data[k]

self.save()
if data:
body, created = RecordBodyModel.objects.get_or_create(head=self)
Expand Down
26 changes: 23 additions & 3 deletions common/models/user_model.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import datetime
from ..core import db
import flask as fk


class UserModel(db.Document):
created_at = db.DateTimeField(default=datetime.datetime.now)
Expand All @@ -24,5 +24,25 @@ def get_id(self):
except NameError:
return str(self.id) # python 3



@property
def projects(self):
from common.models import ProjectModel
return ProjectModel.objects(user=self)

@property
def record_count(self):
return sum([p.record_count for p in self.projects])

@property
def records(self):
records = []
for project in self.projects:
records += project.records
return records

@property
def duration(self):
return sum([p.duration for p in self.projects])



2 changes: 2 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

APP_TITLE = 'Sumatra Cloud'

VERSION = '0.1-dev'

OPENID_PROVIDERS = [
{'name': 'Google', 'url': 'https://www.google.com/accounts/o8/id'},
{'name': 'MyOpenID', 'url': 'https://www.myopenid.com'}]
Expand Down
3 changes: 2 additions & 1 deletion smt_view/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@
login_manager.login_view = 'login_view'
openid = OpenID(app, os.path.join(basedir, 'tmp'))

import views
from . import views
from common import models
from . import filters
22 changes: 22 additions & 0 deletions smt_view/filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import datetime
from smt_view import app

def ff(i, st):
if i == 0:
return
else:
if i == 1:
st = st[:-1]
return '{0} {1}'.format(i, st)

@app.template_filter('hms')
def _jinja2_filter_hms(time):
td = datetime.timedelta(seconds=time)
days = td.days
hours, remainder = divmod(td.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
ss_ = [ff(i, st) for i, st in [[days, 'days'], [hours, 'hours'], [minutes, 'minutes'], [seconds, 'seconds']]]
ss = [s for s in ss_ if s is not None]
return ', '.join(ss)


105 changes: 0 additions & 105 deletions smt_view/static/css/dashboard.css

This file was deleted.

Loading