class ParticipantsDisplayForm(IndicoForm): """Form to customize the display of the participant list.""" json = JSONField() def validate_json(self, field): schema = { 'type': 'object', 'properties': { 'merge_forms': {'type': 'boolean'}, 'participant_list_forms': { 'type': 'array', 'items': {'type': 'integer'} }, 'participant_list_columns': { 'type': 'array', 'items': {'type': 'string'} } } } try: jsonschema.validate(field.data, schema) except jsonschema.ValidationError as exc: raise ValidationError(exc.message)
class ParticipantsDisplayFormColumnsForm(IndicoForm): """ Form to customize the columns for a particular registration form on the participant list. """ json = JSONField() def validate_json(self, field): schema = { 'type': 'object', 'properties': { 'columns': { 'type': 'array', 'items': { 'type': 'integer' } } } } try: jsonschema.validate(field.data, schema) except jsonschema.ValidationError as exc: raise ValidationError(str(exc))
class BlockingForm(IndicoForm): reason = TextAreaField(_(u'Reason'), [DataRequired()]) principals = PrincipalListField(groups=True, allow_external=True) blocked_rooms = JSONField(default=[]) def validate_blocked_rooms(self, field): try: field.data = map(int, field.data) except Exception as e: # In case someone sent crappy data raise ValidationError(str(e)) # Make sure all room ids are valid if len(field.data) != Room.find(Room.id.in_(field.data)).count(): raise ValidationError('Invalid rooms') if hasattr(self, '_blocking'): start_date = self._blocking.start_date end_date = self._blocking.end_date blocking_id = self._blocking.id else: start_date = self.start_date.data end_date = self.end_date.data blocking_id = None overlap = BlockedRoom.find_first( BlockedRoom.room_id.in_(field.data), BlockedRoom.state != BlockedRoom.State.rejected, Blocking.start_date <= end_date, Blocking.end_date >= start_date, Blocking.id != blocking_id, _join=Blocking) if overlap: msg = 'Your blocking for {} is overlapping with another blocking.'.format( overlap.room.full_name) raise ValidationError(msg)
class AddImagesForm(IndicoForm): image = JSONField( "Image", widget=DropzoneWidget( accepted_file_types='image/jpeg,image/jpg,image/png,image/gif', submit_if_empty=False))