From a85541d9f7622813ec98bf042164414edc1fb366 Mon Sep 17 00:00:00 2001 From: yvesf Date: Sat, 25 Jun 2011 17:14:05 +0200 Subject: web -> bottle --- ebus/sql/model.py | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 ebus/sql/model.py (limited to 'ebus/sql/model.py') diff --git a/ebus/sql/model.py b/ebus/sql/model.py new file mode 100644 index 0000000..7e21e82 --- /dev/null +++ b/ebus/sql/model.py @@ -0,0 +1,79 @@ +from datetime import datetime +from sqlalchemy import Column, Integer, Float, DateTime, String, ForeignKey +from sqlalchemy.orm import relationship, backref +from sqlalchemy.ext.declarative import declarative_base + +ModelBase = declarative_base() + +class Sensor(ModelBase): + __tablename__ = 'sensor' + + id = Column(Integer, primary_key=True) + name = Column(String) + description = Column(String, default="") + + def __init__(self, name, description=""): + self.name = name + self.description = description + + def __repr__(self): + return "" % (self.id, self.name, self.description) + +# http://www.sqlalchemy.org/docs/05/reference/ext/declarative.html#inheritance-configuration +class Value(ModelBase): + __tablename__ = 'value' + + id = Column(Integer, primary_key=True) + timestamp = Column(DateTime) + sensor_id = Column(Integer, ForeignKey("sensor.id")) + sensor = relationship(Sensor, backref=backref('values', order_by=timestamp)) + + discriminator = Column('type', String(50)) + __mapper_args__ = {'polymorphic_on': discriminator} + + def __init__(self, sensor, timestamp=datetime.now()): + self.timestamp = timestamp + self.sensor = sensor + + def __repr__(self): + return "" % (self.id, self.sensor, self.value, self.timestamp) + + def value(self): + raise NotImplementedException() + +class ValueFloat(Value): + __mapper_args__ = {'polymorphic_identity': 'float'} + value_float = Column(Float(precision=4)) + + def __init__(self, sensor, value, timestamp=datetime.now()): + Value.__init__(self, sensor, timestamp) + self.value_float = value + + def value(self): + return self.value_float + +class ValueInt(Value): + __mapper_args__ = {'polymorphic_identity': 'int'} + value_int = Column(Integer) + + def __init__(self, sensor, value, timestamp=datetime.now()): + Value.__init__(self, sensor, timestamp) + self.value_int = value + + def value(self): + return self.value_int + +class ValueString(Value): + __mapper_args__ = {'polymorphic_identity': 'string'} + value_string = Column(String) + + def __init__(self, sensor, value, timestamp=datetime.now()): + Value.__init__(self, sensor, timestamp) + self.value_string = value + + def value(self): + return self.value_string + + + + -- cgit v1.2.1