Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.57 KB | None | 0 0
  1. import os, sys, datetime
  2.  
  3. import sqlalchemy
  4. from sqlalchemy import Column
  5. from sqlalchemy import Integer
  6. from sqlalchemy import Unicode
  7. from sqlalchemy import DateTime
  8. from sqlalchemy import Boolean
  9. from sqlalchemy import String
  10. from sqlalchemy.schema import ForeignKey
  11.  
  12. from sqlalchemy.exc import IntegrityError
  13. from sqlalchemy.ext.declarative import declarative_base
  14.  
  15. from sqlalchemy.orm import scoped_session
  16. from sqlalchemy.orm import sessionmaker
  17. from sqlalchemy.orm import relationship
  18. from sqlalchemy.orm import Query
  19.  
  20. Base = declarative_base()
  21.  
  22.  
  23. class NpmTransactionManager():
  24.     def __init__(self):
  25.         print 'init', self
  26.  
  27.     def getTransaction(self, i__tcn=None, i__tot=None):
  28.         l__query = NpmTransaction.query
  29.         if i__tcn:
  30.             l__query = l__query.filter(NpmTransaction.tr_tcn.in_([i__tcn]))
  31.         if i__tot:
  32.             l__query = l__query.filter(NpmTransaction.tr_type==i__tot)
  33.         return l__query.all()
  34.  
  35.  
  36. class NpmTransaction(Base):
  37.     __tablename__ = 'transaction'
  38.     tr_id = Column(Integer, primary_key=True)
  39.     tr_creation = Column(DateTime, default=datetime.datetime.now())
  40.     tr_update = Column(DateTime, default=datetime.datetime.now(), onupdate=datetime.datetime.now())
  41.     tr_processing = Column(Boolean, default=False)
  42.     tr_finished = Column(Boolean, default=False)
  43.     tr_inerror = Column(Boolean, default=False)
  44.     tr_type = Column(String(6))
  45.     tr_tmpdir = Column(String(256))
  46.     tr_tcn = Column(String(256))
  47.     tr_extid = Column(String(256))
  48.     m__messages = relationship('NpmMessage', backref='transaction')
  49.  
  50.     def addMessage(self):
  51.         l__msg = NpmMessage()
  52.         l__msg.m__transaction = self
  53.         return l__msg
  54.  
  55. class NpmMessage(Base):
  56.     __tablename__ = 'message'
  57.     msg_id = Column(Integer, primary_key=True)
  58.     tr_id = Column(Integer, ForeignKey('transaction.tr_id'))
  59.     msg_tot = Column(String(6))
  60.     msg_creation = Column(DateTime, default=datetime.datetime.now())
  61.     msg_update = Column(DateTime, default=datetime.datetime.now(), onupdate=datetime.datetime.now())
  62.     msg_processing = Column(Boolean, default=False)
  63.     msg_finished = Column(Boolean, default=False)
  64.     msg_inerror = Column(Boolean, default=False)
  65.     m__transaction = relationship('NpmTransaction', backref='messages')
  66.     m__messagedata = relationship('NpmMessageData', backref='message')
  67.     m__procevent =  relationship('NpmProcEvent', backref='message')
  68.  
  69.     def addMessageData(self):
  70.         l__msgdata = NpmMessageData()
  71.         l__msgdata.m__message = self
  72.         return l__msgdata
  73.  
  74.     def addProcEvent(self):
  75.         l__procevent = NpmProcEvent()
  76.         l__procevent.m__message = self
  77.         return l__msgdata  
  78.  
  79. class NpmMessageData(Base):
  80.     __tablename__ = 'messagedata'
  81.     mdt_id = Column(Integer, primary_key=True)
  82.     msg_id = Column(Integer, ForeignKey('message.msg_id'))
  83.     mdt_type = Column(String(256))
  84.     mdt_value = Column(String(65000))   # 64k for serializing objects
  85.     m__message = relationship('NpmMessage', backref='messagedata')
  86.  
  87. class NpmProcEvent(Base):
  88.     __tablename__ = 'procevent'
  89.     evt_id = Column(Integer, primary_key=True)
  90.     msg_id = Column(Integer, ForeignKey('message.msg_id'))
  91.     evt_type = Column(String(256))
  92.     evt_start = Column(DateTime, default=datetime.datetime.now())
  93.     evt_end = Column(DateTime, default=datetime.datetime.now())
  94.     evt_endcode = Column(Boolean, default=False)
  95.     evt_extradata = Column(String(65000))
  96.     m__message = relationship('NpmMessage', backref='procevent')
  97.  
  98. def make_session():
  99.     engine = sqlalchemy.create_engine('mysql://root:root@localhost/npm')
  100.     #engine = sqlalchemy.create_engine('sqlite:///npmtesting.db')
  101.     DBSession = scoped_session(sessionmaker(autoflush=True))
  102.     DBSession.configure(bind=engine)
  103.     #Base.metadata.bind = engine
  104.     print Base.metadata.create_all(engine)
  105.     Base.query = DBSession.query_property(Query)
  106.     return DBSession
  107.  
  108. if __name__ == '__main__':
  109.     # create the engine
  110.     l__dbsession = make_session()
  111.     l__dbsession2 = make_session()
  112.    
  113.     # create a transaction and manager
  114.     l__tr = NpmTransaction()
  115.     l__m = NpmTransactionManager()
  116.     l__tcn = str(datetime.datetime.now())
  117.     l__tr.tr_tcn = l__tcn
  118.     l__tr.tr_processing = True
  119.     l__tr.tr_type = 'XXX'
  120.     l__tr.tr_extid = 'zob'
  121.     # add a message
  122.     print 'adding first msg for', l__tcn
  123.     l__msg = l__tr.addMessage()
  124.     l__msg.msg_tot = 'MSG1'
  125.     # then all associated message data
  126.     for l__cnt in range(5):
  127.         l__md = l__msg.addMessageData()
  128.         l__md.mdt_type = '3'
  129.         l__md.mdt_value = 'xxxx'
  130.     l__dbsession.add(l__tr)
  131.     # commit data
  132.     l__dbsession.commit()
  133.  
  134.     # get the previously inserted transaction
  135.     l__transactions = l__m.getTransaction(i__tcn=l__tcn)
  136.     print 'adding 2nd msg for', l__tcn
  137.     l__msg = l__transactions[0].addMessage()
  138.     l__msg.msg_tot = 'MSG2'
  139.     # then all associated message data
  140.     for l__cnt in range(5):
  141.         l__md = l__msg.addMessageData()
  142.         l__md.mdt_type = '4'
  143.         l__md.mdt_value = 'yyyy'
  144.     l__dbsession.commit()
  145.  
  146.     # get the previously inserted transaction
  147.     l__transactions = l__m.getTransaction(i__tcn=l__tcn)
  148.     print 'adding 3rd msg for', l__tcn
  149.     l__msg = l__transactions[0].addMessage()
  150.     l__msg.msg_tot = 'MSG3'
  151.     # then all associated message data
  152.     for l__cnt in range(5):
  153.         l__md = l__msg.addMessageData()
  154.         l__md.mdt_type = '4'
  155.         l__md.mdt_value = 'yyyy'
  156.     l__dbsession.commit()
  157.  
  158.     """ UNCOMMENT THIS BLOCK
  159.     # get the previously inserted transaction
  160.     l__transactions = l__m.getTransaction(i__tcn=l__tcn)
  161.     print 'adding 3rd msg'
  162.     l__msg = l__transactions[0].addMessage()
  163.     l__msg.msg_tot = 'MSG3'
  164.     # then all associated message data
  165.     for l__cnt in range(5):
  166.         l__md = l__msg.addMessageData()
  167.         l__md.mdt_type = '4'
  168.         l__md.mdt_value = 'zzzz'
  169.     l__dbsession2.commit()
  170.     """
  171.  
  172.     #l__result = l__m.getTransaction(i__tcn=l__tcn)
  173.     #print l__result[0].m__messages
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement