コード例 #1
0
ファイル: base.py プロジェクト: vedantr/Harmony
    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()
コード例 #2
0
ファイル: model.py プロジェクト: vedantr/Harmony
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
コード例 #3
0
ファイル: model.py プロジェクト: vedantr/Harmony
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
コード例 #4
0
ファイル: model.py プロジェクト: vedantr/Harmony
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
コード例 #5
0
ファイル: model.py プロジェクト: vedantr/Harmony
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
コード例 #6
0
ファイル: model.py プロジェクト: vedantr/Harmony
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'
コード例 #7
0
ファイル: model.py プロジェクト: vedantr/Harmony
def validate_mapping(value, index, argument_name):
    formatted_argument_name = '{0}[{1}]'.format(argument_name, index)
    assert_mapping(value, formatted_argument_name)
コード例 #8
0
ファイル: model.py プロジェクト: vedantr/Harmony
def assert_series_objects(value, argument_name=None):
    assert_mapping(value, argument_name, series_settings_validator)
コード例 #9
0
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
コード例 #10
0
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
コード例 #11
0
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'
コード例 #12
0
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