Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.89 KB | None | 0 0
  1. from timeit import default_timer as timer
  2. from uuid import uuid4
  3.  
  4. from flask import Flask
  5. from flask_sqlalchemy import SQLAlchemy
  6. from sqlalchemy import JSON
  7. from sqlalchemy.dialects.postgresql import ARRAY, UUID, JSONB
  8.  
  9. app = Flask(__name__)
  10. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
  11. app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql:///test'
  12. db = SQLAlchemy(app)
  13.  
  14. ### Models
  15.  
  16.  
  17. class RegistrationData(db.Model):
  18. __tablename__ = 'registration_data'
  19. # __table_args__ = {'schema': 'event_registration'}
  20.  
  21. add_file_date_column = False
  22. file_required = False
  23.  
  24. registration_id = db.Column(db.Integer,db.ForeignKey('registrations.id'),primary_key=True,autoincrement=False)
  25. field_data_id = db.Column(db.Integer,db.ForeignKey('form_field_data.id'),primary_key=True,autoincrement=False)
  26. data = db.Column(JSONB,default=lambda: None,nullable=False)
  27.  
  28. field_data = db.relationship(
  29. 'RegistrationFormFieldData',
  30. lazy=True,
  31. backref=db.backref(
  32. 'registration_data',
  33. lazy=True,
  34. cascade='all, delete-orphan'
  35. )
  36. )
  37.  
  38. # relationship backrefs:
  39. # - registration (Registration.data)
  40.  
  41.  
  42. class Registration(db.Model):
  43. __tablename__ = 'registrations'
  44. # __table_args__ = {'schema': 'event_registration'}
  45.  
  46. id = db.Column(db.Integer,primary_key=True)
  47. uuid = db.Column(UUID,index=True,unique=True,nullable=False,default=lambda: unicode(uuid4()))
  48. registration_form_id = db.Column(db.Integer,db.ForeignKey('forms.id'),index=True,nullable=False)
  49. state = db.Column(db.Integer,nullable=False,default=0)
  50. base_price = db.Column(db.Numeric(8, 2),nullable=False,default=0)
  51. price_adjustment = db.Column(db.Numeric(8, 2),nullable=False,default=0)
  52. currency = db.Column(db.String,nullable=False)
  53. email = db.Column(db.String,nullable=False)
  54. first_name = db.Column(db.String,nullable=False)
  55. last_name = db.Column(db.String,nullable=False)
  56. is_deleted = db.Column(db.Boolean,nullable=False,default=False)
  57. ticket_uuid = db.Column(UUID,index=True,unique=True,nullable=False,default=lambda: unicode(uuid4()))
  58. checked_in = db.Column(db.Boolean,nullable=False,default=False)
  59. data = db.relationship(
  60. 'RegistrationData',
  61. lazy=True,
  62. cascade='all, delete-orphan',
  63. backref=db.backref(
  64. 'registration',
  65. lazy=True
  66. )
  67. )
  68.  
  69. # relationship backrefs:
  70. # - invitation (RegistrationInvitation.registration)
  71. # - legacy_mapping (LegacyRegistrationMapping.registration)
  72. # - registration_form (RegistrationForm.registrations)
  73. # - transactions (PaymentTransaction.registration)
  74.  
  75.  
  76. class RegistrationForm(db.Model):
  77. __tablename__ = 'forms'
  78. # __table_args__ = {'schema': 'event_registration'}
  79.  
  80. id = db.Column(db.Integer,primary_key=True)
  81. title = db.Column(db.String,nullable=False)
  82. is_participation = db.Column(db.Boolean,nullable=False,default=False)
  83. introduction = db.Column(db.Text,nullable=False,default='')
  84. contact_info = db.Column(db.String,nullable=False,default='')
  85. modification_mode = db.Column(db.Integer,nullable=False,default=1)
  86. is_deleted = db.Column(db.Boolean,nullable=False,default=False)
  87. require_login = db.Column(db.Boolean,nullable=False,default=False)
  88. require_user = db.Column(db.Boolean,nullable=False,default=False)
  89. registration_limit = db.Column(db.Integer,nullable=True)
  90. publish_registrations_enabled = db.Column(db.Boolean,nullable=False,default=False)
  91. publish_registration_count = db.Column(db.Boolean,nullable=False,default=False)
  92. publish_checkin_enabled = db.Column(db.Boolean,nullable=False,default=False)
  93. moderation_enabled = db.Column(db.Boolean,nullable=False,default=False)
  94. base_price = db.Column(db.Numeric(8, 2),nullable=False,default=0)
  95. currency = db.Column(db.String,nullable=False)
  96. notification_sender_address = db.Column(db.String,nullable=True)
  97. message_pending = db.Column(db.Text,nullable=False,default='')
  98. message_unpaid = db.Column(db.Text,nullable=False,default='')
  99. message_complete = db.Column(db.Text,nullable=False,default='')
  100. manager_notifications_enabled = db.Column(db.Boolean,nullable=False,default=False)
  101. manager_notification_recipients = db.Column(ARRAY(db.String),nullable=False,default=[])
  102. tickets_enabled = db.Column(db.Boolean,nullable=False,default=False)
  103. ticket_on_email = db.Column(db.Boolean,nullable=False,default=True)
  104. ticket_on_event_page = db.Column(db.Boolean,nullable=False,default=True)
  105. ticket_on_summary_page = db.Column(db.Boolean,nullable=False,default=True)
  106.  
  107. form_items = db.relationship(
  108. 'RegistrationFormItem',
  109. lazy=True,
  110. cascade='all, delete-orphan',
  111. order_by='RegistrationFormItem.position',
  112. backref=db.backref(
  113. 'registration_form',
  114. lazy=True
  115. )
  116. )
  117. registrations = db.relationship(
  118. 'Registration',
  119. lazy=True,
  120. cascade='all, delete-orphan',
  121. foreign_keys=[Registration.registration_form_id],
  122. backref=db.backref(
  123. 'registration_form',
  124. lazy=True
  125. )
  126. )
  127. # invitations = db.relationship(
  128. # 'RegistrationInvitation',
  129. # lazy=True,
  130. # cascade='all, delete-orphan',
  131. # backref=db.backref(
  132. # 'registration_form',
  133. # lazy=True
  134. # )
  135. # )
  136.  
  137.  
  138. class RegistrationFormFieldData(db.Model):
  139. """Description of a registration form field"""
  140.  
  141. __tablename__ = 'form_field_data'
  142. # __table_args__ = {'schema': 'event_registration'}
  143.  
  144. id = db.Column(
  145. db.Integer,
  146. primary_key=True
  147. )
  148. field_id = db.Column(
  149. db.Integer,
  150. db.ForeignKey('form_items.id'),
  151. index=True,
  152. nullable=False
  153. )
  154. versioned_data = db.Column(
  155. JSON,
  156. nullable=False
  157. )
  158.  
  159. # relationship backrefs:
  160. # - field (RegistrationFormItem.data_versions)
  161. # - registration_data (RegistrationData.field_data)
  162.  
  163.  
  164.  
  165.  
  166. class RegistrationFormItem(db.Model):
  167. __tablename__ = 'form_items'
  168. # __table_args__ = {'schema': 'event_registration'}
  169. __mapper_args__ = {
  170. 'polymorphic_on': 'type',
  171. 'polymorphic_identity': None
  172. }
  173.  
  174. id = db.Column(db.Integer,primary_key=True)
  175. registration_form_id = db.Column(db.Integer,db.ForeignKey('forms.id'),index=True,nullable=False)
  176. type = db.Column(db.Integer,nullable=False,default=0)
  177. personal_data_type = db.Column(db.Integer,nullable=True,default=0)
  178. parent_id = db.Column(db.Integer,db.ForeignKey('form_items.id'),index=True,nullable=True)
  179. position = db.Column(db.Integer,nullable=False,default=0)
  180. title = db.Column(db.String,nullable=False)
  181. description = db.Column(db.String,nullable=False,default='')
  182. is_enabled = db.Column(db.Boolean,nullable=False,default=True)
  183. is_deleted = db.Column(db.Boolean,nullable=False,default=False)
  184. is_required = db.Column(db.Boolean,nullable=False,default=False)
  185. is_manager_only = db.Column(db.Boolean,nullable=False,default=False)
  186. input_type = db.Column(db.String,nullable=True)
  187. data = db.Column(JSON,nullable=False,default=lambda: None)
  188.  
  189. current_data_id = db.Column(db.Integer,db.ForeignKey('form_field_data.id', use_alter=True),index=True,
  190. nullable=True
  191. )
  192.  
  193. current_data = db.relationship(
  194. 'RegistrationFormFieldData',
  195. primaryjoin='RegistrationFormItem.current_data_id == RegistrationFormFieldData.id',
  196. foreign_keys=current_data_id,
  197. lazy=True,
  198. post_update=True
  199. )
  200.  
  201. data_versions = db.relationship(
  202. 'RegistrationFormFieldData',
  203. primaryjoin='RegistrationFormItem.id == RegistrationFormFieldData.field_id',
  204. foreign_keys='RegistrationFormFieldData.field_id',
  205. lazy=True,
  206. cascade='all, delete-orphan',
  207. backref=db.backref(
  208. 'field',
  209. lazy=False
  210. )
  211. )
  212.  
  213. # The children of the item and the parent backref
  214. children = db.relationship(
  215. 'RegistrationFormItem',
  216. lazy=True,
  217. order_by='RegistrationFormItem.position',
  218. backref=db.backref(
  219. 'parent',
  220. lazy=False,
  221. remote_side=[id]
  222. )
  223. )
  224.  
  225. # relationship backrefs:
  226. # - parent (RegistrationFormItem.children)
  227. # - registration_form (RegistrationForm.form_items)
  228.  
  229.  
  230. ## Dummy data
  231.  
  232. db.create_all()
  233. db.session.commit()
  234. # Remove existent Registration forms
  235. RegistrationForm.query.delete()
  236. regform = RegistrationForm(title='my regform', registration_limit=500, currency='EUR')
  237. db.session.add(regform)
  238. db.session.commit()
  239.  
  240. ### Query
  241.  
  242. # print regform
  243. x = RegistrationForm.query.all()
  244. print x
  245. # print regform.modification_mode
  246.  
  247. # regform = RegistrationForm.get(2021)
  248. #
  249. # q = Registration.query.with_parent(regform).filter(~Registration.is_deleted).options(joinedload('data').joinedload('field_data')
  250. # .joinedload('field')).order_by(db.func.lower(Registration.last_name), db.func.lower(Registration.first_name))
  251. #
  252. # start = timer()
  253. # q.all()
  254. # end = timer()
  255. # print end - start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement