Пример #1
0
    def typed_encode(self, r):
        """
        :param record:  expecting id and value properties
        :return:  dict with id and json properties
        """
        try:
            value = r['value']
            if "json" in r:
                value = json2value(r["json"])
            elif isinstance(value, Mapping) or value != None:
                pass
            else:
                from mo_logs import Log
                raise Log.error(
                    "Expecting every record given to have \"value\" or \"json\" property"
                )

            _buffer = UnicodeBuilder(1024)
            net_new_properties = []
            path = []
            if isinstance(value, Mapping):
                given_id = self.get_id(value)
                if self.remove_id:
                    value['_id'] = None
            else:
                given_id = None

            if given_id:
                record_id = r.get('id')
                if record_id and record_id != given_id:
                    from mo_logs import Log

                    raise Log.error(
                        "expecting {{property}} of record ({{record_id|quote}}) to match one given ({{given|quote}})",
                        property=self.id_column,
                        record_id=record_id,
                        given=given_id)
            else:
                record_id = r.get('id')
                if record_id:
                    given_id = record_id
                else:
                    given_id = random_id()

            typed_encode(value, self.schema, path, net_new_properties, _buffer)
            json = _buffer.build()

            for props in net_new_properties:
                path, type = props[:-1], props[-1][1:]
                # self.es.add_column(join_field(path), type)

            return {"id": given_id, "json": json}
        except Exception as e:
            # THE PRETTY JSON WILL PROVIDE MORE DETAIL ABOUT THE SERIALIZATION CONCERNS
            from mo_logs import Log

            Log.error("Serialization of JSON problems", cause=e)
Пример #2
0
    def typed_encode(self, record):
        """
        :param record:  expecting id and value properties
        :return:  dict with id and json properties
        """
        try:
            value = record.get('value')
            if "json" in record:
                value = json2value(record["json"])
            elif is_data(value) or value != None:
                pass
            else:
                from mo_logs import Log
                raise Log.error(
                    "Expecting every record given to have \"value\" or \"json\" property"
                )

            _buffer = UnicodeBuilder(1024)
            net_new_properties = []
            path = []
            if is_data(value):
                given_id = self.get_id(value)
                if given_id != None and not isinstance(given_id, text):
                    given_id = value2json(given_id)
                value['_id'] = None
                version = self.get_version(value)
            else:
                given_id = None
                version = None

            if given_id:
                record_id = record.get('id')
                if record_id and record_id != given_id:
                    from mo_logs import Log

                    raise Log.error(
                        "expecting {{property}} of record ({{record_id|quote}}) to match one given ({{given|quote}})",
                        property=self.id_info,
                        record_id=record_id,
                        given=given_id)
            else:
                record_id = record.get('id')
                if record_id:
                    given_id = record_id
                else:
                    given_id = random_id()

            typed_encode(value, self.schema, path, net_new_properties, _buffer)
            json = _buffer.build()

            return given_id, version, json
        except Exception as e:
            # THE PRETTY JSON WILL PROVIDE MORE DETAIL ABOUT THE SERIALIZATION CONCERNS
            from mo_logs import Log

            Log.error("Serialization of JSON problems", cause=e)
