class RBUserSchema(UserSchema): has_owned_rooms = mm.Method('has_managed_rooms') is_rb_admin = mm.Function(lambda user: rb_is_admin(user)) class Meta: fields = UserSchema.Meta.fields + ('has_owned_rooms', 'is_admin', 'is_rb_admin', 'identifier', 'full_name') def has_managed_rooms(self, user): from indico.modules.rb.operations.rooms import has_managed_rooms return has_managed_rooms(user)
class EventNoteRecordSchema(RecordSchema, EventNoteSchema): class Meta: model = EventNote non_indexable = ('note_id', 'type', 'event_id', 'contribution_id', 'subcontribution_id', 'category_id', 'category_path', 'url', 'modified_dt') fields = RecordSchema.Meta.fields + non_indexable _data = fields.Function(lambda note: _EventNoteDataSchema().dump(note)) category_path = fields.Function(lambda note, ctx: _get_category_chain( note.event, ctx.get('categories'))) url = mm.Function( lambda note: url_for('event_notes.view', note, _external=True))
class SubContributionRecordSchema(RecordSchema, SubContributionSchema): class Meta: model = SubContribution indexable = ('title', 'description', 'persons', 'location') non_indexable = ('subcontribution_id', 'type', 'event_id', 'contribution_id', 'category_id', 'category_path', 'url', 'start_dt', 'end_dt', 'duration') fields = RecordSchema.Meta.fields + non_indexable _data = fields.Function(lambda subc: SubContributionSchema( only=SubContributionRecordSchema.Meta.indexable).dump(subc)) category_path = fields.Function(lambda subc, ctx: _get_category_chain( subc.event, ctx.get('categories'))) url = mm.Function(lambda subc: url_for( 'contributions.display_subcontribution', subc, _external=True)) @post_dump def _transform(self, data, **kwargs): if desc := data['_data'].get('description'): data['_data']['description'] = strip_tags(desc).strip() return data
class ContributionRecordSchema(RecordSchema, ContributionSchema): class Meta: model = Contribution indexable = ('title', 'description', 'location', 'persons') non_indexable = ('contribution_id', 'type', 'contribution_type', 'event_id', 'url', 'category_id', 'category_path', 'start_dt', 'end_dt', 'duration') fields = RecordSchema.Meta.fields + non_indexable _data = fields.Function(lambda contrib: ContributionSchema( only=ContributionRecordSchema.Meta.indexable).dump(contrib)) category_path = fields.Function( lambda c, ctx: _get_category_chain(c.event, ctx.get('categories'))) url = mm.Function(lambda contrib: url_for( 'contributions.display_contribution', contrib, _external=True)) @post_dump def _transform(self, data, **kwargs): if contribution_type := data.pop('contribution_type', None): data['type_format'] = contribution_type if desc := data['_data'].get('description'): data['_data']['description'] = strip_tags(desc).strip()