statusforce/statusforce/models.py

52 lines
1.5 KiB
Python

from datetime import datetime
from sqlalchemy.sql.expression import func
from statusforce.db import Model, Column, ForeignKey, Boolean, DateTime, Enum, Integer, String, Text, \
relationship, backref
class Service(Model):
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False)
status = Column(Enum('operational', 'unclear', 'offline', native_enum=False), default='operational')
incidents = relationship('Incident', backref=backref('service', lazy=True))
def __str__(self):
return self.name
class Incident(Model):
id = Column(Integer, primary_key=True, autoincrement=True)
service_id = Column(Integer, ForeignKey('service.id'))
title = Column(String, nullable=False)
description = Column(Text)
is_resolved = Column(Boolean, default=False)
created = Column(DateTime, nullable=False, default=datetime.utcnow)
updated = Column(DateTime, onupdate=func.current_timestamp())
def __str__(self):
return '{} ({})'.format(self.title, self.service.name)
class User(Model):
id = Column(Integer, primary_key=True, autoincrement=True)
full_name = Column(String)
email = Column(String, nullable=False)
password = Column(String, nullable=False)
is_active = Column(Boolean, default=True)
@property
def is_authenticated(self):
return True
@property
def is_anonymous(self):
return False
def get_id(self):
return self.id
def __str__(self):
return self.full_name or self.email