iro/schema.py
branchdevel
changeset 77 7dce6c0f06fb
child 78 7a4c7b65f20b
equal deleted inserted replaced
76:9f7da8dc8df8 77:7dce6c0f06fb
       
     1 # -*- coding: utf-8 -*- 
       
     2 
       
     3 from sqlalchemy import Column, Integer, String, Sequence, Boolean, DateTime, Numeric, Enum
       
     4 from sqlalchemy import create_engine
       
     5 from sqlalchemy.ext.declarative import declarative_base
       
     6 
       
     7 #relationship
       
     8 from sqlalchemy import ForeignKey
       
     9 from sqlalchemy.orm import relationship, backref
       
    10 
       
    11 engine = create_engine('sqlite:///:memory:', echo=True)
       
    12 Base = declarative_base()
       
    13 
       
    14 __tables__=["User", "Job", "Message", "Offer", "Userright"]
       
    15 
       
    16 class Userright(Base):
       
    17     """Über welche Routen darf ein Benutzer Daten verschicken und welches sind die Standardrouten (<em>isDefault=1</em>) für den Benuter."""
       
    18     __tablename__ = 'userright'
       
    19     user_name = Column('user', String, ForeignKey('apiuser.name'), primary_key=True)
       
    20     offer_name = Column('offer', String, ForeignKey('offer.name'), primary_key=True)
       
    21     isDefault = Column(Boolean)
       
    22     offer = relationship("Offer")
       
    23 
       
    24 class Offer(Base):
       
    25     """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."""
       
    26     __tablename__ = "offer"
       
    27     name = Column(String, primary_key=True)
       
    28     provider = Column(String)
       
    29     route = Column(String)
       
    30     typ = Column(String)
       
    31     
       
    32 
       
    33 class Message(Base):
       
    34     """Wenn ein Vorgang von Iro Kosten erzeugt hat wird eine neue Zeile eingefügt. Solange nicht bezahlt wurde ist <em>isBilled=0</em>."""
       
    35     __tablename__ = "message"
       
    36     id = Column(Integer, Sequence('message_id_seq'), primary_key=True)
       
    37     recipient = Column(String)
       
    38     isBilled = Column(Boolean)
       
    39     date = Column(DateTime)
       
    40     price = Column(Numeric(8,2))
       
    41     job_hash = Column("job",Integer, ForeignKey('job.hash'))
       
    42     job = relationship("Job", backref=backref('messages'))
       
    43     offer_id = Column("offer",String, ForeignKey('offer.name'))
       
    44     offer = relationship("Offer", backref=backref('messages'))
       
    45 
       
    46 
       
    47 class Job(Base):
       
    48     """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."""
       
    49     __tablename__ = "job"
       
    50     hash = Column(String, primary_key=True)
       
    51     info = Column(String)
       
    52     status = Column(Enum("init","started","sending","sended","error"))
       
    53     user_id = Column("user", String, ForeignKey('apiuser.name'))
       
    54     user = relationship("User", backref=backref('jobs'))
       
    55 
       
    56 class User(Base):
       
    57     """Die Benutzerdatenbank von Iro."""
       
    58     __tablename__ = "apiuser"
       
    59     name = Column(String, primary_key=True)
       
    60     apikey = Column(String,unique=True)
       
    61     rights = relationship('Userright')
       
    62     def __init__(self, name, apikey):
       
    63         self.name=name
       
    64         self.apikey=apikey
       
    65 
       
    66     def __repr__(self):
       
    67         return "<User('%s','%s')>"%(self.name,self.apikey)
       
    68 
       
    69 
       
    70 #Base.metadata.create_all(engine)