예제 #1
0
 def test_script(self):
     from cloudml.importhandler.scripts import ScriptManager
     script_manager = ScriptManager()
     field = Field(self.FIELD_WITH_SCRIPT, entity=None)
     self.assertEquals(
         field.process_value("Nikolay", script_manager),
         "Name is: Nikolay")
예제 #2
0
    def test_autoload_fields_by_row(self):
        from cloudml.importhandler.entities import Entity, Field
        from cloudml.importhandler.utils import autoload_fields_by_row
        ent = Entity({'name': 'ent'})
        row = {
            'name': 'Name',
            'count': 5,
            'accuracy': 3.5,
            'data': '{"x": "x", "y": 5.4}'
        }
        autoload_fields_by_row(ent, row)
        self.assertEquals(ent.fields.keys(),
                          ['count', 'data', 'name', 'accuracy'])
        self.assertEquals(ent.fields['name'].type, 'string')
        self.assertEquals(ent.fields['count'].type, 'integer')
        self.assertEquals(ent.fields['accuracy'].type, 'float')
        self.assertEquals(ent.fields['data'].type, 'string')
        self.assertEquals(ent.fields['data'].transform, 'json')
        self.assertEquals(ent.fields['data'].column, 'data')
        self.assertEquals(ent.nested_entities_field_ds.keys(), ['data'])
        nested_ent = ent.nested_entities_field_ds['data']
        self.assertEquals(nested_ent.name, 'data')
        self.assertItemsEqual(nested_ent.fields.keys(), ['x', 'y'])

        ent = Entity({'name': 'ent'})
        ent.fields['count'] = Field({'name': 'count', 'type': 'float'}, ent)
        self.assertEquals(ent.fields['count'].type, 'float')
예제 #3
0
    def test_declaration(self):
        with self.assertRaisesRegexp(
                ImportHandlerException,
                "Type of the field field_name is invalid: invalid. \
Choose one of string, float, json, boolean, date, integer"):
            field = Field({
                'name': 'field_name',
                'type': 'invalid'}, entity=None)

        with self.assertRaisesRegexp(
                ImportHandlerException,
                "Field field_name declaration is invalid: use dateFormat \
only for string fields"):
            field = Field({
                'name': 'field_name',
                'type': 'integer',
                'dateFormat': '%M'}, entity=None)
예제 #4
0
    def test_json_path(self):
        field = Field({'name': 'el', 'jsonpath': "$.el"}, entity=None)
        self.assertEquals(field.process_value({"el": "val"}, None),
                          "val")
        field = Field({
            'name': 'el',
            'type': 'integer',
            'jsonpath': "$.el",
            'key_path': "$.key",
            'value_path': "$.data"},
            entity=self.entity)
        val = {
            "el": {
                "key": "results",
                "data": ['1', '2']
            }
        }
        self.assertEquals(field.process_value(val, None),
                          {'results': [1, 2]})

        field = Field({
            'name': 'el',
            'type': 'integer',
            'jsonpath': "$.el",
            'key_path': "$.key",
            'value_path': "$.data"},
            entity=self.entity)
        val = {
            "el": {
                "key": "results",
                "data": ['1', 'invalid']
            }
        }
        self.assertEquals(field.process_value(val, None),
                          {'results': None})

        val = {
            "el": {
                "name": "data",
                "data": ['1', '2']
            }
        }
        self.assertEquals(field.process_value(val, None), None)
예제 #5
0
    def test_split(self):
        field = Field({'name': 'f',
                       'split': ';'}, entity=None)
        self.assertEquals(field.process_value("a;b;c", None),
                          ['a', 'b', 'c'])

        field = Field({'name': 'f',
                       'split': ';'}, entity=None)
        self.assertEquals(field.process_value("abc", None), ['abc'])
예제 #6
0
 def test_required(self):
     field_required = Field({
         'name': 'field_name',
         'type': 'string',
         'required': 'true'
     }, entity=None)
     field = Field({
         'name': 'field_name',
         'type': 'string'
     }, entity=None)
     with self.assertRaises(ProcessException):
         field_required.process_value(None, None)
     value = field.process_value(None, None)
     self.assertEqual(value, None)
예제 #7
0
 def test_converion_error(self):
     field = Field({'name': 'f', 'type': 'integer'}, entity=self.entity)
     self.assertEquals(field.process_value("hello", None), None)
예제 #8
0
 def test_template(self):
     field = Field({'name': 'f',
                    'template': 'result=#{value}'},
                   entity=self.entity)
     self.assertEquals(field.process_value("hello", None),
                       "result=hello")
예제 #9
0
 def test_dateFormat(self):
     from datetime import datetime
     field = Field({'name': 'f',
                    'dateFormat': '%d/%m/%y'}, entity=None)
     self.assertEquals(field.process_value("1/1/06", None),
                       datetime(2006, 1, 1, 0, 0))
예제 #10
0
 def test_delimiter(self):
     field = Field({'name': 'f',
                    'delimiter': ';'}, entity=None)
     self.assertEquals(field.process_value(['a', 'b', 'c'], None), "a;b;c")
예제 #11
0
 def test_regex(self):
     field = Field({'name': 'f',
                    'regex': '(?<=-)\w+'}, entity=None)
     self.assertEquals(field.process_value("cloud-ml", None), "ml")
     self.assertEquals(field.process_value("cloudml", None), None)