class TaxSchemaPublic(Schema): class Meta: type_ = 'tax' self_view = 'v1.tax_detail' self_view_kwargs = {'id': '<id>'} inflect = dasherize id = fields.Str(dump_only=True) name = fields.Str(required=True) rate = fields.Float(validate=lambda n: 0 <= n <= 100, required=True) is_tax_included_in_price = fields.Boolean(default=False) event = Relationship(attribute='event', self_view='v1.tax_event', self_view_kwargs={'id': '<id>'}, related_view='v1.event_detail', related_view_kwargs={'tax_id': '<id>'}, schema='EventSchemaPublic', type_='event')
class DiscountCodeSchemaPublic(SoftDeletionSchema): """ API Schema for discount_code Model For endpoints which allow somebody other than co-organizer/admin to access the resource. """ class Meta: type_ = 'discount-code' self_view = 'v1.discount_code_detail' self_view_kwargs = {'id': '<id>'} inflect = dasherize id = fields.Integer() code = fields.Str(required=True) discount_url = fields.Url(allow_none=True) value = fields.Float(required=True) type = fields.Str(validate=validate.OneOf(choices=["amount", "percent"]), required=True) is_active = fields.Boolean() tickets_number = fields.Integer(validate=lambda n: n >= 0, allow_none=True) min_quantity = fields.Integer(validate=lambda n: n >= 0, allow_none=True) max_quantity = fields.Integer(validate=lambda n: n >= 0, allow_none=True) valid_from = fields.DateTime(allow_none=True) valid_till = fields.DateTime(allow_none=True) used_for = fields.Str(validate=validate.OneOf(choices=["event", "ticket"]), allow_none=False) created_at = fields.DateTime(allow_none=True) event = Relationship(attribute='event', self_view='v1.discount_code_event', self_view_kwargs={'id': '<id>'}, related_view='v1.event_detail', related_view_kwargs={'discount_code_id': '<id>'}, schema='EventSchemaPublic', type_='event') @classmethod def quantity_validation_helper(obj, data): min_quantity = data.get('min_quantity', None) max_quantity = data.get('max_quantity', None) if min_quantity is not None and max_quantity is not None: if min_quantity > max_quantity: raise UnprocessableEntity( {'pointer': '/data/attributes/min-quantity'}, "min-quantity cannot be more than max-quantity")
class FeedbackSchema(SoftDeletionSchema): """ Api schema for Feedback Model """ class Meta: """ Meta class for Feedback Api Schema """ type_ = 'feedback' self_view = 'v1.feedback_detail' self_view_kwargs = {'id': '<id>'} inflect = dasherize id = fields.Str(dump_only=True) rating = fields.Float(required=True, validate=Range(min=1, max=5)) comment = fields.Str(required=False) event = Relationship( attribute='event', self_view='v1.feedback_event', self_view_kwargs={'id': '<id>'}, related_view='v1.event_detail', related_view_kwargs={'feedback_id': '<id>'}, schema='EventSchemaPublic', type_='event', ) session = Relationship( attribute='session', self_view='v1.feedback_session', self_view_kwargs={'id': '<id>'}, related_view='v1.session_detail', related_view_kwargs={'feedback_id': '<id>'}, schema='SessionSchema', type_='session', ) user = Relationship( attribute='user', self_view='v1.feedback_user', self_view_kwargs={'id': '<id>'}, related_view='v1.user_detail', related_view_kwargs={'feedback_id': '<id>'}, schema='UserSchema', type_='user', )
class ConsumptionSchema(Schema): id = fields.String(dump_only=True) consuming_size = fields.Float() consuming_unit = fields.String() consuming_date = fields.DateTime(dump_only=True) inventory = fields.Relationship( related_url='/inventories/{inventory_id}', related_url_kwargs={'inventory_id': '<id>'}, many=False, schema=inventories.InventorySchema, include_resource_linkage=True, type_='inventories', dump_only=True) stock = fields.Relationship(related_url='/stocks/{stock_id}', related_url_kwargs={'stock_id': '<id>'}, many=False, schema=stocks.StockSchema, include_resource_linkage=True, type_='stocks', dump_only=True) item = fields.Relationship(related_url='/items/{item_id}', related_url_kwargs={'item_id': '<id>'}, many=False, schema=items.ItemSchema, include_resource_linkage=True, type_='items', dump_only=True) consumer = fields.Relationship(related_url='/users/{user_id}', related_url_kwargs={'user_id': '<id>'}, many=False, schema=common.UserSchema, include_resource_linkage=True, type_='users', dump_only=True) status = fields.String() class Meta: type_ = 'consumptions' strict = True inflect = common.dasherize
class ActorsSchema(Schema): id = fields.Integer(dump_only=True) aka = fields.String() biography = fields.String() birthday = fields.String() deathday = fields.String() gender = fields.String() homepage = fields.String() tmdbid = fields.String() imdbid = fields.String() name = fields.String() place_of_birth = fields.String() popularity = fields.Float() profile_pic = fields.String() movies = fields.Nested('MoviesSchema', many=True, exclude=('actors', ), only=('id', 'title', 'poster', 'year'), dump_to='known_for') class Meta: type_ = 'actor' ordered = True
class RouteSchema(Schema): not_blank = validate.Length(min=1, error='Field cannot be blank') # add validate=not_blank in required fields id = fields.Integer(required=True) name = fields.String(required=True) length_in_meters = fields.Float(required=True) elevation_gain_in_meters = fields.Float(required=True) start_lat = fields.Float(required=True) start_lon = fields.Float(required=True) end_lat = fields.Float(required=True) end_lon = fields.Float(required=True) route_type = fields.Integer(required=True) sub_type = fields.Integer(required=True) popularity = fields.Float(required=True) # self links def get_top_level_links(self, data, many): return {'error': False, 'self': "/api/v2/routes/query"} #The below type object is a resource identifier object as per http://jsonapi.org/format/#document-resource-identifier-objects class Meta: type_ = 'route'
class SessionSchema(SoftDeletionSchema): """ Api schema for Session Model """ class Meta: """ Meta class for Session Api Schema """ type_ = 'session' self_view = 'v1.session_detail' self_view_kwargs = {'id': '<id>'} inflect = dasherize @validates_schema(pass_original=True) def validate_fields(self, data, original_data): is_patch_request = 'id' in original_data['data'] if is_patch_request: try: session = Session.query.filter_by( id=original_data['data']['id']).one() except NoResultFound: raise ObjectNotFound({'parameter': '{id}'}, "Session: not found") if 'starts_at' not in data: data['starts_at'] = session.starts_at if 'ends_at' not in data: data['ends_at'] = session.ends_at if 'event' not in data: data['event'] = session.event_id if data['starts_at'] and data['ends_at']: if data['starts_at'] >= data['ends_at']: raise UnprocessableEntityError( {'pointer': '/data/attributes/ends-at'}, "ends-at should be after starts-at", ) if not is_patch_request and datetime.timestamp( data['starts_at']) <= datetime.timestamp(datetime.now()): raise UnprocessableEntityError( {'pointer': '/data/attributes/starts-at'}, "starts-at should be after current date-time", ) if 'state' in data: if data['state'] not in ('draft', 'pending'): if not has_access('is_coorganizer', event_id=data['event']): raise ForbiddenError({'source': ''}, 'Co-organizer access is required.') if 'track' in data: if not has_access('is_coorganizer', event_id=data['event']): raise ForbiddenError({'source': ''}, 'Co-organizer access is required.') if 'microlocation' in data: if not has_access('is_coorganizer', event_id=data['event']): raise ForbiddenError({'source': ''}, 'Co-organizer access is required.') validate_complex_fields_json(self, data, original_data) id = fields.Str(dump_only=True) title = fields.Str(required=True) subtitle = fields.Str(allow_none=True) level = fields.Str(allow_none=True) short_abstract = fields.Str(allow_none=True) long_abstract = fields.Str(allow_none=True) comments = fields.Str(allow_none=True) starts_at = fields.DateTime(allow_none=True) ends_at = fields.DateTime(allow_none=True) language = fields.Str(allow_none=True) slides_url = fields.Url(allow_none=True) video_url = fields.Url(allow_none=True) audio_url = fields.Url(allow_none=True) signup_url = fields.Url(allow_none=True) state = fields.Str( validate=validate.OneOf( choices=["pending", "accepted", "confirmed", "rejected", "draft"]), allow_none=True, default='draft', ) created_at = fields.DateTime(dump_only=True) deleted_at = fields.DateTime(dump_only=True) submitted_at = fields.DateTime(allow_none=True) is_mail_sent = fields.Boolean() is_locked = fields.Boolean(default=False) last_modified_at = fields.DateTime(dump_only=True) send_email = fields.Boolean(load_only=True, allow_none=True) average_rating = fields.Float(dump_only=True) complex_field_values = CustomFormValueField(allow_none=True) microlocation = Relationship( attribute='microlocation', self_view='v1.session_microlocation', self_view_kwargs={'id': '<id>'}, related_view='v1.microlocation_detail', related_view_kwargs={'session_id': '<id>'}, schema='MicrolocationSchema', type_='microlocation', ) track = Relationship( attribute='track', self_view='v1.session_track', self_view_kwargs={'id': '<id>'}, related_view='v1.track_detail', related_view_kwargs={'session_id': '<id>'}, schema='TrackSchema', type_='track', ) session_type = Relationship( attribute='session_type', self_view='v1.session_session_type', self_view_kwargs={'id': '<id>'}, related_view='v1.session_type_detail', related_view_kwargs={'session_id': '<id>'}, schema='SessionTypeSchema', type_='session-type', ) event = Relationship( attribute='event', self_view='v1.session_event', self_view_kwargs={'id': '<id>'}, related_view='v1.event_detail', related_view_kwargs={'session_id': '<id>'}, schema='EventSchemaPublic', type_='event', ) feedbacks = Relationship( attribute='feedbacks', self_view='v1.session_feedbacks', self_view_kwargs={'id': '<id>'}, related_view='v1.feedback_list', related_view_kwargs={'session_id': '<id>'}, schema='FeedbackSchema', many=True, type_='feedback', ) speakers = Relationship( attribute='speakers', many=True, self_view='v1.session_speaker', self_view_kwargs={'id': '<id>'}, related_view='v1.speaker_list', related_view_kwargs={'session_id': '<id>'}, schema='SpeakerSchema', type_='speaker', ) creator = Relationship( attribute='user', self_view='v1.session_user', self_view_kwargs={'id': '<id>'}, related_view='v1.user_detail', related_view_kwargs={'session_id': '<id>'}, schema='UserSchemaPublic', type_='user', )
class OrderSchema(Schema): class Meta: type_ = 'order' self_view = 'v1.order_detail' self_view_kwargs = {'order_identifier': '<identifier>'} inflect = dasherize @post_dump def generate_payment_url(self, data): if 'POST' in request.method or ('GET' in request.method and 'regenerate' in request.args) and 'completed' != \ data["status"]: if data['payment_mode'] == 'stripe': data['payment_url'] = 'stripe://payment' elif data['payment_mode'] == 'paypal': order = Order.query.filter_by(id=data['id']).first() data['payment_url'] = PayPalPaymentsManager.get_checkout_url( order) return data @validates_schema def initial_values(self, data): if data.get('payment_mode') is None and 'POST' in request.method: data['payment_mode'] = 'free' return data id = fields.Str(dump_only=True) identifier = fields.Str(dump_only=True) amount = fields.Float(validate=lambda n: n > 0) address = fields.Str() city = fields.Str() state = fields.Str(db.String) country = fields.Str(required=True) zipcode = fields.Str() completed_at = fields.DateTime(dump_only=True) transaction_id = fields.Str(dump_only=True) payment_mode = fields.Str(default="free", required=True) paid_via = fields.Str(dump_only=True) brand = fields.Str(dump_only=True) exp_month = fields.Str(dump_only=True) exp_year = fields.Str(dump_only=True) last4 = fields.Str(dump_only=True) status = fields.Str(validate=validate.OneOf( choices=["pending", "cancelled", "confirmed", "deleted"])) discount_code_id = fields.Str() payment_url = fields.Str(dump_only=True) cancel_note = fields.Str() attendees = Relationship( attribute='ticket_holders', self_view='v1.order_attendee', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.attendee_list', related_view_kwargs={'order_identifier': '<identifier>'}, schema='AttendeeSchemaPublic', many=True, type_='attendee') tickets = Relationship( self_view='v1.order_ticket', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.ticket_list', related_view_kwargs={'order_identifier': '<identifier>'}, schema='TicketSchemaPublic', many=True, type_="ticket") user = Relationship(self_view='v1.order_user', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.user_detail', related_view_kwargs={'id': '<user_id>'}, schema='UserSchemaPublic', type_="user") event = Relationship(self_view='v1.order_event', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.event_detail', related_view_kwargs={'id': '<event_id>'}, schema='EventSchemaPublic', type_="event") marketer = Relationship( self_view='v1.order_marketer', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.user_detail', related_view_kwargs={'id': '<marketer_id>'}, schema='UserSchemaPublic', type_="user") discount_code = Relationship( self_view='v1.order_discount', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.discount_code_detail', related_view_kwargs={'id': '<discount_code_id>'}, schema='DiscountCodeSchemaPublic', type_="discount-code")
class DeviceSchema(Schema): class Meta: type_ = 'devices' self_view = 'api_app.device_detail' self_view_kwargs = {'device_id': '<id>'} self_view_many = 'api_app.devices_list' strict = True id = fields.Int(dump_only=True) udid = fields.Str(dump_only=True) topic = fields.Str() build_version = fields.Str() device_name = fields.Str() model = fields.Str() model_name = fields.Str() os_version = fields.Str() product_name = fields.Str() serial_number = fields.Str() awaiting_configuration = fields.Bool() last_seen = fields.DateTime(dump_only=True) hostname = fields.Str() local_hostname = fields.Str() available_device_capacity = fields.Float() device_capacity = fields.Float() wifi_mac = fields.Str() bluetooth_mac = fields.Str() # private # push_magic = fields.Str() # token = fields.Str() # unlock_token = fields.Str() tokenupdate_at = fields.DateTime() # SecurityInfo passcode_present = fields.Bool() passcode_compliant = fields.Bool() passcode_compliant_with_profiles = fields.Bool() fde_enabled = fields.Bool() fde_has_prk = fields.Bool() fde_has_irk = fields.Bool() firewall_enabled = fields.Bool() block_all_incoming = fields.Bool() stealth_mode_enabled = fields.Bool() sip_enabled = fields.Bool() # TODO: Relationship to dep_config # certificate = Relationship( # self_view='api_app.device_certificate', # self_view_kwargs={'certificate_id': '<id>'}, # related_view='api_app.certificate_detail', # related_view_kwargs={'certificate_id': '<id>'}, # ) commands = Relationship(related_view='api_app.command_detail', related_view_kwargs={'command_id': '<id>'}, many=True, schema='CommandSchema', type_='commands') installed_certificates = Relationship( related_view='api_app.installed_certificate_detail', related_view_kwargs={'installed_certificate_id': '<id>'}, many=True, schema='InstalledCertificateSchema', type_='installed_certificates') installed_applications = Relationship( related_view='api_app.installed_application_detail', related_view_kwargs={'installed_application_id': '<id>'}, many=True, schema='InstalledApplicationSchema', type_='installed_applications') groups = Relationship(related_view='api_app.device_group_detail', related_view_kwargs={'device_group_id': '<id>'}, many=True, schema='DeviceGroupSchema', type_='device_groups') tags = Relationship(related_view='api_app.tag_detail', related_view_kwargs={'tag_id': '<id>'}, many=True, schema='TagSchema', type_='tags')
class XMLSeasonPercentilesSchema(Schema): id = fields.Integer() league_tier = fields.Integer() season = fields.String() percentile = fields.Float() primary_position = fields.String() total_goals = fields.Integer() average_x = fields.Float() average_y = fields.Float() shots_p90 = fields.Float() box_shots_p90 = fields.Float() outside_box_shots_p90 = fields.Float() scoring_contribution_p90 = fields.Float() percentage_of_own_created_shots = fields.Float() scoring_percentage = fields.Float() touches_in_box = fields.Float() assists_p90 = fields.Float() key_passes_acc_p90 = fields.Float() throughballs_p90 = fields.Float() lost_balls_p90 = fields.Float() passes_p90 = fields.Float() passes_completion = fields.Float() acc_passes_to_the_box_p90 = fields.Float() passes_to_the_box_p90 = fields.Float() danger_zone_entries_p90 = fields.Float() long_balls_p90 = fields.Float() long_balls_completion = fields.Float() crosses_succ_p90 = fields.Float() crosses_completion = fields.Float() dribbles_succ_p90 = fields.Float() dribbles_completion = fields.Float() space_defending_p90 = fields.Float() tackles_completion = fields.Float() padj_tackles_p90 = fields.Float() padj_interceptions_p90 = fields.Float() won_balls_p90 = fields.Float() won_balls_opp_half_p90 = fields.Float() challenges_p90 = fields.Float() challenges_succ_p90 = fields.Float() challenges_succ_rate = fields.Float() long_balls_received_p90 = fields.Float() air_challenges_succ_rate = fields.Float() air_challenges_p90 = fields.Float() air_challenges_succ_p90 = fields.Float() own_created_shots_p90 = fields.Float() acc_passes_p90 = fields.Float() crosses_p90 = fields.Float() dribbles_p90 = fields.Float() won_challenges_p90 = fields.Float() won_air_challenges_p90 = fields.Float() opp_half_touches = fields.Float() opp_half_touches_ratio = fields.Float() non_penalty_goals = fields.Float() long_balls_succ_p90 = fields.Float() conversion_rate = fields.Float() picking_up_second_balls_p90 = fields.Float() xG = fields.Float() xA = fields.Float() xG_p90 = fields.Float() xG_per_shot = fields.Float() xGA_p90 = fields.Float() np_xG = fields.Float() np_xA = fields.Float() np_xG_p90 = fields.Float() np_xG_per_shot = fields.Float() np_xGA_p90 = fields.Float() # self links def get_top_level_links(self, data, many): if many: self_link = "/data/" else: self_link = "/data/{}".format(data['id']) return {'self': self_link} class Meta: type_ = 'data'
class TicketSchemaPublic(SoftDeletionSchema): class Meta: type_ = 'ticket' self_view = 'v1.ticket_detail' self_view_kwargs = {'id': '<id>'} inflect = dasherize @validates_schema(pass_original=True) def validate_date(self, data, original_data): if 'id' in original_data['data']: ticket = Ticket.query.filter_by( id=original_data['data']['id']).one() if 'sales_starts_at' not in data: data['sales_starts_at'] = ticket.sales_starts_at if 'sales_ends_at' not in data: data['sales_ends_at'] = ticket.sales_ends_at # if 'event_ends_at' not in data: # data['event_ends_at'] = ticket.event.ends_at if data['sales_starts_at'] >= data['sales_ends_at']: raise UnprocessableEntity( {'pointer': '/data/attributes/sales-ends-at'}, "sales-ends-at should be after sales-starts-at") # if 'event_ends_at' in data and data['sales_starts_at'] > data['event_ends_at']: # raise UnprocessableEntity({'pointer': '/data/attributes/sales-starts-at'}, # "ticket sales-starts-at should be before event ends-at") # if 'event_ends_at' in data and data['sales_ends_at'] > data['event_ends_at']: # raise UnprocessableEntity({'pointer': '/data/attributes/sales-ends-at'}, # "ticket sales-ends-at should be before event ends-at") @validates_schema def validate_quantity(self, data): if 'max_order' in data and 'min_order' in data: if data['max_order'] < data['min_order']: raise UnprocessableEntity( {'pointer': '/data/attributes/max-order'}, "max-order should be greater than or equal to min-order") if 'quantity' in data and 'min_order' in data: if data['quantity'] < data['min_order']: raise UnprocessableEntity( {'pointer': '/data/attributes/quantity'}, "quantity should be greater than or equal to min-order") if 'min_price' in data and 'max_price' in data and data[ 'type'] == 'donation': if data['min_price'] > data['max_price']: raise UnprocessableEntity( {'pointer': '/data/attributes/min-price'}, "minimum price should be lesser than or equal to maximum price" ) if 'quantity' in data and 'max_order' in data: if data['quantity'] < data['max_order']: raise UnprocessableEntity( {'pointer': '/data/attributes/quantity'}, "quantity should be greater than or equal to max-order") @validates_schema(pass_original=True) def validate_discount_code(self, data, original_data): if 'relationships' in original_data and 'discount-codes' in original_data[ 'data']['relationships']: discount_codes = original_data['data']['relationships'][ 'discount-codes'] for code in discount_codes['data']: try: DiscountCode.query.filter_by(id=code['id']).one() except NoResultFound: raise UnprocessableEntity( {'pointer': '/data/relationships/discount-codes'}, "Discount code does not exist") id = fields.Str(dump_only=True) name = fields.Str(required=True) description = fields.Str(allow_none=True) type = fields.Str(required=True) price = fields.Float(validate=lambda n: n >= 0, allow_none=True) min_price = fields.Float(validate=lambda n: n >= 0) max_price = fields.Float(validate=lambda n: n >= 0, allow_none=True) quantity = fields.Integer(validate=lambda n: n >= 0, allow_none=True) is_description_visible = fields.Boolean(default=False) position = fields.Integer(allow_none=True) is_fee_absorbed = fields.Boolean() sales_starts_at = fields.DateTime(required=True) sales_ends_at = fields.DateTime(required=True) is_hidden = fields.Boolean(default=False) min_order = fields.Integer(validate=lambda n: n >= 0, allow_none=True) max_order = fields.Integer(validate=lambda n: n >= 0, allow_none=True) is_checkin_restricted = fields.Boolean(default=True) auto_checkin_enabled = fields.Boolean(default=False) event = Relationship(attribute='event', self_view='v1.ticket_event', self_view_kwargs={'id': '<id>'}, related_view='v1.event_detail', related_view_kwargs={'ticket_id': '<id>'}, schema='EventSchemaPublic', type_='event') ticket_tags = Relationship(attribute='tags', self_view='v1.ticket_ticket_tag', self_view_kwargs={'id': '<id>'}, related_view='v1.ticket_tag_list', related_view_kwargs={'ticket_id': '<id>'}, schema='TicketTagSchema', many=True, type_='ticket-tag') discount_codes = Relationship(attribute='discount_codes', self_view='v1.ticket_discount_codes', self_view_kwargs={'id': '<id>'}, related_view='v1.discount_code_list', related_view_kwargs={'ticket_id': '<id>'}, schema='DiscountCodeSchemaTicket', many=True, type_='discount-code')
class DeviceSchema(Schema): class Meta: type_ = 'devices' self_view = 'api_app.device_detail' self_view_kwargs = {'device_id': '<id>'} self_view_many = 'api_app.devices_list' strict = True id = fields.Int(dump_only=True) udid = fields.Str(dump_only=True) topic = fields.Str() build_version = fields.Str() # device_name and hostname are "pseudo" read-only in that writing them does not affect the field but enqueues # an MDM command to change the name. device_name = fields.Str() hostname = fields.Str() local_hostname = fields.Str(dump_only=True) model = fields.Str() model_name = fields.Str() os_version = fields.Str() product_name = fields.Str() serial_number = fields.Str() awaiting_configuration = fields.Bool() last_seen = fields.DateTime(dump_only=True) available_device_capacity = fields.Float() device_capacity = fields.Float() wifi_mac = fields.Str() bluetooth_mac = fields.Str() # private # push_magic = fields.Str() # token = fields.Str() # unlock_token = fields.Str() tokenupdate_at = fields.DateTime() # SecurityInfo passcode_present = fields.Bool() passcode_compliant = fields.Bool() passcode_compliant_with_profiles = fields.Bool() fde_enabled = fields.Bool() fde_has_prk = fields.Bool() fde_has_irk = fields.Bool() firewall_enabled = fields.Bool() block_all_incoming = fields.Bool() stealth_mode_enabled = fields.Bool() sip_enabled = fields.Bool() battery_level = fields.Float(dump_only=True) imei = fields.Str(dump_only=True) is_cloud_backup_enabled = fields.Bool(dump_only=True) itunes_store_account_is_active = fields.Bool(dump_only=True) last_cloud_backup_date = fields.DateTime(dump_only=True) # TODO: Relationship to dep_config # certificate = Relationship( # self_view='api_app.device_certificate', # self_view_kwargs={'certificate_id': '<id>'}, # related_view='api_app.certificate_detail', # related_view_kwargs={'certificate_id': '<id>'}, # ) # DEP is_dep = fields.Bool() description = fields.Str(dump_only=True) color = fields.Str(dump_only=True) asset_tag = fields.Str(dump_only=True) profile_status = fields.Str(dump_only=True) profile_uuid = fields.UUID(dump_only=True) profile_assign_time = fields.DateTime(dump_only=True) profile_push_time = fields.DateTime(dump_only=True) device_assigned_date = fields.DateTime(dump_only=True) device_assigned_by = fields.Str(dump_only=True) os = fields.Str(dump_only=True) device_family = fields.Str(dump_only=True) commands = Relationship(related_view='api_app.commands_list', related_view_kwargs={'device_id': '<id>'}, many=True, schema='CommandSchema', type_='commands') installed_certificates = Relationship( related_view='api_app.installed_certificates_list', related_view_kwargs={'device_id': '<id>'}, many=True, schema='InstalledCertificateSchema', type_='installed_certificates') installed_applications = Relationship( related_view='api_app.installed_applications_list', related_view_kwargs={'device_id': '<id>'}, many=True, schema='InstalledApplicationSchema', type_='installed_applications') tags = Relationship(related_view='api_app.tags_list', related_view_kwargs={'device_id': '<id>'}, many=True, schema='TagSchema', type_='tags') available_os_updates = Relationship( related_view='api_app.available_os_updates_list', related_view_kwargs={'device_id': '<id>'}, many=True, schema='AvailableOSUpdateSchema', type_='available_os_updates') dep_profile = Relationship( related_view='dep_app.dep_profile_detail', related_view_kwargs={'dep_profile_id': '<dep_profile_id>'}, many=False, schema='DEPProfileSchema', type_='dep_profiles', )
class EventInvoiceSchema(SoftDeletionSchema): """ Event Invoice API Schema based on event invoice model """ class Meta: type_ = 'event-invoice' self_view = 'v1.event_invoice_detail' self_view_kwargs = {'id': '<id>'} inflect = dasherize id = fields.Str(dump_only=True) identifier = fields.Str(allow_none=True) amount = fields.Float(validate=lambda n: n >= 0, allow_none=True) address = fields.Str(allow_none=True) city = fields.Str(allow_none=True) state = fields.Str(allow_none=True) country = fields.Str(validate=validate.OneOf(choices=PAYMENT_COUNTRIES), allow_none=True) zipcode = fields.Str(allow_none=True) created_at = fields.DateTime(allow_none=True) completed_at = fields.DateTime(default=None) transaction_id = fields.Str(allow_none=True) paid_via = fields.Str(validate=validate.OneOf( choices=["free", "stripe", "paypal", "transfer", "onsite", "cheque"]), allow_none=True) payment_mode = fields.Str(allow_none=True) brand = fields.Str(allow_none=True) exp_month = fields.Integer(validate=lambda n: 0 <= n <= 12, allow_none=True) exp_year = fields.Integer(validate=lambda n: n >= 2015, allow_none=True) last4 = fields.Str(allow_none=True) stripe_token = fields.Str(allow_none=True) paypal_token = fields.Str(allow_none=True) status = fields.Str(validate=validate.OneOf(choices=[ "expired", "deleted", "initialized" "completed", "placed", "pending", "cancelled" ]), allow_none=True) invoice_pdf_url = fields.Url(allow_none=True) user = Relationship(attribute='user', self_view='v1.event_invoice_user', self_view_kwargs={'id': '<id>'}, related_view='v1.user_detail', related_view_kwargs={'event_invoice_id': '<id>'}, schema='UserSchemaPublic', type_='user') order = Relationship(attribute='order', self_view='v1.event_invoice_order', self_view_kwargs={'id': '<id>'}, related_view='v1.order_detail', related_view_kwargs={'id': '<id>'}, schema='OrderSchema', type_='order') event = Relationship(attribute='event', self_view='v1.event_invoice_event', self_view_kwargs={'id': '<id>'}, related_view='v1.event_detail', related_view_kwargs={'event_invoice_id': '<id>'}, schema='EventSchemaPublic', type_='event') discount_code = Relationship( attribute='discount_code', self_view='v1.event_invoice_discount_code', self_view_kwargs={'id': '<id>'}, related_view='v1.discount_code_detail', related_view_kwargs={'event_invoice_id': '<id>'}, schema='DiscountCodeSchemaPublic', type_='discount-code')
class XMLModelsSeasonPlayerAggSchema(Schema): id = fields.Integer() league_name = fields.String() league_country = fields.String() league_tier = fields.Integer() league_instatid = fields.Integer() player_instatid = fields.Integer() team_instatid = fields.Integer() team_name = fields.String() player_name = fields.String() nationality = fields.String() birthday = fields.Date() height = fields.Integer() weight = fields.Integer() left_foot = fields.Integer() right_foot = fields.Integer() season = fields.String() league_id = fields.Integer() team_id = fields.Integer() player_id = fields.Integer() instat_creation_time = fields.Date() transfermarkt_creation_time = fields.Date() instat_contract = fields.String() transfermarkt_contract = fields.String() market_value_tm = fields.Float() matches_count = fields.Integer() average_minutes = fields.Float() minutes = fields.Float() xG_minutes = fields.Float() padj_tackles_minutes = fields.Float() padj_interceptions_minutes = fields.Float() primary_position = fields.String() secondary_position = fields.String() primary_position_percentage = fields.Float() secondary_position_percentage = fields.Float() total_goals = fields.Integer() average_x = fields.Float() average_y = fields.Float() shots_p90 = fields.Float() box_shots_p90 = fields.Float() outside_box_shots_p90 = fields.Float() scoring_contribution_p90 = fields.Float() percentage_of_own_created_shots = fields.Float() scoring_percentage = fields.Float() touches_in_box = fields.Float() assists_p90 = fields.Float() key_passes_acc_p90 = fields.Float() throughballs_p90 = fields.Float() lost_balls_p90 = fields.Float() passes_p90 = fields.Float() passes_completion = fields.Float() acc_passes_to_the_box_p90 = fields.Float() passes_to_the_box_p90 = fields.Float() danger_zone_entries_p90 = fields.Float() long_balls_p90 = fields.Float() long_balls_completion = fields.Float() crosses_succ_p90 = fields.Float() crosses_completion = fields.Float() dribbles_succ_p90 = fields.Float() dribbles_completion = fields.Float() space_defending_p90 = fields.Float() tackles_completion = fields.Float() padj_tackles_p90 = fields.Float() padj_interceptions_p90 = fields.Float() won_balls_p90 = fields.Float() won_balls_opp_half_p90 = fields.Float() challenges_p90 = fields.Float() challenges_succ_rate = fields.Float() challenges_succ_p90 = fields.Float() long_balls_received_p90 = fields.Float() air_challenges_succ_rate = fields.Float() air_challenges_p90 = fields.Float() air_challenges_succ_p90 = fields.Float() own_created_shots_p90 = fields.Float() acc_passes_p90 = fields.Float() crosses_p90 = fields.Float() dribbles_p90 = fields.Float() won_challenges_p90 = fields.Float() won_air_challenges_p90 = fields.Float() opp_half_touches = fields.Float() opp_half_touches_ratio = fields.Float() non_penalty_goals = fields.Float() long_balls_succ_p90 = fields.Float() conversion_rate = fields.Float() picking_up_second_balls_p90 = fields.Float() xG = fields.Float() xG_p90 = fields.Float() xG_per_shot = fields.Float() np_xG = fields.Float() np_xG_p90 = fields.Float() np_xG_per_shot = fields.Float() version = fields.Float() padj_air_challenges_p90 = fields.Float() patch_average_time_duration_p90 = fields.Float() patch_time_duration_sum_p90 = fields.Float() patch_position_gain_sum_p90 = fields.Float() patch_value_p90 = fields.Float() patch_total_offensive_actions_p90 = fields.Float() patch_defensive_rectangularity_p90 = fields.Float() patch_defensive_yrange_p90 = fields.Float() patch_defensive_xrange_p90 = fields.Float() patch_defensive_area_p90 = fields.Float() throughballs_shot_p90 = fields.Float() cross_shot_p90 = fields.Float() long_balls_shot_p90 = fields.Float() opp_half_touches_p90 = fields.Float() def get_top_level_links(self, data, many): if many: self_link = "/data/" else: self_link = "/data/{}".format(data['id']) return {'self': self_link} class Meta: type_ = 'data'
class XMLModelsMatchTeamSchema(Schema): id = fields.Integer() match_instatid = fields.Integer() team_instatid = fields.Integer() season = fields.String() creation_time = fields.Date() match_date = fields.Date() minutes = fields.Float() points = fields.Integer() xPoints = fields.Integer() xPoints_ours = fields.Integer() goals_for = fields.Integer() goals_against = fields.Integer() xG_for_p90 = fields.Float() xG_against_p90 = fields.Float() shots_for_p90 = fields.Float() shots_against_p90 = fields.Float() shots_for = fields.Integer() shots_against = fields.Integer() shots_on_target = fields.Integer() shots_on_target_againts = fields.Integer() headed_shots = fields.Integer() dangerzone_shots_p90 = fields.Float() dangerzone_shots = fields.Float() dangerzone_shots_against_p90 = fields.Float() xG_per_shot = fields.Float() xG_per_shot_against = fields.Float() average_distance_of_shots = fields.Float() average_distance_of_shots_against = fields.Float() passes_p90 = fields.Float() passes_succes_rate = fields.Float() forward_passes = fields.Float() backward_passes = fields.Float() total_passes_into_the_box_p90 = fields.Float() total_passes_into_the_box = fields.Float() acc_passes_into_the_box_p90 = fields.Float() acc_passes_into_the_box = fields.Float() passes_to_the_box_against_p90 = fields.Float() dangerzone_entries_p90 = fields.Float() dangerzone_entries = fields.Float() crosses_p90 = fields.Float() shots_from_crosses = fields.Float() avg_number_of_passes_before_shot = fields.Float() passes_in_buildup = fields.Float() passes_in_middle_third = fields.Float() passes_in_final_third = fields.Float() long_balls = fields.Float() lost_balls = fields.Float() touches_inside_box = fields.Float() touches_inside_box_p90 = fields.Float() events_inside_box = fields.Float() buildup = fields.Float() maintenance = fields.Float() counter_attacking = fields.Float() sustainable_threat = fields.Float() fast_tempo = fields.Float() high_press = fields.Float() tts_for = fields.Float() tts_against = fields.Float() tts_difference = fields.Float() tts_tackle = fields.Float() tts_interception = fields.Float() tts_turnover = fields.Float() won_balls_opp_half = fields.Float() won_balls_final_third = fields.Float() won_balls_middle_third = fields.Float() won_balls_own_third = fields.Float() avg_height_of_turnover = fields.Float() tackles_total = fields.Float() tackles_success_rate = fields.Float() headers_total = fields.Float() headers_success_rate = fields.Float() challenges_total = fields.Float() challenges_success_rate = fields.Float() tackles_padj = fields.Float() interceptions = fields.Float() interceptions_padj = fields.Float() # self links def get_top_level_links(self, data, many): if many: self_link = "/data/" else: self_link = "/data/{}".format(data['id']) return {'self': self_link} class Meta: type_ = 'data'
class TicketSchemaPublic(Schema): class Meta: type_ = 'ticket' self_view = 'v1.ticket_detail' self_view_kwargs = {'id': '<id>'} inflect = dasherize @validates_schema(pass_original=True) def validate_date(self, data, original_data): if 'id' in original_data['data']: ticket = Ticket.query.filter_by( id=original_data['data']['id']).one() if 'sales_starts_at' not in data: data['sales_starts_at'] = ticket.sales_starts_at if 'sales_ends_at' not in data: data['sales_ends_at'] = ticket.sales_ends_at if data['sales_starts_at'] >= data['sales_ends_at']: raise UnprocessableEntity( {'pointer': '/data/attributes/sales-ends-at'}, "sales-ends-at should be after sales-starts-at") @validates_schema def validate_quantity(self, data): if 'max_order' in data and 'min_order' in data: if data['max_order'] < data['min_order']: raise UnprocessableEntity( {'pointer': '/data/attributes/max-order'}, "max-order should be greater than min-order") if 'quantity' in data and 'min_order' in data: if data['quantity'] < data['min_order']: raise UnprocessableEntity( {'pointer': '/data/attributes/quantity'}, "quantity should be greater than min-order") id = fields.Str(dump_only=True) name = fields.Str(required=True) description = fields.Str(allow_none=True) type = fields.Str(required=True) price = fields.Float(validate=lambda n: n >= 0, allow_none=True) quantity = fields.Integer(validate=lambda n: n >= 0, allow_none=True) is_description_visible = fields.Boolean(default=False) position = fields.Integer(allow_none=True) is_fee_absorbed = fields.Boolean() sales_starts_at = fields.DateTime(required=True) sales_ends_at = fields.DateTime(required=True) is_hidden = fields.Boolean(default=False) min_order = fields.Integer(validate=lambda n: n >= 0, allow_none=True) max_order = fields.Integer(validate=lambda n: n >= 0, allow_none=True) event = Relationship(attribute='event', self_view='v1.ticket_event', self_view_kwargs={'id': '<id>'}, related_view='v1.event_detail', related_view_kwargs={'ticket_id': '<id>'}, schema='EventSchemaPublic', type_='event') ticket_tags = Relationship(attribute='tags', self_view='v1.ticket_ticket_tag', self_view_kwargs={'id': '<id>'}, related_view='v1.ticket_tag_list', related_view_kwargs={'ticket_id': '<id>'}, schema='TicketTagSchema', many=True, type_='ticket-tag')
class OrderSchema(SoftDeletionSchema): class Meta: type_ = 'order' self_view = 'v1.order_detail' self_view_kwargs = {'order_identifier': '<identifier>'} inflect = dasherize @post_dump def generate_payment_url(self, data): """ generate payment url for an order :param data: :return: """ if 'POST' in request.method or ('GET' in request.method and 'regenerate' in request.args) and 'completed' != \ data["status"]: if data['payment_mode'] == 'stripe': data['payment_url'] = 'stripe://payment' return data @validates_schema def initial_values(self, data): if data.get('payment_mode') is None and 'POST' in request.method: data['payment_mode'] = 'free' return data id = fields.Str(dump_only=True) identifier = fields.Str(dump_only=True) amount = fields.Float(validate=lambda n: n >= 0, allow_none=False, default=0) address = fields.Str(allow_none=True) city = fields.Str(allow_none=True) state = fields.Str(db.String, allow_none=True) country = fields.Str(allow_none=True) zipcode = fields.Str(allow_none=True) company = fields.Str(allow_none=True) tax_business_info = fields.Str(allow_none=True) completed_at = fields.DateTime(dump_only=True) created_at = fields.DateTime(dump_only=True) transaction_id = fields.Str(dump_only=True) payment_mode = fields.Str(default="free", validate=validate.OneOf(choices=[ "free", "stripe", "paypal", "bank", "cheque", "onsite", "omise", "alipay" ]), allow_none=True) paid_via = fields.Str(dump_only=True) is_billing_enabled = fields.Boolean(default=False) brand = fields.Str(dump_only=True) exp_month = fields.Str(dump_only=True) exp_year = fields.Str(dump_only=True) last4 = fields.Str(dump_only=True) status = fields.Str(validate=validate.OneOf(choices=[ "initializing", "pending", "cancelled", "completed", "placed", "expired" ])) discount_code_id = fields.Str(allow_none=True) payment_url = fields.Str(dump_only=True) cancel_note = fields.Str(allow_none=True) order_notes = fields.Str(allow_none=True) tickets_pdf_url = fields.Url(dump_only=True) # only used in the case of an on site attendee. on_site_tickets = fields.List( cls_or_instance=fields.Nested(OnSiteTicketSchema), load_only=True, allow_none=True) attendees = Relationship( attribute='ticket_holders', self_view='v1.order_attendee', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.attendee_list', related_view_kwargs={'order_identifier': '<identifier>'}, schema='AttendeeSchemaPublic', many=True, type_='attendee') tickets = Relationship( attribute='tickets', self_view='v1.order_ticket', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.ticket_list', related_view_kwargs={'order_identifier': '<identifier>'}, schema='TicketSchemaPublic', many=True, type_="ticket") user = Relationship(attribute='user', self_view='v1.order_user', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.user_detail', related_view_kwargs={'id': '<user_id>'}, schema='UserSchemaPublic', type_="user") event = Relationship(attribute='event', self_view='v1.order_event', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.event_detail', related_view_kwargs={'id': '<event_id>'}, schema='EventSchemaPublic', type_="event") marketer = Relationship( attribute='marketer', self_view='v1.order_marketer', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.user_detail', related_view_kwargs={'id': '<marketer_id>'}, schema='UserSchemaPublic', type_="user") discount_code = Relationship( attribute='discount_code', self_view='v1.order_discount', self_view_kwargs={'order_identifier': '<identifier>'}, related_view='v1.discount_code_detail', related_view_kwargs={'id': '<discount_code_id>'}, schema='DiscountCodeSchemaPublic', type_="discount-code")
class UserSchema(Schema): @post_dump(pass_many=True) def remove_private_attributes(self, data, many): if data['data'] is None: return data if many: for item in data['data']: if not has_access('is_user_itself', user_id=item['id']): item = drop_private_attributes(item) return data if not has_access('is_user_itself', user_id=data['data']['id']): data['data'] = drop_private_attributes(data['data']) return data @pre_load() def set_default_language(self, data): if 'language' not in data or not data['language']: data['language'] = 'en' @pre_load() def set_default_country(self, data): if 'country' not in data or not data['country']: data['country'] = None @validates('name') def validate_username_uniqueness(self, data): if User.query.filter_by(name=data).count(): raise UnprocessableEntity("Username already taken", {'pointer': '/data/attributes/name'}) @validates('email') def validate_email_uniqueness(self, data): if User.query.filter_by(email=data).count(): raise UnprocessableEntity("Email already taken", {'pointer': '/data/attributes/email'}) @validates('language') def validate_language_value(self, data): if data not in LANGUAGES.keys(): raise UnprocessableEntity("Invalid language", {'pointer': '/data/attributes/language'}) @validates('country') def validate_country_value(self, data): if data is not None and data not in COUNTRIES.keys(): raise UnprocessableEntity("Invalid country", {'pointer': '/data/attributes/country'}) @validates('observation_radius') def validate_observation_radius_value(self, data): if data is None: return if data < 0 or data > 10: raise UnprocessableEntity( "Observation radius must be between 0 and 10", {'pointer': '/data/attributes/observation-radius'}) @validates('hour') def validate_hour_value(self, data): if data is None: return if data < 0 or data > 23: raise UnprocessableEntity("Hour must be between 0 and 23", {'pointer': '/data/attributes/hour'}) @validates('latitude') def validate_latitude_valid(self, data): if data is not None and not REG_LATITUDE.match(str(data)): raise UnprocessableEntity("Latitude is invalid", {'pointer': '/data/attributes/latitude'}) @validates('longitude') def validate_longitude_valid(self, data): if data is not None and not REG_LONGITUDE.match(str(data)): raise UnprocessableEntity( "Longitude is invalid", {'pointer': '/data/attributes/longitude'}) class Meta: type_ = 'user' self_view = 'v1.user_details' self_view_kwargs = {'id': '<id>'} self_view_many = 'v1.users_list' inflect = dasherize ordered = True id = fields.Integer(as_string=True, dump_only=True) name = fields.Str(required=True) language = fields.Str(validate=validate.Length(max=2), allow_none=True) country = fields.Str(allow_none=True) join_datetime = fields.Date(dump_only=True) email = EmailOrBlank(required=True) password = fields.Str(load_only=True, required=True) latitude = fields.Float(allow_none=True) longitude = fields.Float(allow_none=True) daily_mails = fields.Boolean(allow_none=True) observation_radius = fields.Integer(allow_none=True) hour = fields.Integer(allow_none=True) secid = fields.Str(dump_only=True) # ip = fields.Str(dump_only=True) # Do not use this field a all GDPR? statpic_id = fields.Integer() last_update_datetime = fields.Date(dump_only=True) last_mail_datetime = fields.Date(dump_only=True) last_login_datetime = fields.Date(dump_only=True) # statpic = Relationship() news = Relationship(self_view='v1.user_news', self_view_kwargs={'id': '<id>'}, related_view='v1.news_list', related_view_kwargs={'author_id': '<id>'}, many=True, schema='NewsSchema', type_='news') news_comments = Relationship( self_view='v1.user_news_comments', self_view_kwargs={'id': '<id>'}, related_view='v1.news_comments_list', related_view_kwargs={'author_id': '<id>'}, many=True, schema='NewsCommentSchema', type_='news-comment', # include_resource_linkage=True ) news_subscriptions = Relationship( self_view='v1.user_news_subscriptions', self_view_kwargs={'id': '<id>'}, related_view='v1.news_subscriptions_list', related_view_kwargs={'user_id': '<id>'}, many=True, schema='NewsSubscriptionSchema', type_='news-subscription', # include_resource_linkage=True ) geokrety_owned = Relationship( self_view='v1.user_geokrety_owned', self_view_kwargs={'id': '<id>'}, related_view='v1.geokrety_list', related_view_kwargs={'owner_id': '<id>'}, many=True, schema='GeokretSchemaPublic', type_='geokret', ) geokrety_held = Relationship( self_view='v1.user_geokrety_held', self_view_kwargs={'id': '<id>'}, related_view='v1.geokrety_list', related_view_kwargs={'holder_id': '<id>'}, many=True, schema='GeokretSchemaPublic', type_='geokret', ) moves = Relationship( self_view='v1.user_moves', self_view_kwargs={'id': '<id>'}, related_view='v1.moves_list', related_view_kwargs={'user_id': '<id>'}, many=True, schema='MoveWithCoordinatesSchema', type_='move', ) moves_comments = Relationship( self_view='v1.user_moves_comments', self_view_kwargs={'id': '<id>'}, related_view='v1.move_comment_list', related_view_kwargs={'author_id': '<id>'}, many=True, schema='MoveCommentSchema', type_='move-comment', # include_resource_linkage=True )
class EventSchemaPublic(SoftDeletionSchema): class Meta: type_ = 'event' self_view = 'v1.event_detail' self_view_kwargs = {'id': '<id>'} self_view_many = 'v1.event_list' inflect = dasherize @validates_schema(pass_original=True) def validate_timezone(self, data, original_data): if 'id' in original_data['data']: try: event = Event.query.filter_by( id=original_data['data']['id']).one() except NoResultFound: raise ObjectNotFound({'source': 'data/id'}, "Event id not found") if 'timezone' not in data: data['timezone'] = event.timezone try: timezone(data['timezone']) except pytz.exceptions.UnknownTimeZoneError: raise UnprocessableEntity({'pointer': '/data/attributes/timezone'}, "Unknown timezone: '{}'".format( data['timezone'])) id = fields.Str(dump_only=True) identifier = fields.Str(dump_only=True) name = fields.Str(required=True) external_event_url = fields.Url(allow_none=True) starts_at = fields.DateTime(required=True, timezone=True) ends_at = fields.DateTime(required=True, timezone=True) timezone = fields.Str(required=True) is_event_online = fields.Boolean(default=False) latitude = fields.Float(validate=lambda n: -90 <= n <= 90, allow_none=True) longitude = fields.Float(validate=lambda n: -180 <= n <= 180, allow_none=True) logo_url = fields.Url(allow_none=True) location_name = fields.Str(allow_none=True) searchable_location_name = fields.Str(allow_none=True) description = fields.Str(allow_none=True) original_image_url = fields.Url(allow_none=True) thumbnail_image_url = fields.Url(dump_only=True) large_image_url = fields.Url(dump_only=True) icon_image_url = fields.Url(dump_only=True) show_remaining_tickets = fields.Bool(allow_none=False, default=False) owner_name = fields.Str(allow_none=True) is_map_shown = fields.Bool(default=False) has_owner_info = fields.Bool(default=False) owner_description = fields.Str(allow_none=True) is_sessions_speakers_enabled = fields.Bool(default=False) privacy = fields.Str(default="public") state = fields.Str(validate=validate.OneOf(choices=["published", "draft"]), allow_none=True, default='draft') ticket_url = fields.Url(allow_none=True) code_of_conduct = fields.Str(allow_none=True) schedule_published_on = fields.DateTime(allow_none=True) is_featured = fields.Bool(default=False) is_promoted = fields.Bool(default=False) is_ticket_form_enabled = fields.Bool(default=True) payment_country = fields.Str(allow_none=True) payment_currency = fields.Str(allow_none=True) paypal_email = fields.Str(allow_none=True) is_tax_enabled = fields.Bool(default=False) is_billing_info_mandatory = fields.Bool(default=False) is_donation_enabled = fields.Bool(default=False) can_pay_by_paypal = fields.Bool(default=False) can_pay_by_stripe = fields.Bool(default=False) can_pay_by_cheque = fields.Bool(default=False) can_pay_by_bank = fields.Bool(default=False) can_pay_onsite = fields.Bool(default=False) can_pay_by_omise = fields.Bool(default=False) can_pay_by_alipay = fields.Bool(default=False) can_pay_by_paytm = fields.Bool(default=False) cheque_details = fields.Str(allow_none=True) bank_details = fields.Str(allow_none=True) onsite_details = fields.Str(allow_none=True) is_sponsors_enabled = fields.Bool(default=False) created_at = fields.DateTime(dump_only=True, timezone=True) pentabarf_url = fields.Url(dump_only=True) ical_url = fields.Url(dump_only=True) xcal_url = fields.Url(dump_only=True) refund_policy = fields.String( dump_only=True, default='All sales are final. No refunds shall be issued in any case.') is_stripe_linked = fields.Boolean(dump_only=True, allow_none=True, default=False) tickets = Relationship(attribute='tickets', self_view='v1.event_ticket', self_view_kwargs={'id': '<id>'}, related_view='v1.ticket_list', related_view_kwargs={'event_id': '<id>'}, schema='TicketSchemaPublic', many=True, type_='ticket') faqs = Relationship(attribute='faqs', self_view='v1.event_faqs', self_view_kwargs={'id': '<id>'}, related_view='v1.faq_list', related_view_kwargs={'event_id': '<id>'}, schema='FaqSchema', many=True, type_='faq') faq_types = Relationship(attribute='faq_types', self_view='v1.event_faq_types', self_view_kwargs={'id': '<id>'}, related_view='v1.faq_type_list', related_view_kwargs={'event_id': '<id>'}, schema='FaqTypeSchema', many=True, type_='faq_type') feedbacks = Relationship(attribute='feedbacks', self_view='v1.event_feedbacks', self_view_kwargs={'id': '<id>'}, related_view='v1.feedback_list', related_view_kwargs={'event_id': '<id>'}, schema='FeedbackSchema', many=True, type_='feedback') ticket_tags = Relationship(attribute='ticket_tags', self_view='v1.event_ticket_tag', self_view_kwargs={'id': '<id>'}, related_view='v1.ticket_tag_list', related_view_kwargs={'event_id': '<id>'}, schema='TicketTagSchema', many=True, type_='ticket-tag') microlocations = Relationship(attribute='microlocation', self_view='v1.event_microlocation', self_view_kwargs={'id': '<id>'}, related_view='v1.microlocation_list', related_view_kwargs={'event_id': '<id>'}, schema='MicrolocationSchema', many=True, type_='microlocation') social_links = Relationship(attribute='social_link', self_view='v1.event_social_link', self_view_kwargs={'id': '<id>'}, related_view='v1.social_link_list', related_view_kwargs={'event_id': '<id>'}, schema='SocialLinkSchema', many=True, type_='social-link') tracks = Relationship(attribute='track', self_view='v1.event_tracks', self_view_kwargs={'id': '<id>'}, related_view='v1.track_list', related_view_kwargs={'event_id': '<id>'}, schema='TrackSchema', many=True, type_='track') sponsors = Relationship(attribute='sponsor', self_view='v1.event_sponsor', self_view_kwargs={'id': '<id>'}, related_view='v1.sponsor_list', related_view_kwargs={'event_id': '<id>'}, schema='SponsorSchema', many=True, type_='sponsor') speakers_call = Relationship(attribute='speakers_call', self_view='v1.event_speakers_call', self_view_kwargs={'id': '<id>'}, related_view='v1.speakers_call_detail', related_view_kwargs={'event_id': '<id>'}, schema='SpeakersCallSchema', type_='speakers-call') session_types = Relationship(attribute='session_type', self_view='v1.event_session_types', self_view_kwargs={'id': '<id>'}, related_view='v1.session_type_list', related_view_kwargs={'event_id': '<id>'}, schema='SessionTypeSchema', many=True, type_='session-type') event_copyright = Relationship(attribute='copyright', self_view='v1.event_copyright', self_view_kwargs={'id': '<id>'}, related_view='v1.event_copyright_detail', related_view_kwargs={'event_id': '<id>'}, schema='EventCopyrightSchema', type_='event-copyright') tax = Relationship(attribute='tax', self_view='v1.event_tax', self_view_kwargs={'id': '<id>'}, related_view='v1.tax_detail', related_view_kwargs={'event_id': '<id>'}, schema='TaxSchema', type_='tax') sessions = Relationship(attribute='session', self_view='v1.event_session', self_view_kwargs={'id': '<id>'}, related_view='v1.session_list', related_view_kwargs={'event_id': '<id>'}, schema='SessionSchema', many=True, type_='session') speakers = Relationship(attribute='speaker', self_view='v1.event_speaker', self_view_kwargs={'id': '<id>'}, related_view='v1.speaker_list', related_view_kwargs={'event_id': '<id>'}, schema='SpeakerSchema', many=True, type_='speaker') event_type = Relationship(attribute='event_type', self_view='v1.event_event_type', self_view_kwargs={'id': '<id>'}, related_view='v1.event_type_detail', related_view_kwargs={'event_id': '<id>'}, schema='EventTypeSchema', type_='event-type') event_topic = Relationship(attribute='event_topic', self_view='v1.event_event_topic', self_view_kwargs={'id': '<id>'}, related_view='v1.event_topic_detail', related_view_kwargs={'event_id': '<id>'}, schema='EventTopicSchema', type_='event-topic') event_sub_topic = Relationship(attribute='event_sub_topic', self_view='v1.event_event_sub_topic', self_view_kwargs={'id': '<id>'}, related_view='v1.event_sub_topic_detail', related_view_kwargs={'event_id': '<id>'}, schema='EventSubTopicSchema', type_='event-sub-topic') custom_forms = Relationship(attribute='custom_form', self_view='v1.event_custom_forms', self_view_kwargs={'id': '<id>'}, related_view='v1.custom_form_list', related_view_kwargs={'event_id': '<id>'}, schema='CustomFormSchema', many=True, type_='custom-form') owner = Relationship(attribute='owner', self_view='v1.event_owner', self_view_kwargs={'id': '<id>'}, related_view='v1.user_detail', schema='UserSchemaPublic', related_view_kwargs={'event_id': '<id>'}, type_='user') organizers = Relationship(attribute='organizers', self_view='v1.event_organizers', self_view_kwargs={'id': '<id>'}, related_view='v1.user_list', schema='UserSchemaPublic', type_='user', many=True) coorganizers = Relationship(attribute='coorganizers', self_view='v1.event_coorganizers', self_view_kwargs={'id': '<id>'}, related_view='v1.user_list', schema='UserSchemaPublic', type_='user', many=True) stripe_authorization = Relationship( attribute='stripe_authorization', self_view='v1.stripe_authorization_event', self_view_kwargs={'id': '<id>'}, related_view='v1.stripe_authorization_detail', related_view_kwargs={'event_id': '<id>'}, schema='StripeAuthorizationSchema', type_='stripe-authorization') order_statistics = Relationship( self_view='v1.event_order_statistics', self_view_kwargs={'id': '<id>'}, related_view='v1.order_statistics_event_detail', related_view_kwargs={'id': '<id>'}, schema='OrderStatisticsEventSchema', type_='order-statistics-event') general_statistics = Relationship( self_view='v1.event_general_statistics', self_view_kwargs={'id': '<id>'}, related_view='v1.event_statistics_general_detail', related_view_kwargs={'id': '<id>'}, schema='EventStatisticsGeneralSchema', type_='general-statistics-event')
class GeokretSchemaPublic(Schema): @validates('name') def validate_name_blank(self, data): data = characterentities.decode(data).replace('\x00', '').strip() if not data: raise UnprocessableEntity("GeoKrety name cannot be blank", {'pointer': '/data/attributes/name'}) @validates('type') def validate_geokrety_type_id_valid(self, data): if data not in GEOKRETY_TYPES_LIST: raise UnprocessableEntity("GeoKrety Type Id is invalid", {'pointer': '/data/relationships/type'}) class Meta: type_ = 'geokret' self_view = 'v1.geokret_details' self_view_kwargs = {'id': '<id>'} self_view_many = 'v1.geokrety_list' inflect = dasherize ordered = True id = fields.Integer(as_string=True, dump_only=True) name = fields.Str(required=True) description = fields.Str(allow_none=True) missing = fields.Boolean(dump_only=True) distance = fields.Integer(dump_only=True) archived = fields.Boolean(dump_only=True) caches_count = fields.Integer(dump_only=True) pictures_count = fields.Integer(dump_only=True) average_rating = fields.Float(dump_only=True) created_on_datetime = fields.Date(dump_only=True) updated_on_datetime = fields.Date(dump_only=True) owner = Relationship( attribute='owner', self_view='v1.geokret_owner', self_view_kwargs={'id': '<id>'}, related_view='v1.user_details', related_view_kwargs={'geokret_owned_id': '<id>'}, schema='UserSchema', type_='user', include_resource_linkage=True, ) holder = Relationship( attribute='holder', self_view='v1.geokret_holder', self_view_kwargs={'id': '<id>'}, related_view='v1.user_details', related_view_kwargs={'geokret_held_id': '<id>'}, schema='UserSchema', type_='user', include_resource_linkage=True, ) type = Relationship( attribute='type', self_view='v1.geokret_type', self_view_kwargs={'id': '<id>'}, related_view='v1.geokrety_type_details', related_view_kwargs={'geokret_id': '<id>'}, schema='GeoKretyTypesSchema', type_='geokrety-type', include_resource_linkage=True, ) moves = Relationship( self_view='v1.geokret_moves', self_view_kwargs={'id': '<id>'}, related_view='v1.moves_list', related_view_kwargs={'geokret_id': '<id>'}, many=True, schema='DefaultMoveSchema', type_='move', ) last_position = Relationship( attribute='last_position', self_view='v1.geokret_last_position', self_view_kwargs={'id': '<id>'}, related_view='v1.move_details', related_view_kwargs={'geokret_last_position_id': '<id>'}, schema='DefaultMoveSchema', type_='move', include_resource_linkage=True, ) last_move = Relationship( attribute='last_move', self_view='v1.geokret_last_move', self_view_kwargs={'id': '<id>'}, related_view='v1.move_details', related_view_kwargs={'geokret_last_move_id': '<id>'}, schema='DefaultMoveSchema', type_='move', include_resource_linkage=True, ) tracking_code = TrackingCodeField(attribute='tracking_code')