models.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """
  2. Benchmark models.
  3. """
  4. import json
  5. import os
  6. import psycopg2
  7. from collections import Iterable
  8. from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
  9. from sqlalchemy.orm import sessionmaker
  10. from sqlalchemy.pool import QueuePool
  11. from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
  12. def get_conn():
  13. return psycopg2.connect(
  14. user='benchmarkdbuser',
  15. password='benchmarkdbpass',
  16. host='tfb-database',
  17. port='5432',
  18. database='hello_world')
  19. conn_pool = QueuePool(get_conn, pool_size=100, max_overflow=25, echo=False)
  20. pg = create_engine('postgresql://', pool=conn_pool)
  21. DBSession = sessionmaker(bind=pg)()
  22. metadata = MetaData()
  23. DatabaseBase = declarative_base()
  24. def sqlalchemy_encoder_factory(system_values):
  25. return SQLAlchemyEncoder()
  26. class SQLAlchemyEncoder(json.JSONEncoder):
  27. def __call__(self, obj, system_values):
  28. if isinstance(obj, Iterable):
  29. return json.dumps([self.default(x) for x in obj])
  30. else:
  31. return json.dumps(self.default(obj))
  32. def default(self, obj):
  33. if isinstance(obj.__class__, DeclarativeMeta):
  34. return obj.__json__()
  35. return super(SQLAlchemyEncoder, self).default(obj)
  36. class World(DatabaseBase):
  37. __tablename__ = 'world'
  38. id = Column('id', Integer, primary_key=True)
  39. randomNumber = Column(
  40. 'randomnumber', Integer, nullable=False, server_default='0')
  41. def __json__(self):
  42. return {'id': self.id, 'randomNumber': self.randomNumber}
  43. class Fortune(DatabaseBase):
  44. __tablename__ = 'fortune'
  45. id = Column('id', Integer, primary_key=True)
  46. message = Column('message', String, nullable=False)
  47. def __json__(self):
  48. return {'id': self.id, 'message': self.message}