def deserialize(self, property_dictionary, allow_extra_properties=True): self.before_deserialize() assert_mapping(property_dictionary, 'property_dictionary') errors = [] _class = self.__class__ for (key, value) in property_dictionary.items(): try: set_property = _class.registry().setter_function(key) except ValueError as e: if not allow_extra_properties: errors.append(e) continue try: set_property(self, value) except ValueError as e: errors.append(e) if errors: raise ValueError( (u'Errors occurred during deserialization of \'{0}\': \'{1}\'').format( self, errors ) ) self.after_deserialize()
def parse_view_type_settings(source_value): assert_mapping(source_value, 'view_type_settings') for (key, value) in source_value.items(): if key not in VISUALIZATION_TYPE_VALUES: continue source_value[key] = SettingsGroup(VisualizationType[key], value) return source_value
class VisualizationSettings(PythonModel): @classmethod def registry(cls): return VisualizationSettingsProperty @property @VisualizationSettingsProperty.getter( nullable=False, value_validate_function=lambda value: assert_string(value, 'id') ) def id(self): return self.get('id') @id.setter @VisualizationSettingsProperty.setter() def id(self, value): self['id'] = value @property @VisualizationSettingsProperty.getter( nullable=False, value_validate_function=lambda value: assert_type( value, TitleSettings, argument_name='title_settings' ), ) def title_settings(self): return self.get('titleSettings') @title_settings.setter @VisualizationSettingsProperty.setter( value_parser_function=lambda values: TitleSettings(values) ) def title_settings(self, value): self['titleSettings'] = value @property @VisualizationSettingsProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'view_type_settings', view_type_settings_validator ), ) def view_type_settings(self): return self.get('viewTypeSettings') @view_type_settings.setter @VisualizationSettingsProperty.setter( value_parser_function=parse_view_type_settings ) def view_type_settings(self, value): self['viewTypeSettings'] = value
class AdvancedFieldDefinition(PythonModel): @classmethod def registry(cls): return AdvancedFieldProperty @property @AdvancedFieldProperty.getter( nullable=False, value_validate_function=lambda value: assert_mapping( value, 'calculation'), ) def calculation(self): return self.get('calculation') @calculation.setter @AdvancedFieldProperty.setter() def calculation(self, value): self['calculation'] = value @property @AdvancedFieldProperty.getter( nullable=False, value_validate_function=lambda value: assert_mapping( value, 'category'), ) def category(self): return self.get('category') @category.setter @AdvancedFieldProperty.setter() def category(self, value): self['category'] = value @property @AdvancedFieldProperty.getter( nullable=False, value_validate_function=lambda value: assert_string( value, 'canonicalName'), ) def canonical_name(self): return self.get('canonicalName') @canonical_name.setter @AdvancedFieldProperty.setter() def canonical_name(self, value): self['canonicalName'] = value @property @AdvancedFieldProperty.getter( nullable=False, value_validate_function=lambda value: assert_string(value, 'id')) def id(self): return self.get('id') @id.setter @AdvancedFieldProperty.setter() def id(self, value): self['id'] = value @property @AdvancedFieldProperty.getter( nullable=False, value_validate_function=lambda value: assert_string( value, 'shortName'), ) def short_name(self): return self.get('shortName') @short_name.setter @AdvancedFieldProperty.setter() def short_name(self, value): self['shortName'] = value @property @AdvancedFieldProperty.getter( nullable=False, value_validate_function=lambda value: assert_mapping(value, 'source'), ) def source(self): return self.get('source') @source.setter @AdvancedFieldProperty.setter() def source(self, value): self['source'] = value @property @AdvancedFieldProperty.getter( nullable=False, default_value='', value_validate_function=lambda value: assert_string( value, 'description'), ) def description(self): return self.get('description') @description.setter @AdvancedFieldProperty.setter() def description(self, value): self['description'] = value @property @AdvancedFieldProperty.getter( nullable=False, default_value='', value_validate_function=lambda value: assert_string(value, 'label'), ) def label(self): return self.get('label') @label.setter @AdvancedFieldProperty.setter() def label(self, value): self['label'] = value
class LayoutItem(PythonModel): @classmethod def registry(cls): return LayoutItemProperty # TODO(vedant) - Come up with a proper structure for frontEndSelections # and/or filterModalSelections. Get rid of one of them since they have a # very similar structure. @property @LayoutItemProperty.getter( nullable=False, default_value=lambda: [], value_validate_function=lambda value: assert_non_string_iterable( value, 'custom_fields', validate_custom_field), ) def custom_fields(self): return self.get('customFields') @custom_fields.setter @LayoutItemProperty.setter( value_parser_function=lambda custom_field_objects: [ CustomField(custom_field_object) for custom_field_object in custom_field_objects ]) def custom_fields(self, value): self['customFields'] = value @property @LayoutItemProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'filter_modal_selections'), ) def filter_modal_selections(self): return self.get('filterModalSelections') @filter_modal_selections.setter @LayoutItemProperty.setter() def filter_modal_selections(self, value): self['filterModalSelections'] = value @property @LayoutItemProperty.getter( serialized_property_name='frontendSelectionsFilter', nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'front_end_selections_filter'), ) def front_end_selections_filter(self): return self.get('frontendSelectionsFilter') @front_end_selections_filter.setter @LayoutItemProperty.setter() def front_end_selections_filter(self, value): self['frontendSelectionsFilter'] = value @property @LayoutItemProperty.getter( nullable=False, value_validate_function=lambda value: assert_string(value, 'id')) def id(self): return self.get('id') @id.setter @LayoutItemProperty.setter() def id(self, value): self['id'] = value @property @LayoutItemProperty.getter( nullable=False, value_validate_function=lambda value: assert_string(value, 'query_id'), ) def query_id(self): return self.get('queryId') @query_id.setter @LayoutItemProperty.setter() def query_id(self, value): self['queryId'] = value @property @LayoutItemProperty.getter( value_validate_function=lambda value: assert_string(value, 'name')) def name(self): return self.get('name') @name.setter @LayoutItemProperty.setter() def name(self, value): self['name'] = value @property @LayoutItemProperty.getter( nullable=False, default_value=DEFAULT_IS_ADVANCED_QUERY_ITEM, value_validate_function=lambda value: assert_boolean( value, 'is_advanced_query_item'), ) def is_advanced_query_item(self): return self.get('isAdvancedQueryItem') @is_advanced_query_item.setter @LayoutItemProperty.setter() def is_advanced_query_item(self, value): self['isAdvancedQueryItem'] = value @property @LayoutItemProperty.getter( nullable=False, default_value=DEFAULT_IS_LOCKED, value_validate_function=lambda value: assert_boolean( value, 'is_locked'), ) def is_locked(self): return self.get('isLocked') @is_locked.setter @LayoutItemProperty.setter() def is_locked(self, value): self['isLocked'] = value @property @LayoutItemProperty.getter(value_validate_function=lambda value: assert_string(value, 'setting_id')) def setting_id(self): return self.get('settingId') @setting_id.setter @LayoutItemProperty.setter() def setting_id(self, value): self['settingId'] = value @property @LayoutItemProperty.getter( serialized_property_name='type', nullable=False, value_validate_function=lambda value: assert_type( value, VisualizationType, argument_name='item_type'), value_formatter_function=lambda value: value.name, ) def item_type(self): return self.get('type') @item_type.setter @LayoutItemProperty.setter( value_parser_function=deserialize_visualization_type) def item_type(self, value): self['type'] = value @property @LayoutItemProperty.getter( nullable=False, value_validate_function=lambda value: assert_integer( value, 'upper_x', lower_bound=UPPER_X_LOWER_BOUND), ) def upper_x(self): return self.get('upperX') @upper_x.setter @LayoutItemProperty.setter() def upper_x(self, value): self['upperX'] = value @property @LayoutItemProperty.getter( nullable=False, value_validate_function=lambda value: assert_integer( value, 'upper_x', lower_bound=UPPER_Y_LOWER_BOUND), ) def upper_y(self): return self.get('upperY') @upper_y.setter @LayoutItemProperty.setter() def upper_y(self, value): self['upperY'] = value @property @LayoutItemProperty.getter( nullable=False, value_validate_function=lambda value: assert_string(value, 'size_id'), ) def size_id(self): return self.get('sizeId') @size_id.setter @LayoutItemProperty.setter() def size_id(self, value): self['sizeId'] = value
class DashboardSpecification(PythonModel): ''' A class that defines a Dashboard Specification ''' @classmethod def registry(cls): return DashboardProperty @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'dateRanges', validate_date_range_item), ) def date_ranges(self): return self.get('dateRanges') @date_ranges.setter @DashboardProperty.setter( value_parser_function=lambda date_range_objects: { _id: DateRangeSpecification(date_range_object) for (_id, date_range_object) in date_range_objects.items() }) def date_ranges(self, value): self['dateRanges'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'filters', validate_filter_item), ) def filters(self): return self.get('filters') @filters.setter @DashboardProperty.setter( value_parser_function=lambda filter_objects: { _id: FilterDefinition(filter_object) for (_id, filter_object) in filter_objects.items() }) def filters(self, value): self['filters'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'items', validate_layout_item), ) def items(self): return self.get('items') @items.setter @DashboardProperty.setter( value_parser_function=lambda layout_objects: { _id: LayoutItem(layout_object) for (_id, layout_object) in layout_objects.items() }) def items(self, value): self['items'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: DashboardOptions(), value_validate_function=lambda value: assert_type( value, DashboardOptions, argument_name='options'), ) def options(self): return self.get('options') @options.setter @DashboardProperty.setter( value_parser_function=lambda value: DashboardOptions(value)) def options(self, value): self['options'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'queries', validate_query_item), ) def queries(self): return self.get('queries') @queries.setter @DashboardProperty.setter( value_parser_function=lambda query_objects: { _id: QueryDefinition(query_object) for (_id, query_object) in query_objects.items() }) def queries(self, value): self['queries'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'settings', validate_settings_item), ) def settings(self): return self.get('settings') @settings.setter @DashboardProperty.setter( value_parser_function=lambda settings_objects: { _id: VisualizationSettings(settings_object) for (_id, settings_object) in settings_objects.items() }) def settings(self, value): self['settings'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'sizes', validate_size_item), ) def sizes(self): return self.get('sizes') @sizes.setter @DashboardProperty.setter( value_parser_function=lambda size_objects: { _id: LayoutSize(size_object) for (_id, size_object) in size_objects.items() }) def sizes(self, value): self['sizes'] = value @property @DashboardProperty.getter() def version(self): return '2018-12-11' def __repr__(self): if self.options: title = self.options.title return 'Dashboard \'{0}\''.format(title) return 'Unnamed Dashboard'
def validate_mapping(value, index, argument_name): formatted_argument_name = '{0}[{1}]'.format(argument_name, index) assert_mapping(value, formatted_argument_name)
def assert_series_objects(value, argument_name=None): assert_mapping(value, argument_name, series_settings_validator)
class BumpChartSettings(PythonModel): @classmethod def registry(cls): return BumpChartProperty @property @BumpChartProperty.getter( nullable=False, default_value=DEFAULT_BUMP_CHART_RESULT_LIMIT, value_validate_function=lambda value: assert_integer( value, 'result_limit'), ) def result_limit(self): return self.get('resultLimit') @result_limit.setter @BumpChartProperty.setter() def result_limit(self, value): self['resultLimit'] = value @property @BumpChartProperty.getter( nullable=False, default_value=DEFAULT_SELECTED_FIELD, value_validate_function=lambda value: assert_string( value, 'selected_field'), ) def selected_field(self): return self.get('selectedField') @selected_field.setter @BumpChartProperty.setter() def selected_field(self, value): self['selectedField'] = value @property @BumpChartProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'selected_keys', string_to_integer_kv_validator), ) def selected_keys(self): return self.get('selectedKeys') @selected_keys.setter @BumpChartProperty.setter() def selected_keys(self, value): self['selectedKeys'] = value @property @BumpChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_SORT_ORDER, value_validate_function=lambda value: assert_enum( value, SortOrder, 'SortOrder', 'sort_order'), value_formatter_function=serialize_sort_order, ) def sort_order(self): return self.get('sortOrder') @sort_order.setter @BumpChartProperty.setter(value_parser_function=deserialize_sort_order) def sort_order(self, value): self['sortOrder'] = value @property @BumpChartProperty.getter( nullable=False, default_value=DEFAULT_BUMP_CHART_THEME, value_validate_function=lambda value: assert_enum( value, BumpChartTheme, 'BumpChartTheme', 'theme'), value_formatter_function=lambda value: value.name.lower(), ) def theme(self): return self.get('theme') @theme.setter @BumpChartProperty.setter( value_parser_function=deserialize_bump_chart_theme) def theme(self, value): self['theme'] = value @property @BumpChartProperty.getter( nullable=False, default_value=DEFAULT_BUMP_CHART_USE_ETHIOPIAN_DATES, value_validate_function=lambda value: assert_boolean( value, 'use_ethopian_dates'), ) def use_ethiopian_dates(self): return self.get('useEthiopianDates') @use_ethiopian_dates.setter @BumpChartProperty.setter() def use_ethiopian_dates(self, value): self['useEthiopianDates'] = value
class BarChartSettings(PythonModel): @classmethod def registry(cls): return BarChartProperty @property @BarChartProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'disabled_fields', string_to_integer_kv_validator), ) def disabled_fields(self): return self.get('disabledFields') @disabled_fields.setter @BarChartProperty.setter() def disabled_fields(self, value): self['disabledFields'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_RESULT_LIMIT, value_validate_function=lambda value: assert_integer( value, 'result_limit'), ) def result_limit(self): return self.get('resultLimit') @result_limit.setter @BarChartProperty.setter() def result_limit(self, value): self['resultLimit'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_SORT_ORDER, value_validate_function=lambda value: assert_enum( value, SortOrder, 'SortOrder', 'sort_order'), value_formatter_function=serialize_sort_order, ) def sort_order(self): return self.get('sortOrder') @sort_order.setter @BarChartProperty.setter(value_parser_function=deserialize_sort_order) def sort_order(self, value): self['sortOrder'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_SELECTED_FIELD, value_validate_function=lambda value: assert_string(value, 'sort_on'), ) def sort_on(self): return self.get('sortOn') @sort_on.setter @BarChartProperty.setter() def sort_on(self, value): self['sortOn'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_STACK_BARS, value_validate_function=lambda value: assert_boolean( value, 'stack_bars'), ) def stack_bars(self): return self.get('stackBars') @stack_bars.setter @BarChartProperty.setter() def stack_bars(self, value): self['stackBars'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_Y2_LINE_GRAPH, value_validate_function=lambda value: assert_boolean( value, 'y2_line_graph'), ) def y2_line_graph(self): return self.get('y2LineGraph') @y2_line_graph.setter @BarChartProperty.setter() def y2_line_graph(self, value): self['y2LineGraph'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_X_TICK_FORMAT, value_validate_function=lambda value: assert_string( value, 'x_tick_format'), ) def x_tick_format(self): return self.get('xTickFormat') @x_tick_format.setter @BarChartProperty.setter() def x_tick_format(self, value): self['xTickFormat'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_REMOVE_BAR_SPACING, value_validate_function=lambda value: assert_boolean( value, 'remove_bar_spacing'), ) def remove_bar_spacing(self): return self.get('removeBarSpacing') @remove_bar_spacing.setter @BarChartProperty.setter() def remove_bar_spacing(self, value): self['removeBarSpacing'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_ROTATE_X_AXIS_LABELS, value_validate_function=lambda value: assert_boolean( value, 'rotate_x_axis_labels'), ) def rotate_x_axis_labels(self): return self.get('rotateXAxisLabels') @rotate_x_axis_labels.setter @BarChartProperty.setter() def rotate_x_axis_labels(self, value): self['rotateXAxisLabels'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_ROTATE_DATA_VALUE_LABELS, value_validate_function=lambda value: assert_boolean( value, 'rotate_data_value_labels'), ) def rotate_data_value_labels(self): return self.get('rotateDataValueLabels') @rotate_data_value_labels.setter @BarChartProperty.setter() def rotate_data_value_labels(self, value): self['rotateDataValueLabels'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_HIDE_GRIDLINES, value_validate_function=lambda value: assert_boolean( value, 'hide_grid_lines'), ) def hide_grid_lines(self): return self.get('hideGridLines') @hide_grid_lines.setter @BarChartProperty.setter() def hide_grid_lines(self, value): self['hideGridLines'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_HIDE_DATA_VALUE_ZEROS, value_validate_function=lambda value: assert_boolean( value, 'hide_data_value_zeros'), ) def hide_data_value_zeros(self): return self.get('hideDataValueZeros') @hide_data_value_zeros.setter @BarChartProperty.setter() def hide_data_value_zeros(self, value): self['hideDataValueZeros'] = value
class DashboardSpecification(PythonModel): ''' A class that defines a Dashboard Specification ''' @classmethod def registry(cls): return DashboardProperty @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'dateRanges', validate_date_range_item), ) def date_ranges(self): return self.get('dateRanges') @date_ranges.setter @DashboardProperty.setter( value_parser_function=lambda date_range_objects: { _id: DateRangeSpecification(date_range_object) for (_id, date_range_object) in date_range_objects.items() }) def date_ranges(self, value): self['dateRanges'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'filters', validate_filter_item), ) def filters(self): return self.get('filters') @filters.setter @DashboardProperty.setter( value_parser_function=lambda filter_objects: { _id: FilterDefinition(filter_object) for (_id, filter_object) in filter_objects.items() }) def filters(self, value): self['filters'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'items', validate_layout_item), ) def items(self): return self.get('items') @items.setter @DashboardProperty.setter( value_parser_function=lambda layout_objects: { _id: LayoutItem(layout_object) for (_id, layout_object) in layout_objects.items() }) def items(self, value): self['items'] = value @property @DashboardProperty.getter( nullable=False, default_value=DashboardOptions, value_validate_function=lambda value: assert_type( value, DashboardOptions, argument_name='options'), ) def options(self): return self.get('options') @options.setter @DashboardProperty.setter(value_parser_function=DashboardOptions) def options(self, value): self['options'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'queries', validate_query_item), ) def queries(self): return self.get('queries') @queries.setter @DashboardProperty.setter( value_parser_function=lambda query_objects: { _id: QueryDefinition(query_object) for (_id, query_object) in query_objects.items() }) def queries(self, value): self['queries'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'settings', validate_settings_item), ) def settings(self): return self.get('settings') @settings.setter @DashboardProperty.setter( value_parser_function=lambda settings_objects: { _id: VisualizationSettings(settings_object) for (_id, settings_object) in settings_objects.items() }) def settings(self, value): self['settings'] = value @property @DashboardProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'sizes', validate_size_item), ) def sizes(self): return self.get('sizes') @sizes.setter @DashboardProperty.setter( value_parser_function=lambda size_objects: { _id: LayoutSize(size_object) for (_id, size_object) in size_objects.items() }) def sizes(self, value): self['sizes'] = value @property @DashboardProperty.getter() def version(self): return '2019-01-24' def after_deserialize(self): ''' After deserializing, we need to find all BUMP_CHART settings and check if its seriesSettings are incomplete. If so, we need to fix it. ''' for settings_object in list(self.settings.values()): view_settings = settings_object.view_type_settings # HACK(pablo, vedant): get the series settings from the CHART # visualization, which we'll just assume is always correct correct_series = view_settings['CHART'].series_settings correct_series_objs = correct_series.series_objects correct_series_order = correct_series.series_order if 'BUMP_CHART' not in view_settings: view_settings['BUMP_CHART'] = SettingsGroup( VisualizationType.BUMP_CHART) view_settings['BUMP_CHART'].series_settings = { 'seriesObjects': correct_series_objs, 'seriesOrder': correct_series_order, } else: # make sure the bumpchart series settings are correctly set bumpchart_series = view_settings['BUMP_CHART'].series_settings series_info = { 'seriesObjects': bumpchart_series['seriesObjects'], 'seriesOrder': bumpchart_series['seriesOrder'], } if series_info[ 'seriesObjects'] == {} and correct_series_objs != {}: series_info['seriesObjects'] = correct_series_objs if series_info[ 'seriesOrder'] == [] and correct_series_order != []: series_info['seriesOrder'] = correct_series_order view_settings['BUMP_CHART'].series_settings = series_info def __repr__(self): if self.options: title = self.options.title return u'Dashboard \'{0}\''.format(title) return 'Unnamed Dashboard'
class BarChartSettings(PythonModel): @classmethod def registry(cls): return BarChartProperty @property @BarChartProperty.getter( nullable=False, default_value=lambda: {}, value_validate_function=lambda value: assert_mapping( value, 'disabled_fields', string_to_integer_kv_validator), ) def disabled_fields(self): return self.get('disabledFields') @disabled_fields.setter @BarChartProperty.setter() def disabled_fields(self, value): self['disabledFields'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_RESULT_LIMIT, value_validate_function=lambda value: assert_integer( value, 'result_limit'), ) def result_limit(self): return self.get('resultLimit') @result_limit.setter @BarChartProperty.setter() def result_limit(self, value): self['resultLimit'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_SORT_ORDER, value_validate_function=lambda value: assert_enum( value, SortOrder, 'SortOrder', 'sort_order'), value_formatter_function=serialize_sort_order, ) def sort_order(self): return self.get('sortOrder') @sort_order.setter @BarChartProperty.setter(value_parser_function=deserialize_sort_order) def sort_order(self, value): self['sortOrder'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_SELECTED_FIELD, value_validate_function=lambda value: assert_string(value, 'sort_on'), ) def sort_on(self): return self.get('sortOn') @sort_on.setter @BarChartProperty.setter() def sort_on(self, value): self['sortOn'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_STACK_BARS, value_validate_function=lambda value: assert_boolean( value, 'stack_bars'), ) def stack_bars(self): return self.get('stackBars') @stack_bars.setter @BarChartProperty.setter() def stack_bars(self, value): self['stackBars'] = value @property @BarChartProperty.getter( nullable=False, default_value=DEFAULT_BAR_CHART_Y2_LINE_GRAPH, value_validate_function=lambda value: assert_boolean( value, 'y2_line_graph'), ) def y2_line_graph(self): return self.get('y2LineGraph') @y2_line_graph.setter @BarChartProperty.setter() def y2_line_graph(self, value): self['y2LineGraph'] = value