def create_sheet(self, name, *args, **kwargs): """ Creates sheet and appends it to spreadsheet with given name. ``args`` and ``kwargs`` are passed to :py:class:`Sheet` constructor. :param name: The name of the Sheet. :type name: unicode :returns: Created sheet. """ sheet = Sheet(*args, **kwargs) for validator_creator in self.validator_creators: for validator, validator_type in zip( validator_creator(), ['insert', 'delete', 'replace']): if validator is not None: sheet.add_validator(validator, validator_type) for validator in self.validators['add_sheet']: sheet, name = validator(self, name, sheet) if name in self.sheets: raise IntegrityError( u'Sheet with name \"{0}\" already exists.'.format(name)) else: self.sheets[name] = sheet self.names.append(name) sheet.set_spreadsheet(self, name) return sheet
def test_07(self): """ Test modifying validators. """ def name_validator(sheet, row, replaced_row=None): """ Splits name into first name and last name. """ first_name, last_name = unicode(row[u'Name']).split() row[u'First name'] = first_name.capitalize() row[u'Last name'] = last_name.capitalize() del row[u'Name'] return row sheet = Sheet(captions=[u'ID', u'First name', u'Last name']) sheet.add_validator(name_validator, 'insert', 'replace') self.assertRaises(ValueError, sheet.append, [u'1', u'Foo Bar']) self.assertRaises( ValueError, sheet.append, {u'ID': 1, u'Name': u'Foo'}) self.assertEqual(len(sheet), 0) sheet.append({u'ID': 1, u'Name': u' fOo bAR'}) self.assertEqual(len(sheet), 1) self.assertEqual(list(sheet[0]), [1, u'Foo', u'Bar']) sheet[0] = {u'ID': u'0', u'Name': u'bar foo'} self.assertEqual(len(sheet), 1) self.assertEqual(list(sheet[0]), [u'0', u'Bar', u'Foo']) validator = UniqueNameValidator() sheet.add_insert_validator(validator.insert) sheet.add_delete_validator(validator.delete) sheet.add_replace_validator(validator.replace) self.assertEqual( sheet.insert_validators, [name_validator, validator.insert]) self.assertEqual( sheet.delete_validators, [validator.delete]) self.assertEqual( sheet.replace_validators, [name_validator, validator.replace]) sheet.append({u'Name': u'Fooer Barer'}) self.assertEqual( list(u', '.join(row) for row in sheet), [u'0, Bar, Foo', u'1, Fooer, Barer']) self.assertRaises( ValidationError, sheet.append, {u'Name': u'Fooer Barer'}) del sheet[1] sheet.append({u'Name': u'Fooer Barer'}) self.assertEqual( list(u', '.join(row) for row in sheet), [u'0, Bar, Foo', u'2, Fooer, Barer']) sheet[1] = {u'Name': u'fooer barer', u'ID': u'1'} self.assertEqual( list(u', '.join(row) for row in sheet), [u'0, Bar, Foo', u'1, Fooer, Barer'])
def academic_import_validate_sheet(spreadsheet, name, sheet): """ Creates sheet with correct columns. """ sheet = Sheet( captions=( list(IMPORT_ACADEMICS_REQUIRED_COLUMNS.keys()) + list(IMPORT_ACADEMICS_OPTIONAL_COLUMNS.keys()))) sheet.add_validator(academic_import_validate_row, 'insert') return sheet, name
def title_only_import_validate_sheet(spreadsheet, name, sheet): """ Creates sheet with correct columns. """ sheet = Sheet( captions=(list(IMPORT_TITLE_ONLY_REQUIRED_COLUMNS.keys()))) sheet.add_validator( ImportValidateRow( IMPORT_TITLE_ONLY_REQUIRED_COLUMNS, (u'id',), (u'id', u'title',), (u'id', u'title',), ), 'insert') return sheet, name
def municipalities_import_validate_sheet(spreadsheet, name, sheet): """ Creates sheet with correct columns. """ sheet = Sheet( captions=(list(IMPORT_MUNICIPALITIES_REQUIRED_COLUMNS.keys()))) sheet.add_validator( ImportValidateRow( IMPORT_MUNICIPALITIES_REQUIRED_COLUMNS, (u'id', u'code',), (u'id', u'code',), (u'id', u'town', u'code',), ), 'insert') return sheet, name
def base_info_import_validate_sheet(spreadsheet, name, sheet): """ Creates sheet with correct columns. """ sheet = Sheet( captions=(list(IMPORT_BASE_INFO_REQUIRED_COLUMNS.keys()))) sheet.add_validator( ImportValidateRow( IMPORT_BASE_INFO_REQUIRED_COLUMNS, (u'payment',), (), (u'first_name', u'last_name', u'email', u'section', u'payment'), ), 'insert') sheet.add_validator(base_info_import_validate_row, 'insert') return sheet, name
def test_06(self): """ Test non-modifying validators. """ validator = UniqueIntegerValidator(u'ID') sheet = Sheet(captions=[u'ID']) sheet.add_insert_validator(validator.insert) sheet.add_delete_validator(validator.delete) sheet.add_replace_validator(validator.replace) self.assertEqual(sheet.insert_validators, [validator.insert]) self.assertEqual(sheet.delete_validators, [validator.delete]) self.assertEqual(sheet.replace_validators, [validator.replace]) sheet.add_validator(validate_nothing) self.assertEqual(sheet.insert_validators, [validator.insert]) self.assertEqual(sheet.delete_validators, [validator.delete]) self.assertEqual(sheet.replace_validators, [validator.replace]) sheet.add_validator(validate_nothing, 'insert', 'delete', 'replace') self.assertEqual(sheet.insert_validators, [validator.insert, validate_nothing]) self.assertEqual(sheet.delete_validators, [validator.delete, validate_nothing]) self.assertEqual(sheet.replace_validators, [validator.replace, validate_nothing]) self.assertRaises( ValueError, sheet.add_validator, validate_nothing, 'foo') self.assertRaises(ValidationError, sheet.append, [u'baba']) self.assertEqual(len(sheet), 0) sheet.append([u'2']) sheet.append([u'3']) self.assertEqual(sorted(validator.values), [2, 3]) self.assertEqual(sheet[1][u'ID'], 3) self.assertEqual(len(sheet), 2) self.assertRaises(ValidationError, sheet.append, [3]) self.assertEqual(len(sheet), 2) del sheet[1] self.assertEqual(validator.values, set([2])) sheet.append([u'3']) sheet[1] = {u'ID': 4} sheet.append([u'3'])