Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from timeit import default_timer as timer
- from uuid import uuid4
- from flask import Flask
- from flask_sqlalchemy import SQLAlchemy
- from sqlalchemy import JSON
- from sqlalchemy.dialects.postgresql import ARRAY, UUID, JSONB
- app = Flask(__name__)
- app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
- app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql:///test'
- db = SQLAlchemy(app)
- ### Models
- class RegistrationData(db.Model):
- __tablename__ = 'registration_data'
- # __table_args__ = {'schema': 'event_registration'}
- add_file_date_column = False
- file_required = False
- registration_id = db.Column(db.Integer,db.ForeignKey('registrations.id'),primary_key=True,autoincrement=False)
- field_data_id = db.Column(db.Integer,db.ForeignKey('form_field_data.id'),primary_key=True,autoincrement=False)
- data = db.Column(JSONB,default=lambda: None,nullable=False)
- field_data = db.relationship(
- 'RegistrationFormFieldData',
- lazy=True,
- backref=db.backref(
- 'registration_data',
- lazy=True,
- cascade='all, delete-orphan'
- )
- )
- # relationship backrefs:
- # - registration (Registration.data)
- class Registration(db.Model):
- __tablename__ = 'registrations'
- # __table_args__ = {'schema': 'event_registration'}
- id = db.Column(db.Integer,primary_key=True)
- uuid = db.Column(UUID,index=True,unique=True,nullable=False,default=lambda: unicode(uuid4()))
- registration_form_id = db.Column(db.Integer,db.ForeignKey('forms.id'),index=True,nullable=False)
- state = db.Column(db.Integer,nullable=False,default=0)
- base_price = db.Column(db.Numeric(8, 2),nullable=False,default=0)
- price_adjustment = db.Column(db.Numeric(8, 2),nullable=False,default=0)
- currency = db.Column(db.String,nullable=False)
- email = db.Column(db.String,nullable=False)
- first_name = db.Column(db.String,nullable=False)
- last_name = db.Column(db.String,nullable=False)
- is_deleted = db.Column(db.Boolean,nullable=False,default=False)
- ticket_uuid = db.Column(UUID,index=True,unique=True,nullable=False,default=lambda: unicode(uuid4()))
- checked_in = db.Column(db.Boolean,nullable=False,default=False)
- data = db.relationship(
- 'RegistrationData',
- lazy=True,
- cascade='all, delete-orphan',
- backref=db.backref(
- 'registration',
- lazy=True
- )
- )
- # relationship backrefs:
- # - invitation (RegistrationInvitation.registration)
- # - legacy_mapping (LegacyRegistrationMapping.registration)
- # - registration_form (RegistrationForm.registrations)
- # - transactions (PaymentTransaction.registration)
- class RegistrationForm(db.Model):
- __tablename__ = 'forms'
- # __table_args__ = {'schema': 'event_registration'}
- id = db.Column(db.Integer,primary_key=True)
- title = db.Column(db.String,nullable=False)
- is_participation = db.Column(db.Boolean,nullable=False,default=False)
- introduction = db.Column(db.Text,nullable=False,default='')
- contact_info = db.Column(db.String,nullable=False,default='')
- modification_mode = db.Column(db.Integer,nullable=False,default=1)
- is_deleted = db.Column(db.Boolean,nullable=False,default=False)
- require_login = db.Column(db.Boolean,nullable=False,default=False)
- require_user = db.Column(db.Boolean,nullable=False,default=False)
- registration_limit = db.Column(db.Integer,nullable=True)
- publish_registrations_enabled = db.Column(db.Boolean,nullable=False,default=False)
- publish_registration_count = db.Column(db.Boolean,nullable=False,default=False)
- publish_checkin_enabled = db.Column(db.Boolean,nullable=False,default=False)
- moderation_enabled = db.Column(db.Boolean,nullable=False,default=False)
- base_price = db.Column(db.Numeric(8, 2),nullable=False,default=0)
- currency = db.Column(db.String,nullable=False)
- notification_sender_address = db.Column(db.String,nullable=True)
- message_pending = db.Column(db.Text,nullable=False,default='')
- message_unpaid = db.Column(db.Text,nullable=False,default='')
- message_complete = db.Column(db.Text,nullable=False,default='')
- manager_notifications_enabled = db.Column(db.Boolean,nullable=False,default=False)
- manager_notification_recipients = db.Column(ARRAY(db.String),nullable=False,default=[])
- tickets_enabled = db.Column(db.Boolean,nullable=False,default=False)
- ticket_on_email = db.Column(db.Boolean,nullable=False,default=True)
- ticket_on_event_page = db.Column(db.Boolean,nullable=False,default=True)
- ticket_on_summary_page = db.Column(db.Boolean,nullable=False,default=True)
- form_items = db.relationship(
- 'RegistrationFormItem',
- lazy=True,
- cascade='all, delete-orphan',
- order_by='RegistrationFormItem.position',
- backref=db.backref(
- 'registration_form',
- lazy=True
- )
- )
- registrations = db.relationship(
- 'Registration',
- lazy=True,
- cascade='all, delete-orphan',
- foreign_keys=[Registration.registration_form_id],
- backref=db.backref(
- 'registration_form',
- lazy=True
- )
- )
- # invitations = db.relationship(
- # 'RegistrationInvitation',
- # lazy=True,
- # cascade='all, delete-orphan',
- # backref=db.backref(
- # 'registration_form',
- # lazy=True
- # )
- # )
- class RegistrationFormFieldData(db.Model):
- """Description of a registration form field"""
- __tablename__ = 'form_field_data'
- # __table_args__ = {'schema': 'event_registration'}
- id = db.Column(
- db.Integer,
- primary_key=True
- )
- field_id = db.Column(
- db.Integer,
- db.ForeignKey('form_items.id'),
- index=True,
- nullable=False
- )
- versioned_data = db.Column(
- JSON,
- nullable=False
- )
- # relationship backrefs:
- # - field (RegistrationFormItem.data_versions)
- # - registration_data (RegistrationData.field_data)
- class RegistrationFormItem(db.Model):
- __tablename__ = 'form_items'
- # __table_args__ = {'schema': 'event_registration'}
- __mapper_args__ = {
- 'polymorphic_on': 'type',
- 'polymorphic_identity': None
- }
- id = db.Column(db.Integer,primary_key=True)
- registration_form_id = db.Column(db.Integer,db.ForeignKey('forms.id'),index=True,nullable=False)
- type = db.Column(db.Integer,nullable=False,default=0)
- personal_data_type = db.Column(db.Integer,nullable=True,default=0)
- parent_id = db.Column(db.Integer,db.ForeignKey('form_items.id'),index=True,nullable=True)
- position = db.Column(db.Integer,nullable=False,default=0)
- title = db.Column(db.String,nullable=False)
- description = db.Column(db.String,nullable=False,default='')
- is_enabled = db.Column(db.Boolean,nullable=False,default=True)
- is_deleted = db.Column(db.Boolean,nullable=False,default=False)
- is_required = db.Column(db.Boolean,nullable=False,default=False)
- is_manager_only = db.Column(db.Boolean,nullable=False,default=False)
- input_type = db.Column(db.String,nullable=True)
- data = db.Column(JSON,nullable=False,default=lambda: None)
- current_data_id = db.Column(db.Integer,db.ForeignKey('form_field_data.id', use_alter=True),index=True,
- nullable=True
- )
- current_data = db.relationship(
- 'RegistrationFormFieldData',
- primaryjoin='RegistrationFormItem.current_data_id == RegistrationFormFieldData.id',
- foreign_keys=current_data_id,
- lazy=True,
- post_update=True
- )
- data_versions = db.relationship(
- 'RegistrationFormFieldData',
- primaryjoin='RegistrationFormItem.id == RegistrationFormFieldData.field_id',
- foreign_keys='RegistrationFormFieldData.field_id',
- lazy=True,
- cascade='all, delete-orphan',
- backref=db.backref(
- 'field',
- lazy=False
- )
- )
- # The children of the item and the parent backref
- children = db.relationship(
- 'RegistrationFormItem',
- lazy=True,
- order_by='RegistrationFormItem.position',
- backref=db.backref(
- 'parent',
- lazy=False,
- remote_side=[id]
- )
- )
- # relationship backrefs:
- # - parent (RegistrationFormItem.children)
- # - registration_form (RegistrationForm.form_items)
- ## Dummy data
- db.create_all()
- db.session.commit()
- # Remove existent Registration forms
- RegistrationForm.query.delete()
- regform = RegistrationForm(title='my regform', registration_limit=500, currency='EUR')
- db.session.add(regform)
- db.session.commit()
- ### Query
- # print regform
- x = RegistrationForm.query.all()
- print x
- # print regform.modification_mode
- # regform = RegistrationForm.get(2021)
- #
- # q = Registration.query.with_parent(regform).filter(~Registration.is_deleted).options(joinedload('data').joinedload('field_data')
- # .joinedload('field')).order_by(db.func.lower(Registration.last_name), db.func.lower(Registration.first_name))
- #
- # start = timer()
- # q.all()
- # end = timer()
- # print end - start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement