Example #1
0
    def test_required_property(self):
        # no constraints -> require = False
        self.assertFalse(SchemaConstraints(None).required)
        cts = clone(BASE_CONSTRAINTS)
        self.assertFalse(cts['required'])
        self.assertFalse(SchemaConstraints(cts).required)

        cts = clone(BASE_CONSTRAINTS)
        cts['required'] = True
        self.assertTrue(cts['required'])
        self.assertTrue(SchemaConstraints(cts).required)
Example #2
0
    def test_required_property(self):
        # no constraints -> require = False
        self.assertFalse(SchemaConstraints(None).required)
        cts = clone(BASE_CONSTRAINTS)
        self.assertFalse(cts['required'])
        self.assertFalse(SchemaConstraints(cts).required)

        cts = clone(BASE_CONSTRAINTS)
        cts['required'] = True
        self.assertTrue(cts['required'])
        self.assertTrue(SchemaConstraints(cts).required)
Example #3
0
    def test_string(self):
        # test that a blank string '' is not accepted when the field is required
        null_values = ['null', 'none', 'nil', 'nan', '-', '']
        desc = clone(BASE_FIELD)
        desc['type'] = 'string'
        desc['constraints'] = clone(REQUIRED_CONSTRAINTS)
        f = SchemaField(desc)
        for v in null_values:
            with self.assertRaises(Exception):
                f.cast(v)

        # test non unicode (python 2)
        value = 'not unicode'
        self.assertIsInstance(f.cast(value), six.text_type)
        self.assertEqual(f.cast(value), value)
Example #4
0
    def test_string(self):
        # test that a blank string '' is not accepted when the field is required
        null_values = ['null', 'none', 'nil', 'nan', '-', '']
        desc = clone(BASE_FIELD)
        desc['type'] = 'string'
        desc['constraints'] = clone(REQUIRED_CONSTRAINTS)
        f = SchemaField(desc)
        for v in null_values:
            with self.assertRaises(Exception):
                f.cast(v)

        # test non unicode (python 2)
        value = 'not unicode'
        self.assertIsInstance(f.cast(value), six.text_type)
        self.assertEqual(f.cast(value), value)
Example #5
0
 def test_datetime_any(self):
     """
     test datetime field with 'any' format
     :return:
     """
     descriptor = clone(BASE_FIELD)
     descriptor['type'] = 'datetime'
     # format='any'.
     # The main problem is to be sure that a dd/mm/yyyy is not interpreted as mm/dd/yyyy
     descriptor['format'] = 'any'
     f = SchemaField(descriptor)
     valid_values = [
         '2016-07-10 13:55:00', '10/07/2016 13:55', '10/07/16 1:55 pm',
         '2016-07-10 13:55:00', '10-July-2016 13:55:00',
         '10-JUlY-16 13:55:00', '10-07-2016 13:55:00', '10-07-16 13:55:00'
     ]
     expected_dt = datetime.datetime(2016, 7, 10, 13, 55, 00)
     for v in valid_values:
         dt = f.cast(v)
         self.assertIsInstance(dt, datetime.datetime)
         self.assertEqual(expected_dt, dt)
     invalid_value = ['djskdj']
     for v in invalid_value:
         with self.assertRaises(Exception):
             f.cast(v)
Example #6
0
 def test_datetime_any(self):
     """
     test datetime field with 'any' format
     :return:
     """
     descriptor = clone(BASE_FIELD)
     descriptor['type'] = 'datetime'
     # format='any'.
     # The main problem is to be sure that a dd/mm/yyyy is not interpreted as mm/dd/yyyy
     descriptor['format'] = 'any'
     f = SchemaField(descriptor)
     valid_values = [
         '2016-07-10 13:55:00',
         '10/07/2016 13:55',
         '10/07/16 1:55 pm',
         '2016-07-10 13:55:00',
         '10-July-2016 13:55:00',
         '10-JUlY-16 13:55:00',
         '10-07-2016 13:55:00',
         '10-07-16 13:55:00'
     ]
     expected_dt = datetime.datetime(2016, 7, 10, 13, 55, 00)
     for v in valid_values:
         dt = f.cast(v)
         self.assertIsInstance(dt, datetime.datetime)
         self.assertEqual(expected_dt, dt)
     invalid_value = ['djskdj']
     for v in invalid_value:
         with self.assertRaises(Exception):
             f.cast(v)
Example #7
0
    def test_date(self):
        descriptor = clone(BASE_FIELD)
        descriptor['type'] = 'date'
        # 'default' format = ISO
        descriptor['format'] = 'default'
        f = SchemaField(descriptor)
        valid_values = ['2016-07-29']
        for v in valid_values:
            date = f.cast(v)
            self.assertIsInstance(date, datetime.date)
            self.assertEqual(datetime.date(2016, 7, 29), date)
        invalid_value = ['29/07/2016', '07/29/2016', '2016-07-29 15:28:37']
        for v in invalid_value:
            with self.assertRaises(Exception):
                f.cast(v)

        # format='any'.
        # The main problem is to be sure that a dd/mm/yyyy is not interpreted as mm/dd/yyyy
        descriptor['format'] = 'any'
        f = SchemaField(descriptor)
        valid_values = [
            '2016-07-10', '10/07/2016', '10/07/16', '2016-07-10 15:28:37',
            '10-July-2016', '10-JUlY-16', '10-07-2016', '10-07-16'
        ]
        expected_date = datetime.date(2016, 7, 10)
        for v in valid_values:
            date = f.cast(v)
            self.assertIsInstance(date, datetime.date)
            self.assertEqual(expected_date, date)
        invalid_value = ['djskdj']
        for v in invalid_value:
            with self.assertRaises(Exception):
                f.cast(v)
