Exemple #1
0
    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
Exemple #2
0
    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'])
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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
Exemple #7
0
    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'])