iro/model/schema.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 30 Jan 2012 06:51:28 +0100
branchdevel
changeset 125 19b3f383c9ce
parent 122 b55754aa4f96
child 127 79966b937274
permissions -rw-r--r--
getting job status form db
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
# -*- coding: utf-8 -*- 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
from sqlalchemy import Column, Integer, String, Sequence, Boolean, DateTime, Numeric, Enum
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from sqlalchemy.ext.declarative import declarative_base
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
#relationship
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
from sqlalchemy import ForeignKey
121
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
     8
from sqlalchemy.orm import relationship, backref, object_session
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
     9
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    10
from sqlalchemy import and_ 
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
125
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    12
from ..error import JobNotFound
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    13
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
Base = declarative_base()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
__tables__=["User", "Job", "Message", "Offer", "Userright"]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
class Userright(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
    """Über welche Routen darf ein Benutzer Daten verschicken und welches sind die Standardrouten (<em>isDefault=1</em>) für den Benuter."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
    __tablename__ = 'userright'
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    21
    user_name = Column('user', String(100), ForeignKey('apiuser.name'), primary_key=True)
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    22
    offer_name = Column('offer', String(100), ForeignKey('offer.name'), primary_key=True)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
    isDefault = Column(Boolean)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
    offer = relationship("Offer")
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 94
diff changeset
    26
    def __init__(self, offer, default=False):
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 94
diff changeset
    27
        self.offer = offer
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 94
diff changeset
    28
        self.isDefault = default
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 94
diff changeset
    29
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
class Offer(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
    """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."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
    __tablename__ = "offer"
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    33
    name = Column(String(100), primary_key=True)
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    34
    provider = Column(String(100))
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    35
    route = Column(String(100))
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    36
    typ = Column(String(100))
122
b55754aa4f96 nun typs query into session object
Sandro Knauß <knauss@netzguerilla.net>
parents: 121
diff changeset
    37
  
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
class Message(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
    """Wenn ein Vorgang von Iro Kosten erzeugt hat wird eine neue Zeile eingefügt. Solange nicht bezahlt wurde ist <em>isBilled=0</em>."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
    __tablename__ = "message"
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
    id = Column(Integer, Sequence('message_id_seq'), primary_key=True)
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    43
    recipient = Column(String(100))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
    isBilled = Column(Boolean)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
    date = Column(DateTime)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
    price = Column(Numeric(8,2))
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
    job_hash = Column("job",Integer, ForeignKey('job.hash'))
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
    job = relationship("Job", backref=backref('messages'))
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    49
    offer_id = Column("offer",String(100), ForeignKey('offer.name'))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    offer = relationship("Offer", backref=backref('messages'))
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
class Job(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
    """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."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
    __tablename__ = "job"
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    56
    hash = Column(String(40), primary_key=True)
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    57
    info = Column(String(100))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
    status = Column(Enum("init","started","sending","sended","error"))
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    59
    user_id = Column("user", String(100), ForeignKey('apiuser.name'))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
    user = relationship("User", backref=backref('jobs'))
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    61
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
class User(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    63
    """Die Benutzerdatenbank von Iro. <em>ng_kunde</em> ist der verknüpfte netzguerilla.net Benutzer, der die Rechnung zahlt."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    64
    __tablename__ = "apiuser"
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    65
    name = Column(String(100), primary_key=True)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    66
    ng_kunde = Column(Integer)
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    67
    apikey = Column(String(50),unique=True)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    68
    rights = relationship('Userright')
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    69
    def __init__(self, name, apikey):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    70
        self.name=name
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    71
        self.apikey=apikey
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    72
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
    def __repr__(self):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74
        return "<User('%s','%s')>"%(self.name,self.apikey)
121
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    75
    
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    76
    def routes(self, typ, isDefault = None):
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    77
        filters=[User.name == self.name,
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    78
                Offer.typ == typ, 
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    79
                ]
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    80
        if isDefault is not None:
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    81
            filters.append(Userright.isDefault==isDefault)
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    82
        return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters))
125
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    83
    
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    84
    def job(self, id):
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    85
        job = object_session(self).query(Job).join(User).filter(and_(User.name == self.name, Job.hash==id)).first()
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    86
        if job is None:
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    87
            raise JobNotFound()
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    88
        return job