Example #8
0
 def test_species_by_field_name(self):
     """
     A previous implementation supported species field detection by just the field name.
     Not anymore
     :return:
     """
     names = ['species name', 'Species Name', 'SPECIES_NAME', 'species_Name']
     for name in names:
         descriptor = clone(helpers.GENERIC_SCHEMA)
         sch = Schema(descriptor)
         # no species field
         self.assertFalse(sch.species_fields)
         # add a field named name
         field = clone(BASE_FIELD)
         field['name'] = name
         descriptor['fields'].append(field)
         sch = Schema(descriptor)
         self.assertEqual(0, len(sch.species_fields))
Example #9
0
 def test_get_method(self):
     """
     test that the SchemaField has the dict-like get('key', default)
     """
     cts = clone(BASE_CONSTRAINTS)
     sch = SchemaConstraints(cts)
     self.assertTrue(hasattr(sch, 'get'))
     self.assertEquals(cts.get('required'), sch.get('required'))
     self.assertEquals(cts.get('constraints'), sch.get('constraints'))
     self.assertEquals(None, sch.get('bad_keys'))
     self.assertEquals('default', sch.get('bad_keys', 'default'))
Example #10
0
 def test_species_by_field_name(self):
     """
     A previous implementation supported species field detection by just the field name.
     Not anymore
     :return:
     """
     names = [
         'species name', 'Species Name', 'SPECIES_NAME', 'species_Name'
     ]
     for name in names:
         descriptor = clone(helpers.GENERIC_SCHEMA)
         sch = Schema(descriptor)
         # no species field
         self.assertFalse(sch.species_fields)
         # add a field named name
         field = clone(BASE_FIELD)
         field['name'] = name
         descriptor['fields'].append(field)
         sch = Schema(descriptor)
         self.assertEqual(0, len(sch.species_fields))
Example #11
0
 def test_get_method(self):
     """
     test that the SchemaField has the dict-like get('key', default)
     """
     cts = clone(BASE_CONSTRAINTS)
     sch = SchemaConstraints(cts)
     self.assertTrue(hasattr(sch, 'get'))
     self.assertEquals(cts.get('required'), sch.get('required'))
     self.assertEquals(cts.get('constraints'), sch.get('constraints'))
     self.assertEquals(None, sch.get('bad_keys'))
     self.assertEquals('default', sch.get('bad_keys', 'default'))
Example #12
0
 def test_species_by_wl_tag(self):
     # adding a wl species tag to a field turns it into a species field (whatever its name)
     descriptor = clone(helpers.GENERIC_SCHEMA)
     sch = Schema(descriptor)
     # no species field
     self.assertFalse(sch.species_fields)
     # tag
     field = descriptor['fields'][0]
     field['wl'] = {'type': 'species'}
     sch = Schema(descriptor)
     self.assertEqual(1, len(sch.species_fields))
     self.assertEquals(field['name'], sch.species_fields[0].name)
Example #13
0
 def test_species_by_wl_tag(self):
     # adding a wl species tag to a field turns it into a species field (whatever its name)
     descriptor = clone(helpers.GENERIC_SCHEMA)
     sch = Schema(descriptor)
     # no species field
     self.assertFalse(sch.species_fields)
     # tag
     field = descriptor['fields'][0]
     field['wl'] = {
         'type': 'species'
     }
     sch = Schema(descriptor)
     self.assertEqual(1, len(sch.species_fields))
     self.assertEquals(field['name'], sch.species_fields[0].name)
Example #14
0
    def test_date(self):
        descriptor = clone(BASE_FIELD)
        descriptor['type'] = 'date'
        # 'default' format = ISO
        descriptor['format'] = 'default'
        f = SchemaField(descriptor)
        valid_values = ['2016-07-29']
        for v in valid_values:
            date = f.cast(v)
            self.assertIsInstance(date, datetime.date)
            self.assertEqual(datetime.date(2016, 7, 29), date)
        invalid_value = ['29/07/2016', '07/29/2016', '2016-07-29 15:28:37']
        for v in invalid_value:
            with self.assertRaises(Exception):
                f.cast(v)

        # format='any'. 
        # The main problem is to be sure that a dd/mm/yyyy is not interpreted as mm/dd/yyyy
        descriptor['format'] = 'any'
        f = SchemaField(descriptor)
        valid_values = [
            '2016-07-10',
            '10/07/2016',
            '10/07/16',
            '2016-07-10 15:28:37',
            '10-July-2016',
            '10-JUlY-16',
            '10-07-2016',
            '10-07-16'
        ]
        expected_date = datetime.date(2016, 7, 10)
        for v in valid_values:
            date = f.cast(v)
            self.assertIsInstance(date, datetime.date)
            self.assertEqual(expected_date, date)
        invalid_value = ['djskdj']
        for v in invalid_value:
            with self.assertRaises(Exception):
                f.cast(v)
Example #15
0
 def setUp(self):
     self.base_field_descriptor = clone(BASE_FIELD)
Example #16
0
 def setUp(self):
     self.base_field = clone(BASE_FIELD)
Example #17
0
 def test_no_species(self):
     descriptor = clone(helpers.GENERIC_SCHEMA)
     sch = Schema(descriptor)
     # no species field
     self.assertFalse(sch.species_fields)
Example #18
0
 def setUp(self):
     self.base_field = clone(BASE_FIELD)
Example #19
0
 def setUp(self):
     self.base_field_descriptor = clone(BASE_FIELD)
Example #20
0
 def test_no_species(self):
     descriptor = clone(helpers.GENERIC_SCHEMA)
     sch = Schema(descriptor)
     # no species field
     self.assertFalse(sch.species_fields)