Пример #3
0
 def test_double(self):
     value = {"value": 5.2025595183536973e-07}
     test1 = typed_encode(value)
     expected = u'{"value":{' + quote(
         NUMBER_KEY) + u':5.202559518353697e-7},' + quote(
             EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #4
0
 def test_list_of_objects(self):
     value = {"a": [{}, "b"]}
     test1 = typed_encode(value)
     expected = u'{"a":{"' + ARRAY_KEY + u'":[{' + quote(
         EXISTS_KEY) + u':1},{' + quote(STRING_KEY) + u':"b"}]},' + quote(
             EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #5
0
    def test_null_object_in_list(self):
        value = wrap({"a": [{"b": None}]})

        test = typed_encode(value)
        expected = u'{"a":{' + quote(EXISTS_KEY) + u':1},' + quote(
            EXISTS_KEY) + u':1}'
        self.assertEqual(test, expected)
Пример #6
0
 def test_unicode2(self):
     value = {
         "comment": "testing accented char àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
     }
     test1 = typed_encode(value)
     expected = u'{"comment":{' + quote(
         STRING_KEY
     ) + u':"testing accented char àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #7
0
 def test_unicode3(self):
     value = {
         "comment":
         u"testing accented char ŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
     }
     test1 = typed_encode(value)
     expected = u'{"comment":{' + quote(
         STRING_KEY
     ) + u':"testing accented char ŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #8
0
 def test_unicode1(self):
     value = {
         "comment":
         u"Open all links in the current tab, except the pages opened from external apps — open these ones in new windows"
     }
     test1 = typed_encode(value)
     expected = u'{"comment":{' + quote(
         STRING_KEY
     ) + u':"Open all links in the current tab, except the pages opened from external apps — open these ones in new windows"},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #9
0
 def test_number_value(self):
     value = 42
     test1 = typed_encode(value)
     expected = '{' + quote(NUMBER_KEY) + u':42}'
     self.assertEqual(test1, expected)
     self.assertEqual(expected, test1)
Пример #10
0
 def test_list_value(self):
     value = [42]
     test1 = typed_encode(value)
     expected = u'{' + quote(INTEGER_KEY) + u':42}'
     self.assertEqual(test1, expected)
Пример #11
0
 def test_empty_list1(self):
     value = wrap({"a": []})
     test1 = typed_encode(value)
     expected = u'{' + quote(EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #12
0
 def test_complex_object(self):
     value = wrap({"s": 0, "r": 5})
     test1 = typed_encode(value)
     expected = u'{"r":{' + quote(NUMBER_KEY) + u':5},"s":{' + quote(
         NUMBER_KEY) + u':0},' + quote(EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #13
0
 def test_empty_dict(self):
     value = wrap({"match_all": wrap({})})
     test1 = typed_encode(value)
     expected = u'{"match_all":{' + quote(EXISTS_KEY) + u':1},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #14
0
 def encode_null():
     value = None
     typed_encode(value)
Пример #15
0
 def test_true(self):
     value = True
     test1 = typed_encode(value)
     expected = '{' + quote(BOOLEAN_KEY) + u':true}'
     self.assertEqual(test1, expected)
Пример #16
0
 def test_false(self):
     value = False
     test1 = typed_encode(value)
     expected = '{' + quote(BOOLEAN_KEY) + u':false}'
     self.assertEqual(test1, expected)
Пример #17
0
 def test_escaped_string_value(self):
     value = "\""
     test1 = typed_encode(value)
     expected = '{' + quote(STRING_KEY) + u':"\\""}'
     self.assertEqual(test1, expected)
Пример #18
0
 def test_empty_list(self):
     value = {"value": []}
     test1 = typed_encode(value)
     expected = u'{"value":{' + quote(EXISTS_KEY) + u':0},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #19
0
 def test_nested(self):
     value = {"a": {}, "b": {}}
     test1 = typed_encode(value)
     expected = u'{"a":{' + quote(EXISTS_KEY) + u':1},"b":{' + quote(
         EXISTS_KEY) + u':1},' + quote(EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #20
0
 def test_empty_list2(self):
     value = wrap({"a": [], "b": 1})
     test1 = typed_encode(value)
     expected = u'{"b":{' + quote(NUMBER_KEY) + u':1},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #21
0
 def test_empty_list_value(self):
     value = []
     test1 = typed_encode(value)
     expected = u'{' + quote(EXISTS_KEY) + ':0}'
     self.assertEqual(test1, expected)
Пример #22
0
 def test_list_i(self):
     value = {"value": [23, 42]}
     test1 = typed_encode(value)
     expected = u'{"value":{' + quote(INTEGER_KEY) + u':[23,42]},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #23
0
 def test_date(self):
     value = {"test": datetime.date(2013, 11, 13)}
     test1 = typed_encode(value)
     expected = u'{"test":{' + quote(NUMBER_KEY) + u':1384300800},' + quote(
         EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)
Пример #24
0
 def test_list_n(self):
     value = {"value": [23.5, 42]}
     test1 = typed_encode(value)
     expected = u'{"value":[{' + quote(NUMBER_KEY) + u':23.5},{' + quote(
         NUMBER_KEY) + u':42}],' + quote(EXISTS_KEY) + u':1}'
     self.assertEqual(test1, expected)