示例#1
0
 def process(self, element, schemas):
     """Enforce the datatypes of the input schema on the element data."""
     key_name = element[0]
     elements = element[1]
     schema = schemas[key_name]
     for elem in elements:
         resource_data = elem.get('resource', {}).get('data', {})
         if resource_data:
             bigquery_schema.enforce_schema_data_types(elem, schema)
         yield (key_name, elem)
 def test_addtional_properties_repeated_record(self):
     schema = [{
         'name':
         'property_1',
         'field_type':
         'RECORD',
         'description':
         'description-1',
         'mode':
         'REPEATED',
         'fields': [{
             'name': 'name',
             'field_type': 'STRING',
             'description': 'additionalProperties name',
             'mode': 'NULLABLE'
         }, {
             'name':
             'value',
             'field_type':
             'RECORD',
             'description':
             'description-1.',
             'mode':
             'NULLABLE',
             'fields': [{
                 'name': 'property_2',
                 'field_type': 'STRING',
                 'description': 'description-2.',
                 'mode': 'NULLABLE'
             }]
         }]
     }]
     self.assertEqual(
         bigquery_schema.enforce_schema_data_types(
             {
                 'property_1': {
                     'key1': {
                         'property_2': 'a'
                     },
                     'key2': {
                         'property_2': 'b'
                     }
                 }
             }, schema), {
                 'property_1': [{
                     'name': 'key1',
                     'value': {
                         'property_2': 'a'
                     }
                 }, {
                     'name': 'key2',
                     'value': {
                         'property_2': 'b'
                     }
                 }]
             })
    def test_enforce_schema_data_types(self):
        schema = [{
            'name': 'property_1',
            'field_type': 'NUMERIC',
            'mode': 'NULLABLE'
        }, {
            'name': 'property_2',
            'field_type': 'STRING',
            'mode': 'NULLABLE'
        }, {
            'name': 'property_3',
            'field_type': 'DATE',
            'mode': 'NULLABLE'
        }, {
            'name': 'property_4',
            'field_type': 'DATETIME',
            'mode': 'NULLABLE'
        }, {
            'name': 'property_5',
            'field_type': 'BOOL',
            'mode': 'NULLABLE'
        }, {
            'name': 'property_6',
            'field_type': 'NUMERIC',
            'mode': 'REPEATED'
        }, {
            'name':
            'property_7',
            'field_type':
            'RECORD',
            'mode':
            'REPEATED',
            'fields': [{
                'name': 'property_1',
                'field_type': 'NUMERIC',
                'mode': 'NULLABLE'
            }, {
                'name': 'property_2',
                'field_type': 'STRING',
                'mode': 'NULLABLE'
            }]
        }]
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_1': '333'},
                                                      schema),
            {'property_1': 333})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_1': 333},
                                                      schema),
            {'property_1': 333})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_1': 'notanumber'}, schema), {})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_2': 33},
                                                      schema),
            {'property_2': '33'})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_2': 'astring'}, schema), {'property_2': 'astring'})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_3': '2019-01-01'}, schema),
            {'property_3': '2019-01-01'})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_3': 'invaliddate'}, schema), {})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_4': '2019-01-01T00:01:00'}, schema),
            {'property_4': '2019-01-01T00:01:00'})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_4': 'invalid'}, schema), {})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_5': False},
                                                      schema),
            {'property_5': False})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_5': 'True'},
                                                      schema),
            {'property_5': True})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_5': 0},
                                                      schema),
            {'property_5': False})

        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_6': 33},
                                                      schema),
            {'property_6': [33]})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_6': '33'},
                                                      schema),
            {'property_6': [33]})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_6': {'33'}},
                                                      schema), {})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types({'property_6': [33]},
                                                      schema),
            {'property_6': [33]})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {
                    'property_7': [{
                        'property_1': 'invalid',
                        'property_2': 'valid'
                    }]
                }, schema), {'property_7': [{
                    'property_2': 'valid'
                }]})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_7': [{
                    'property_1': 'invalid'
                }]}, schema), {})
        self.assertEqual(
            bigquery_schema.enforce_schema_data_types(
                {'property_7': [{
                    'property_1': 'invalid'
                }, 33]}, schema), {})