iro/model/schema.py
author Sandro Knauß <knauss@netzguerilla.net>
Tue, 10 Jan 2012 06:04:35 +0100
branchdevel
changeset 94 4349f10d77a6
parent 92 f479738b4879
child 117 351a02310dd8
permissions -rw-r--r--
updatating schema for mysql

# -*- coding: utf-8 -*- 

from sqlalchemy import Column, Integer, String, Sequence, Boolean, DateTime, Numeric, Enum
from sqlalchemy.ext.declarative import declarative_base

#relationship
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref

Base = declarative_base()

__tables__=["User", "Job", "Message", "Offer", "Userright"]

class Userright(Base):
    """Über welche Routen darf ein Benutzer Daten verschicken und welches sind die Standardrouten (<em>isDefault=1</em>) für den Benuter."""
    __tablename__ = 'userright'
    user_name = Column('user', String(100), ForeignKey('apiuser.name'), primary_key=True)
    offer_name = Column('offer', String(100), ForeignKey('offer.name'), primary_key=True)
    isDefault = Column(Boolean)
    offer = relationship("Offer")

class Offer(Base):
    """Alle Routen über die SMS, Faxe und Mails verschickt werden könnnen. <em>provider</em>, <em>typ</em> und <em>route</em> werden verwendet, um die entsprechenden Zugangsdaten laden zu können."""
    __tablename__ = "offer"
    name = Column(String(100), primary_key=True)
    provider = Column(String(100))
    route = Column(String(100))
    typ = Column(String(100))
    

class Message(Base):
    """Wenn ein Vorgang von Iro Kosten erzeugt hat wird eine neue Zeile eingefügt. Solange nicht bezahlt wurde ist <em>isBilled=0</em>."""
    __tablename__ = "message"
    id = Column(Integer, Sequence('message_id_seq'), primary_key=True)
    recipient = Column(String(100))
    isBilled = Column(Boolean)
    date = Column(DateTime)
    price = Column(Numeric(8,2))
    job_hash = Column("job",Integer, ForeignKey('job.hash'))
    job = relationship("Job", backref=backref('messages'))
    offer_id = Column("offer",String(100), ForeignKey('offer.name'))
    offer = relationship("Offer", backref=backref('messages'))


class Job(Base):
    """Ein kompletter Auftrag, der an Iro zum verschicken übergeben wird. Status zeigt den generellen Status des Auftrages an (<em>init</em>, <em>started</em>, <em>sending</em>, <em>sended</em> oder <em>error</em>). <em>info</em> wird verwendet um dem Benutzer eine Möglickeit zu geben verschiede Auftragsgruppen zu erstellen."""
    __tablename__ = "job"
    hash = Column(String(40), primary_key=True)
    info = Column(String(100))
    status = Column(Enum("init","started","sending","sended","error"))
    user_id = Column("user", String(100), ForeignKey('apiuser.name'))
    user = relationship("User", backref=backref('jobs'))

class User(Base):
    """Die Benutzerdatenbank von Iro. <em>ng_kunde</em> ist der verknüpfte netzguerilla.net Benutzer, der die Rechnung zahlt."""
    __tablename__ = "apiuser"
    name = Column(String(100), primary_key=True)
    ng_kunde = Column(Integer)
    apikey = Column(String(50),unique=True)
    rights = relationship('Userright')
    def __init__(self, name, apikey):
        self.name=name
        self.apikey=apikey

    def __repr__(self):
        return "<User('%s','%s')>"%(self.name,self.apikey)