diff -r 9f7da8dc8df8 -r 7dce6c0f06fb iro/schema.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/schema.py Sun Dec 18 11:49:46 2011 +0100 @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +from sqlalchemy import Column, Integer, String, Sequence, Boolean, DateTime, Numeric, Enum +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base + +#relationship +from sqlalchemy import ForeignKey +from sqlalchemy.orm import relationship, backref + +engine = create_engine('sqlite:///:memory:', echo=True) +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 (isDefault=1) für den Benuter.""" + __tablename__ = 'userright' + user_name = Column('user', String, ForeignKey('apiuser.name'), primary_key=True) + offer_name = Column('offer', String, 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. provider, typ und route werden verwendet, um die entsprechenden Zugangsdaten laden zu können.""" + __tablename__ = "offer" + name = Column(String, primary_key=True) + provider = Column(String) + route = Column(String) + typ = Column(String) + + +class Message(Base): + """Wenn ein Vorgang von Iro Kosten erzeugt hat wird eine neue Zeile eingefügt. Solange nicht bezahlt wurde ist isBilled=0.""" + __tablename__ = "message" + id = Column(Integer, Sequence('message_id_seq'), primary_key=True) + recipient = Column(String) + 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, 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 (init, started, sending, sended oder error). info wird verwendet um dem Benutzer eine Möglickeit zu geben verschiede Auftragsgruppen zu erstellen.""" + __tablename__ = "job" + hash = Column(String, primary_key=True) + info = Column(String) + status = Column(Enum("init","started","sending","sended","error")) + user_id = Column("user", String, ForeignKey('apiuser.name')) + user = relationship("User", backref=backref('jobs')) + +class User(Base): + """Die Benutzerdatenbank von Iro.""" + __tablename__ = "apiuser" + name = Column(String, primary_key=True) + apikey = Column(String,unique=True) + rights = relationship('Userright') + def __init__(self, name, apikey): + self.name=name + self.apikey=apikey + + def __repr__(self): + return ""%(self.name,self.apikey) + + +#Base.metadata.create_all(engine)