def test_clean_multichartseries_non_number_is_prompting_error(self): context = RenderContext( None, TableShape(3, [ Column('A', ColumnType.TEXT()), Column('B', ColumnType.DATETIME()), ]), None, None) value = [ { 'column': 'A', 'color': '#aaaaaa' }, { 'column': 'B', 'color': '#cccccc' }, ] with self.assertRaises(PromptingError) as cm: clean_value(ParamDType.Multichartseries(), value, context) self.assertEqual(cm.exception.errors, [ PromptingError.WrongColumnType(['A'], 'text', frozenset({'number' })), PromptingError.WrongColumnType(['B'], 'datetime', frozenset({'number'})), ])
def test_list_prompting_error_concatenate_different_type(self): context = RenderContext(None, None, TableShape(3, [ Column('A', ColumnType.TEXT()), Column('B', ColumnType.DATETIME()), ]), None, None) schema = ParamDType.List( inner_dtype=ParamDType.Column(column_types=frozenset({'number'})) ) with self.assertRaises(PromptingError) as cm: clean_value(schema, ['A', 'B'], context) self.assertEqual(cm.exception.errors, [ PromptingError.WrongColumnType(['A'], 'text', frozenset({'number'})), PromptingError.WrongColumnType(['B'], 'datetime', frozenset({'number'})), ])
def test_clean_multicolumn_prompting_error_convert_to_text(self): # TODO make this _automatic_ instead of quick-fix? # ... but for now: prompt for a Quick Fix. context = RenderContext(None, None, TableShape(3, [ Column('A', ColumnType.NUMBER()), Column('B', ColumnType.DATETIME()), Column('C', ColumnType.TEXT()), ]), None, None) with self.assertRaises(PromptingError) as cm: schema = ParamDType.Multicolumn(column_types=frozenset({'text'})) clean_value(schema, 'A,B', context) self.assertEqual(cm.exception.errors, [ PromptingError.WrongColumnType(['A'], 'number', frozenset({'text'})), PromptingError.WrongColumnType(['B'], 'datetime', frozenset({'text'})), ])
def test_dict_prompting_error(self): context = RenderContext(None, None, TableShape(3, [ Column('A', ColumnType.TEXT()), Column('B', ColumnType.TEXT()), ]), None, None) schema = ParamDType.Dict({ 'col1': ParamDType.Column(column_types=frozenset({'number'})), 'col2': ParamDType.Column(column_types=frozenset({'datetime'})), }) with self.assertRaises(PromptingError) as cm: clean_value(schema, {'col1': 'A', 'col2': 'B'}, context) self.assertEqual(cm.exception.errors, [ PromptingError.WrongColumnType(['A'], 'text', frozenset({'number'})), PromptingError.WrongColumnType(['B'], 'text', frozenset({'datetime'})), ])
def test_as_quick_fixes(self): err = PromptingError([ PromptingError.WrongColumnType(['A'], 'text', frozenset({'number'})), PromptingError.WrongColumnType(['B', 'C'], 'datetime', frozenset({'number'})), ]) result = err.as_quick_fixes() self.assertEqual(result, [ QuickFix('Convert "A" to Numbers', 'prependModule', ['converttexttonumber', { 'colnames': ['A'] }]), QuickFix('Convert "B", "C" to Numbers', 'prependModule', ['converttexttonumber', { 'colnames': ['B', 'C'] }]), ])
def test_clean_column_prompting_error_convert_to_number(self): context = RenderContext(None, None, TableShape(3, [ Column('A', ColumnType.TEXT()), ]), None, None) with self.assertRaises(PromptingError) as cm: clean_value(ParamDType.Column(column_types=frozenset({'number'})), 'A', context) self.assertEqual(cm.exception.errors, [ PromptingError.WrongColumnType(['A'], 'text', frozenset({'number'})), ])
def test_clean_column_prompting_error_convert_to_text(self): # TODO make this _automatic_ instead of quick-fix? # Consider Regex. We probably want to pass the module a text Series # _separately_ from the input DataFrame. That way Regex can output # a new Text column but preserve its input column's data type. # # ... but for now: prompt for a Quick Fix. context = RenderContext(None, None, TableShape(3, [ Column('A', ColumnType.NUMBER()), ]), None, None) with self.assertRaises(PromptingError) as cm: clean_value(ParamDType.Column(column_types=frozenset({'text'})), 'A', context) self.assertEqual(cm.exception.errors, [ PromptingError.WrongColumnType(['A'], 'number', frozenset({'text'})), ])