def test_small_long_encode_decode(self):
        encoded1 = BSON.encode({'x': 256})
        decoded1 = BSON.decode(encoded1)['x']
        self.assertEqual(256, decoded1)
        self.assertEqual(type(256), type(decoded1))

        encoded2 = BSON.encode({'x': 256L})
        decoded2 = BSON.decode(encoded2)['x']
        self.assertEqual(256L, decoded2)
        self.assertEqual(type(256L), type(decoded2))

        self.assertNotEqual(type(decoded1), type(decoded2))
    def test_small_long_encode_decode(self):
        encoded1 = BSON.encode({'x': 256})
        decoded1 = BSON.decode(encoded1)['x']
        self.assertEqual(256, decoded1)
        self.assertEqual(type(256), type(decoded1))

        encoded2 = BSON.encode({'x': 256L})
        decoded2 = BSON.decode(encoded2)['x']
        self.assertEqual(256L, decoded2)
        self.assertEqual(type(256L), type(decoded2))

        self.assertNotEqual(type(decoded1), type(decoded2))
    def test_small_long_encode_decode(self):
        encoded1 = BSON.encode({'x': 256})
        decoded1 = BSON.decode(encoded1)['x']
        self.assertEqual(256, decoded1)
        self.assertEqual(type(256), type(decoded1))

        encoded2 = BSON.encode({'x': Int64(256)})
        decoded2 = BSON.decode(encoded2)['x']
        expected = Int64(256)
        self.assertEqual(expected, decoded2)
        self.assertEqual(type(expected), type(decoded2))

        self.assertNotEqual(type(decoded1), type(decoded2))
    def test_small_long_encode_decode(self):
        encoded1 = BSON.encode({'x': 256})
        decoded1 = BSON.decode(encoded1)['x']
        self.assertEqual(256, decoded1)
        self.assertEqual(type(256), type(decoded1))

        encoded2 = BSON.encode({'x': Int64(256)})
        decoded2 = BSON.decode(encoded2)['x']
        expected = Int64(256)
        self.assertEqual(expected, decoded2)
        self.assertEqual(type(expected), type(decoded2))

        self.assertNotEqual(type(decoded1), type(decoded2))
Exemple #5
0
    def test_small_long_encode_decode(self):
        if PY3:
            raise SkipTest("No long type in Python 3.")

        encoded1 = BSON.encode({'x': 256})
        decoded1 = BSON.decode(encoded1)['x']
        self.assertEqual(256, decoded1)
        self.assertEqual(type(256), type(decoded1))

        encoded2 = BSON.encode({'x': 256L})
        decoded2 = BSON.decode(encoded2)['x']
        self.assertEqual(256L, decoded2)
        self.assertEqual(type(256L), type(decoded2))

        self.assertNotEqual(type(decoded1), type(decoded2))
    def test_small_long_encode_decode(self):
        if PY3:
            raise SkipTest("No long type in Python 3.")

        encoded1 = BSON.encode({'x': 256})
        decoded1 = BSON.decode(encoded1)['x']
        self.assertEqual(256, decoded1)
        self.assertEqual(type(256), type(decoded1))

        encoded2 = BSON.encode({'x': 256L})
        decoded2 = BSON.decode(encoded2)['x']
        self.assertEqual(256L, decoded2)
        self.assertEqual(type(256L), type(decoded2))

        self.assertNotEqual(type(decoded1), type(decoded2))
Exemple #7
0
def loadBsonObject(_hash):
    fpath = join(objectDir, _hash[:2], _hash[2:])
    bsonBytes = open(fpath, 'rb').read()
    if _hash != sha1(bsonBytes).hexdigest():
        raise IOError('sha1 diggest does not match for object file "%s"' %
                      fpath)
    return BSON.decode(bsonBytes)
Exemple #8
0
    def test_get_all_features_including_nlp(self):
        """
        Test `get_all_features` when NLP features should be included.
        """

        prediction_label = 'total_game_hours'
        nlp_features = True
        expected_features = {}
        features_list = list(self.review_doc.keys())
        for key in ['achievement_progress', 'nlp_features']:
            del features_list[features_list.index(key)]
            if key == 'nlp_features':
                (expected_features
                 .update(BSON.decode(self.review_doc['nlp_features'])))
            else:
                key_features = self.review_doc.get(key, {})
                for feature in key_features:
                    if (key_features[feature]
                        and key_features[feature] != self.nan):
                        expected_features[feature] = key_features[feature]
        for key in features_list:
            if not key in chain(LABELS, ['id_string']): continue
            if (not self.review_doc[key]
                or self.review_doc[key] == self.nan): continue
            expected_features[key] = self.review_doc[key]

        assert_equal(get_all_features(self.review_doc,
                                      prediction_label,
                                      nlp_features=nlp_features),
                     expected_features)
Exemple #9
0
def clean_message(body, msg):
    ## Sanity Checks
    rk = msg.delivery_info['routing_key']
    if not rk:
        raise Exception("Invalid routing-key '%s' (%s)" % (rk, body))

    #logger.debug("Event: %s" % rk)
    #logger.info( body )
    ## Try to decode event
    if isinstance(body, dict):
        event = body
    else:
        logger.debug(" + Decode JSON")
        try:
            if isinstance(body, str) or isinstance(body, unicode):
                try:
                    event = json.loads(body)
                    logger.debug("   + Ok")
                except Exception, err:
                    try:
                        logger.debug(" + Try hack for windows string")
                        # Hack for windows FS -_-
                        event = json.loads(body.replace('\\', '\\\\'))
                        logger.debug("   + Ok")
                    except Exception, err:
                        try:
                            logger.debug(" + Decode BSON")
                            bson = BSON(body)
                            event = bson.decode()
                            logger.debug("   + Ok")
                        except Exception, err:
                            raise Exception(err)
Exemple #10
0
def send(request):
	rid = random.randint(0, 0xFFFFFF).to_bytes(4, byteorder='big')
	data = BSON.encode(request)
	s = rid + data
	p = struct.pack('>BLH', 2, random.randint(0, 0xFFFFFFFF), len(s))
	sock.sendall(p + s)

	data = bytearray()
	exp_len = 7
	got_len = False
	while True:
		data += sock.recv(4096)
		if len(data) < exp_len:
			continue
		if not got_len:
			d, r, l = struct.unpack('>BLH', data[:7])
			assert d == 2
			data = data[7:]
			got_len = True
		if len(data) < l:
			continue
		assert l > 4
		assert len(data) == l
		got_rid = data[:4]
		assert got_rid == rid
		bs = BSON.decode(bytes(data[4:]), tz_aware=True)
		if 'error' in bs:
			raise RemoteException(bs['error'])
		if len(bs) == 1 and 'data' in bs:
			return bs['data']
		return bs
Exemple #11
0
 def deserialize(cls, fobj: IO[bytes]) -> Iterable[dict]:
     for line in fobj:
         # noinspection PyCallByClass,PyTypeChecker
         obj = BSON.decode(line.rstrip(b'\n'))
         # noinspection PyTypeChecker
         obj = unbyteify_attachments(obj)
         yield obj
Exemple #12
0
def test_task_xmr():
    t = TestTask(aggdef)
    socket = Socket()
    result = t.start_xmr(socket, full=False)
    assert_equal(result, {'job_id': 'foobar'})
    sent = BSON.decode(socket.sent[0])
    assert_equal(sent['$command'], 'xmapreduce')
Exemple #13
0
def read_gcfile(path):
    """
    Read a gc in_file and decode the encoded scene object.
    Uses the decoder object specified in the gazer.settings.

    Parameters
    ----------
    path : in_file like stream
        File that contains an encoded scene.

    Returns
    -------
    gazer.scene.Scene
        Scene object encoded in the in_file or None if no valid Scene
        was encoded.
    """
    logger.debug('Reading file as gcfile {}'.format(path))

    with open(path, 'rb') as in_file:
        try:
            contents = in_file.read()
            bson_obj = BSON(contents)
            wrapper = bson_obj.decode()
            from gazer.settings import DECODERS
            wrapper_type = wrapper['type']
            decoder = DECODERS.get(wrapper_type)
            if decoder is None:
                raise ValueError('Decoder {} not found'.format(wrapper_type))
            body = wrapper['data']
            if wrapper['compression'] == 'bz2':
                body = bz2.decompress(body)
            scene = decoder.scene_from_data(body)
            return scene
        except RuntimeError:
            logger.exception('Failed to read file.')
Exemple #14
0
	def work(self, body, msg, *args, **kargs):
		## Sanity Checks
		rk = msg.delivery_info['routing_key']
		if not rk:
			raise Exception("Invalid routing-key '%s' (%s)" % (rk, body))
		
		#self.logger.info( body ) 	
		## Try to decode event
		if isinstance(body, dict):
			event = body
		else:
			self.logger.debug(" + Decode JSON")
			try:
				if isinstance(body, str) or isinstance(body, unicode):
					try:
						event = json.loads(body)
						self.logger.debug("   + Ok")
					except Exception, err:
						try:
							self.logger.debug(" + Try hack for windows string")
							# Hack for windows FS -_-
							event = json.loads(body.replace('\\', '\\\\'))
							self.logger.debug("   + Ok")
						except Exception, err :
							try:
								self.logger.debug(" + Decode BSON")
								bson = BSON (body)
								event = bson.decode()
								self.logger.debug("   + Ok")
							except Exception, err:
								raise Exception(err)
Exemple #15
0
 def __process_bson_control_message(self, data):
     data_json = BSON.decode(BSON(data), codec_options=CodecOptions(uuid_representation=STANDARD))
     print data_json
     if data_json.get('ping', None):
         t = data_json.get('ping').get('timestamp')
         info('Ping request with timestamp %d' % t)
         self.send(AgentServerCommandPong())
     elif data_json.get('exc_cmd', None):
         t = data_json.get('exc_cmd').get('cmdline')
         info('exc_cmd request with timestamp %s' % t)
         self.send(AgentServerCommandExc())
     elif data_json.get('watch-rule', None):
         self.control_monitors(data_json.get('watch-rule').get('str', ''))
     elif data_json.get('sensor-plugin-start', None):
         plugin_id = data_json.get('sensor-plugin-start').get('plugin_id', None)
         if plugin_id is not None:
             self.watchdog_start_process(int(plugin_id))
     elif data_json.get('sensor-plugin-stop', None):
         plugin_id = data_json.get('sensor-plugin-stop').get('plugin_id', None)
         if plugin_id is not None:
             self.watchdog_stop_process(int(plugin_id))
     elif data_json.get('sensor-plugin-enable'):
         plugin_id = data_json.get('sensor-plugin-enable').get('plugin_id', None)
         if plugin_id is not None:
             self.watchdog_enable_process(int(plugin_id))
     elif data_json.get('sensor-plugin-disable'):
         plugin_id = data_json.get('sensor-plugin-disable').get('plugin_id', None)
         if plugin_id is not None:
             self.watchdog_disable_process(int(plugin_id))
     else:
         warning("Unknown BSON command: '%s'" % str(data_json))
Exemple #16
0
def clean_message(body, msg):
    ## Sanity Checks
    rk = msg.delivery_info["routing_key"]
    if not rk:
        raise Exception("Invalid routing-key '%s' (%s)" % (rk, body))

        # logger.debug("Event: %s" % rk)
        # logger.info( body )
        ## Try to decode event
    if isinstance(body, dict):
        event = body
    else:
        logger.debug(" + Decode JSON")
        try:
            if isinstance(body, str) or isinstance(body, unicode):
                try:
                    event = json.loads(body)
                    logger.debug("   + Ok")
                except Exception, err:
                    try:
                        logger.debug(" + Try hack for windows string")
                        # Hack for windows FS -_-
                        event = json.loads(body.replace("\\", "\\\\"))
                        logger.debug("   + Ok")
                    except Exception, err:
                        try:
                            logger.debug(" + Decode BSON")
                            bson = BSON(body)
                            event = bson.decode()
                            logger.debug("   + Ok")
                        except Exception, err:
                            raise Exception(err)
        def _get_profiles(profiles):
            """
            Out of incoming string create a bson string and decode it
            """

            bson_string = BSON(profiles, encoding='utf8')
            return bson_string.decode()
Exemple #18
0
def read_beacon_payload(beacon_bytes):
    """Returns a BeaconPayload namedtuple representing the given beacon bytes.

    Decrypts the inner beacon data if necessary.

    :param beacon_bytes: beacon payload (bytes).
    :return: BeaconPayload namedtuple
    """
    if len(beacon_bytes) < BEACON_HEADER_LENGTH_V1:
        raise InvalidBeaconingPacket(
            "Beaconing packet must be at least %d bytes."
            % BEACON_HEADER_LENGTH_V1
        )
    header = beacon_bytes[:BEACON_HEADER_LENGTH_V1]
    version, beacon_type_code, expected_payload_length = struct.unpack(
        BEACON_HEADER_FORMAT_V1, header
    )
    actual_payload_length = len(beacon_bytes) - BEACON_HEADER_LENGTH_V1
    if len(beacon_bytes) - BEACON_HEADER_LENGTH_V1 < expected_payload_length:
        raise InvalidBeaconingPacket(
            "Invalid payload length: expected %d bytes, got %d bytes."
            % (expected_payload_length, actual_payload_length)
        )
    payload_start = BEACON_HEADER_LENGTH_V1
    payload_end = BEACON_HEADER_LENGTH_V1 + expected_payload_length
    payload_bytes = beacon_bytes[payload_start:payload_end]
    payload = None
    if version == 1:
        if len(payload_bytes) == 0:
            # No encrypted inner payload; nothing to do.
            pass
        else:
            try:
                decrypted_data = fernet_decrypt_psk(
                    payload_bytes, ttl=60, raw=True
                )
            except InvalidToken:
                raise InvalidBeaconingPacket(
                    "Failed to decrypt inner payload: check MAAS secret key."
                )
            try:
                decompressed_data = decompress(decrypted_data)
            except OSError:
                raise InvalidBeaconingPacket(
                    "Failed to decompress inner payload: %r" % decrypted_data
                )
            try:
                # Replace the data in the dictionary with its decrypted form.
                payload = BSON.decode(decompressed_data)
            except BSONError:
                raise InvalidBeaconingPacket(
                    "Inner beacon payload is not BSON: %r" % decompressed_data
                )
    else:
        raise InvalidBeaconingPacket("Unknown beacon version: %d" % version)
    beacon_type_code = payload["type"] if payload else beacon_type_code
    return BeaconPayload(
        beacon_bytes, version, BEACON_TYPE_VALUES[beacon_type_code], payload
    )
Exemple #19
0
    def get_details(self):
        url = self.interpolate_url()

        resp = self.api_client.get(url, op='details')

        if resp.status_code == 200:
            detail_config = BSON.decode(resp.content)
            return detail_config
 def read_version(self, library_name, symbol, as_of=None):
     #TODO handle as_of
     version_path = self._make_version_path(library_name, symbol)
     try:
         encoded_version_doc = self.client.get_object(Bucket=self.bucket,
                                                      Key=version_path)
     except self.client.exceptions.NoSuchKey:
         return None
     return BSON.decode(encoded_version_doc['Body'].read())
Exemple #21
0
def test_task_mr():
    t = TestTask(aggdef)
    socket = Socket()
    Collection = namedtuple('Collection', 'name')
    result = t.start_mr(socket, full=False, collection=Collection('zagg.foo'))
    assert_equal(result, {'job_id': 'foobar'})
    sent = BSON.decode(socket.sent[0])
    assert_equal(sent['$command'], 'mapreduce')
    assert_equal(sent['output_type'], 'reduce')
    assert_equal(sent['output_name'], 'zagg.foo')
Exemple #22
0
    def from_bson(cls, bson):
        data = BSON.decode(bson)
        if not cls._valid(data):
            raise Exception('invalid message')

        headers = data['headers']
        body = data['body']
        method = data['method']
        path = data['path']
        return cls(headers, body, path, method)
Exemple #23
0
 def scene_from_data(self, data):
     bson_data = BSON(data)
     data_dict = bson_data.decode()
     decoded_array = self._decode_array(data_dict[u'lookup_table'])
     lut = ArrayLookupTable(decoded_array)
     frames = [self._decode_array(value) for key, value
               in
               sorted(data_dict['frames'].items(), key=lambda x: int(x[0]))]
     image_manager = ArrayStackImageManager(frames)
     scene = ImageStackScene(image_manager, lut)
     return scene
Exemple #24
0
 def __process_bson_control_message(self, data):
     data_json = BSON.decode(
         BSON(data),
         codec_options=CodecOptions(uuid_representation=STANDARD))
     #print data_json
     if data_json.get('exc_cmd', None):
         self.__process_exc_cmd(data_json)
     elif data_json.get('fileupload', None):
         self.__process_file_upload(data_json)
     else:
         warning("Unknown BSON command: '%s'" % str(data_json))
Exemple #25
0
def test_task_basic():
    t = TestTask(aggdef)
    socket = Socket()
    def func():
        return 'asdf'
    result = t.start_basic_job(socket, func)
    assert_equal(result, {'job_id': 'foobar'})
    sent = BSON.decode(socket.sent[0])
    assert_equal(sent['$command'], 'basic')
    assert_equal(sent['func_name'], 'func')
    assert "return 'asdf'" in sent['func_text']
    def test_encode_decode_numpy_data(self):
        data = {'array': np.array([1, 2, 3])}

        type_registry = TypeRegistry([NumpyArrayCodec()])
        codec_options = CodecOptions(type_registry=type_registry)
        encoded = BSON.encode(data, codec_options=codec_options)
        decoded = BSON.decode(encoded, codec_options=codec_options)

        self.assertIsInstance(decoded, type(data))
        self.assertIn('array', decoded)
        np.testing.assert_array_equal(data['array'], decoded['array'])
Exemple #27
0
    def kafka_take_out(self):
        """
        连接kafka获取数据 将数据装换成字符串
        :return:
        """

        for each in self.consumer:
            # try:
                kafa_str = BSON.decode(each.value)
                if kafa_str:
                    self.kafka_data_processing(kafa_str)
Exemple #28
0
 def headlineform( self, k, b, x ):
     """Return the headline form (JSON) for a given object.
     The default implementation just returns all the top-level objects.
     
     There are three arguments, the object [mongo] id,
     the BSON representation, and the MongoEngine object
     """
     d = {}
     for k, v in BSON.decode( b ).items():
         if k[0] != '_':
             d[k] = v
     return d
    def onDataReceived(self, interest, data):
        # now we have to retrieve the key
        dataContent = str(data.getContent())
        dataContent = BSON(dataContent)
        dataDict = dataContent.decode()

        allData = dataDict['results']
        totalCount = dataDict['count']
        dataCount = len(allData)
        skipPos = dataDict['skip']
        print '---------'
        print 'Got {}/{} result(s), starting at {}'.format(dataCount, totalCount, skipPos)

        asyncio.async(self.collectResults(allData))
Exemple #30
0
def test_task_xmr_more():
    t = TestTask(aggdef)
    socket = Socket()
    def map_func():
        pass
    def reduce_func():
        pass
    def finalize_func():
        pass
    result = t.start_xmr(socket, full=True, map=map_func, reduce=reduce_func, finalize=finalize_func)
    assert_equal(result, {'job_id': 'foobar'})
    sent = BSON.decode(socket.sent[0])
    assert_equal(sent['$command'], 'xmapreduce')
    assert_equal(sent['output_type'], 'replace')
    assert_equal(sent['output_name'], 'zagg.result')
Exemple #31
0
def get_geo():

    #to acces the data first we need to get the colletion in where the files are stored
    col = db.fs.files.find_one()

    if col == None:
        print("GeoJSON is still loading please wait and reselect year")
        data = {}
    else:
    # once we have the object storing the file information, we can get the data and read it
        bsdata = fs.get(col["_id"]).read()

        # since the data was encode, we need to decode it back
        data = BSON.decode(bsdata)

    return jsonify(data)
Exemple #32
0
        def post(self):
            """
            Recieve Snapshot and either pass the result to queue or publish function
            """
            data = BSON.decode(request.get_data())
            user_id = data[consts.USER_ID]
            date = datetime.fromtimestamp(int(data[consts.DATETIME]) / 1000)
            context = Context(base_save_path, user_id, date)

            dump_binary_data(data, context)

            if queue is not None:
                queue.publish(consts.PARSER_INPUT_EXCHANGE_NAME,
                              json.dumps(data))
            else:
                publish(json.dumps(data))
Exemple #33
0
def test_task_mr_more():
    t = TestTask(aggdef)
    socket = Socket()
    Collection = namedtuple('Collection', 'name')
    def map_func():
        pass
    def reduce_func():
        pass
    def finalize_func():
        pass
    result = t.start_mr(socket, full=True, collection=Collection('zagg.foo'),
                        map=map_func, reduce=reduce_func, finalize=finalize_func)
    assert_equal(result, {'job_id': 'foobar'})
    sent = BSON.decode(socket.sent[0])
    assert_equal(sent['$command'], 'mapreduce')
    assert_equal(sent['output_type'], 'replace')
    assert_equal(sent['output_name'], 'zagg.foo')
    def messages(self):
        """
        Iterate over all available messages.

        Yields:
            object: The next decoded message.
        """
        doc_start = 0

        while doc_start + 4 < len(self._buffer):
            # http://bsonspec.org/spec.html
            (doc_len, ) = struct.unpack(b'<l', self._buffer[doc_start:doc_start + 4])
            if doc_start + doc_len > len(self._buffer):
                break

            doc = BSON(self._buffer[doc_start:doc_start + doc_len])
            yield doc.decode()

            doc_start += doc_len

        self._buffer = self._buffer[doc_start:]
Exemple #35
0
    def control_loop(self, stop_event):
        while not stop_event.is_set():
            try:
                data = self.recv_line()
                if data is not None:
                    if self.bson_protocol:
                        data_json = BSON.decode(BSON(data), codec_options=CodecOptions(uuid_representation=STANDARD))
                        if data_json.get('ping', None):
                            t = data_json.get('ping').get('timestamp')
                            self.send(AgentServerCommandPong(timestamp=long(t)))
                    elif data.startswith('ping'):
                        self.send(AgentServerCommandPong())
                else:
                    self.close()
            except Exception as e:
                if not stop_event.is_set():
                    import traceback
                    error('Unexpected exception receiving from IDM server: {0}' + str(e))

            time.sleep(1)

        info('Ends IDM control message thread..')
        self.control_thread_running = False
Exemple #36
0
	def process(self, data):
		rid = data[:4]
		bs = BSON.decode(bytes(data[4:]), tz_aware=True)
		try:
			value = self.process_bson(bs)
		except Exception as e:
			import traceback
			traceback.print_exc()
			value = None
			error = 'Exception occured: {} {}'.format(str(type(e)), str(e))
		else:
			error = None
		response = {}
		if isinstance(value, (dict, OrderedDict)):
			response = value
		else:
			if value != None:
				response = { 'data': value }
			if error != None:
				response = { 'error': error }

		if len(response):
			bv = BSON.encode(response)
			self.sendfun(rid + bv)
Exemple #37
0
    def __process_connection_message_bson(self, response):
        message_ok = False
        try:
            bson_msg = BSON.decode(BSON(response), codec_options=CodecOptions(uuid_representation=STANDARD))
            print bson_msg
            if bson_msg.get('ok') is not None:
                if bson_msg['ok'].get('id', None):
                    message_ok = True
                    print bson_msg['ok'].get('id', None)
            elif bson_msg.get('noack') is not None:
                your_sensor_id = bson_msg['noack'].get('your_sensor_id', None)
                if your_sensor_id is not None:
                    self.__sensor_id_change_request_received = True
                    debug('UUID change request from :%s ' % self.__nameServer)
                    lock_uuid.acquire()
                    self.__write_new_system_id(str(your_sensor_id))
                    self.__set_sensor_id(str(your_sensor_id))
                    lock_uuid.release()
                else:
                    error('Bad response from server')
        except InvalidBSON:
            error('Bad response from server {0}'.format(response))

        return message_ok
Exemple #38
0
def test_config(upload_fixture):
    upload_sample(_SAMPLE_PATH, _HOST, _PORT)
    data = BSON.decode(upload_fixture.last_request.body)
    assert 'pose' in data and 'feelings' in data and 'depthImage' not in data
Exemple #39
0
 def toJsonBody(self):
     return bson.decode(self.Body)
Exemple #40
0
#!/usr/bin/env python3

import sys
from os.path import splitext

import json
from bson import BSON

for fname_json in sys.argv[1:]:
    fname, ext = splitext(fname_json)
    bson_s = open(fname_json, 'rb').read()
    data = BSON.decode(bson_s)
    open(fname + '.json', 'w').write(json.dumps(data))



    def test_unicode_decode_error_handler(self):
        enc = BSON.encode({"keystr": "foobar"})

        # Test handling of bad key value.
        invalid_key = BSON(enc[:7] + b'\xe9' + enc[8:])
        replaced_key = b'ke\xe9str'.decode('utf-8', 'replace')
        ignored_key = b'ke\xe9str'.decode('utf-8', 'ignore')

        dec = BSON.decode(invalid_key,
                          CodecOptions(unicode_decode_error_handler="replace"))
        self.assertEqual(dec, {replaced_key: u"foobar"})

        dec = BSON.decode(invalid_key,
                          CodecOptions(unicode_decode_error_handler="ignore"))
        self.assertEqual(dec, {ignored_key: u"foobar"})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_key,
                          CodecOptions(unicode_decode_error_handler="strict"))
        self.assertRaises(InvalidBSON, BSON.decode, invalid_key,
                          CodecOptions())
        self.assertRaises(InvalidBSON, BSON.decode, invalid_key)

        # Test handing of bad string value.
        invalid_val = BSON(enc[:18] + b'\xe9' + enc[19:])
        replaced_val = b'fo\xe9bar'.decode('utf-8', 'replace')
        ignored_val = b'fo\xe9bar'.decode('utf-8', 'ignore')

        dec = BSON.decode(invalid_val,
                          CodecOptions(unicode_decode_error_handler="replace"))
        self.assertEqual(dec, {u"keystr": replaced_val})

        dec = BSON.decode(invalid_val,
                          CodecOptions(unicode_decode_error_handler="ignore"))
        self.assertEqual(dec, {u"keystr": ignored_val})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_val,
                          CodecOptions(unicode_decode_error_handler="strict"))
        self.assertRaises(InvalidBSON, BSON.decode, invalid_val,
                          CodecOptions())
        self.assertRaises(InvalidBSON, BSON.decode, invalid_val)

        # Test handing bad key + bad value.
        invalid_both = BSON(enc[:7] + b'\xe9' + enc[8:18] + b'\xe9' + enc[19:])

        dec = BSON.decode(invalid_both,
                          CodecOptions(unicode_decode_error_handler="replace"))
        self.assertEqual(dec, {replaced_key: replaced_val})

        dec = BSON.decode(invalid_both,
                          CodecOptions(unicode_decode_error_handler="ignore"))
        self.assertEqual(dec, {ignored_key: ignored_val})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_both,
                          CodecOptions(unicode_decode_error_handler="strict"))
        self.assertRaises(InvalidBSON, BSON.decode, invalid_both,
                          CodecOptions())
        self.assertRaises(InvalidBSON, BSON.decode, invalid_both)

        # Test handling bad error mode.
        dec = BSON.decode(enc,
                          CodecOptions(unicode_decode_error_handler="junk"))
        self.assertEqual(dec, {"keystr": "foobar"})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_both,
                          CodecOptions(unicode_decode_error_handler="junk"))
Exemple #42
0
 def unmarshal(cls, bson: bytes):
     document = BSON.decode(bson)
     return cls(payload=document['payload'],
                capsule=document['capsule'],
                collection=document['collection'],
                owner_anid=document['owner_anid'])
    # loads() method returns a Python dict
    print("json_docs TYPE:", type(json_docs))

    # return a list of all of the JSON document keys
    print("MongoDB collections:", list(json_docs.keys()))

except ValueError as error:
    print("json.loads() ValueError for BSON object:", error)
    quit()

for key, val in json_docs.items():
    for i, doc in enumerate(json_docs[key]):
        try:
            # print the original JSON document
            print("\ndoc:", doc)

            # encode the document using the BSON library
            data = BSON.encode(doc)
            print("BSON encoded data:", type(data))

            # print the result of the BSON encoding
            print("data:", data)

            # decode the BSON document back to a Python dict object
            decode_doc = BSON.decode(data)
            print("decode_doc:", decode_doc)

        except Exception as error:
            # catch any BSON encoding or decoding errors
            print("enumerate() JSON documents ERROR:", error)
Exemple #44
0
def now():
	return BSON.decode(BSON.encode({'t': datetime.datetime.now(datetime.timezone.utc)}), tz_aware=True)['t']
Exemple #45
0
def loadBsonObject(_hash):
    fpath = join(objectDir, _hash[:2], _hash[2:])
    bsonBytes = open(fpath, 'rb').read()
    if _hash != sha1(bsonBytes).hexdigest():
        raise IOError('sha1 diggest does not match for object file "%s"'%fpath)
    return BSON.decode(bsonBytes)
Exemple #46
0
import pybonjour
import zmq
import time
from bson import BSON

context = zmq.Context()
socket = context.socket(zmq.REP)
port = socket.bind_to_random_port("tcp://*")
print "Bound to port %d" % port

sdRef = pybonjour.DNSServiceRegister(name = 'Responder',
                                     regtype = '_00._tcp',
                                     port = port)

try:
    try:
        while True:
            message = BSON.decode(BSON(socket.recv()))
            print "Received request %s" % message
            time.sleep (1) # Do some 'work'
            data = {
                'msg': message['msg'][::-1]
            }
            socket.send(BSON.encode(data))
    except KeyboardInterrupt:
        pass
finally:
    sdRef.close()
Exemple #47
0
def test_upload(upload_all_fixture):
    upload_sample(_SAMPLE_PATH, _HOST, _PORT)
    data = BSON.decode(upload_all_fixture.last_request.body)
    with open(_SNAPSHOT_PATH, 'r') as f:
        snapshot = json.load(f)
    assert snapshot == data
Exemple #48
0
 def read_file(path):
     serial = file_utils.load(path)
     serial = BSON(serial)
     serial = BSON.decode(serial)
     srn = SystemResourceNames.deserialize(serial)
     return srn
Exemple #49
0
def decode_bson(data):
    return BSON.decode(BSON(data))
Exemple #50
0
#!/usr/bin/env python3

import sys
from os.path import splitext

import json
from bson import BSON

for fname_json in sys.argv[1:]:
    fname, ext = splitext(fname_json)
    bson_s = open(fname_json, 'rb').read()
    data = BSON.decode(bson_s)
    open(fname + '.json', 'w').write(json.dumps(data))
    def test_unicode_decode_error_handler(self):
        enc = BSON.encode({"keystr": "foobar"})

        # Test handling of bad key value.
        invalid_key = BSON(enc[:7] + b'\xe9' + enc[8:])
        replaced_key = b'ke\xef\xbf\xbdstr'.decode('utf-8')

        dec = BSON.decode(invalid_key, CodecOptions(
            unicode_decode_error_handler="replace"))
        self.assertEqual(dec, {replaced_key: u("foobar")})

        dec = BSON.decode(invalid_key, CodecOptions(
            unicode_decode_error_handler="ignore"))
        self.assertEqual(dec, {"kestr": "foobar"})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_key, CodecOptions(
            unicode_decode_error_handler="strict"))
        self.assertRaises(InvalidBSON, BSON.decode, invalid_key,
                          CodecOptions())
        self.assertRaises(InvalidBSON, BSON.decode, invalid_key)

        # Test handing of bad string value.
        invalid_val = BSON(enc[:18] + b'\xe9' + enc[19:])
        replaced_val = b'fo\xef\xbf\xbdbar'.decode('utf-8')

        dec = BSON.decode(invalid_val, CodecOptions(
            unicode_decode_error_handler="replace"))
        self.assertEqual(dec, {"keystr": replaced_val})

        dec = BSON.decode(invalid_val, CodecOptions(
            unicode_decode_error_handler="ignore"))
        self.assertEqual(dec, {"keystr": "fobar"})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_val, CodecOptions(
            unicode_decode_error_handler="strict"))
        self.assertRaises(InvalidBSON, BSON.decode, invalid_val,
                          CodecOptions())
        self.assertRaises(InvalidBSON, BSON.decode, invalid_val)

        # Test handing bad key + bad value.
        invalid_both = BSON(
            enc[:7] + b'\xe9' + enc[8:18] + b'\xe9' + enc[19:])

        dec = BSON.decode(invalid_both, CodecOptions(
            unicode_decode_error_handler="replace"))
        self.assertEqual(dec, {replaced_key: replaced_val})

        dec = BSON.decode(invalid_both, CodecOptions(
            unicode_decode_error_handler="ignore"))
        self.assertEqual(dec, {"kestr": "fobar"})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_both, CodecOptions(
            unicode_decode_error_handler="strict"))
        self.assertRaises(InvalidBSON, BSON.decode, invalid_both,
                          CodecOptions())
        self.assertRaises(InvalidBSON, BSON.decode, invalid_both)

        # Test handling bad error mode.
        dec = BSON.decode(enc, CodecOptions(
            unicode_decode_error_handler="junk"))
        self.assertEqual(dec, {"keystr": "foobar"})

        self.assertRaises(InvalidBSON, BSON.decode, invalid_both,
                          CodecOptions(unicode_decode_error_handler="junk"))
Exemple #52
0
    def work(self, body, msg, *args, **kargs):
        ## Sanity Checks
        rk = msg.delivery_info['routing_key']
        if not rk:
            raise Exception("Invalid routing-key '%s' (%s)" % (rk, body))

        #self.logger.info( body )
        ## Try to decode event
        if isinstance(body, dict):
            event = body
            # force utf8 only if python version is 2
            if PYVER < '3':
                event = forceUTF8(event)
        else:
            self.logger.debug(" + Decode JSON")
            try:
                if isinstance(body, basestring):
                    try:
                        event = loads(body)
                        self.logger.debug("   + Ok")
                    except Exception as err:
                        try:
                            self.logger.debug(" + Try hack for windows string")
                            # Hack for windows FS -_-
                            event = loads(body.replace('\\', '\\\\'))
                            self.logger.debug("   + Ok")
                        except Exception as err:
                            try:
                                self.logger.debug(" + Decode BSON")
                                bson = BSON(body)
                                event = bson.decode()
                                self.logger.debug("   + Ok")
                            except Exception as err:
                                raise Exception(err)

            except Exception as err:
                self.logger.error("   + Failed (%s)" % err)
                self.logger.debug("RK: '%s', Body:" % rk)
                self.logger.debug(body)
                raise Exception("Impossible to parse event '%s'" % rk)

        event['rk'] = ensure_unicode(rk)

        if "resource" in event:
            if not isinstance(event['resource'], basestring):
                event['resource'] = ''
            else:
                event['resource'] = ensure_unicode(event['resource'])
            if not event['resource']:
                del event['resource']

        # Clean tags field
        event['tags'] = event.get('tags', [])

        tags = event['tags']

        if isinstance(tags, basestring) and tags != "":
            event['tags'] = [event['tags']]

        elif not isinstance(tags, list):
            event['tags'] = []

        event["timestamp"] = int(event.get("timestamp", time()))

        event["state"] = event.get("state", 0)
        event["state_type"] = event.get("state_type", 1)
        event["event_type"] = event.get("event_type", "check")

        default_status = 0 if not event["state"] else 1
        event["status"] = event.get("status", default_status)

        event['output'] = event.get('output', '')

        # Get perfdata
        perf_data = event.get('perf_data')
        perf_data_array = event.get('perf_data_array')

        if perf_data_array is None:
            perf_data_array = []

        # Parse perfdata
        if perf_data:
            self.logger.debug(u' + perf_data: {0}'.format(perf_data))

            try:
                perf_data_array += PerfDataParser(perf_data).perf_data_array

            except Exception as err:
                self.logger.error(
                    "Impossible to parse perfdata from: {0} ({1})".format(
                        event, err
                    )
                )

            event['perf_data_array'] = perf_data_array

        return event
Exemple #53
0
                                          callBack = browse_callback)

try:
    try:
        while True:
            ready = select.select([browse_sdRef], [], [])
            if browse_sdRef in ready[0]:
                pybonjour.DNSServiceProcessResult(browse_sdRef)
            
            if "Responder" in services and not con:
                print "Connecting to server %s:%d" % (services['Responder']['host'], services['Responder']['port'])
                socket = context.socket(zmq.REQ)
                socket.connect ("tcp://%s:%d" % (services['Responder']['host'], services['Responder']['port']))
                con = True
                
                for request in range (1,10):
                    print "Sending request ", request,"..."
                    data = {
                        'msg': 'Hello',
                    }
                    socket.send (BSON.encode(data))
                    
                    # Get the reply.
                    message = BSON(socket.recv())
                    print "Received reply ", request, BSON.decode(message)
                break;
            
    except KeyboardInterrupt:
        pass
finally:
    browse_sdRef.close()
 def read_file(path):
     serial = file_utils.load(path)
     serial = BSON(serial)
     serial = BSON.decode(serial)
     srn = SystemResourceNames.deserialize(serial)
     return srn
Exemple #55
0
    def work(self, body, msg, *args, **kargs):
        ## Sanity Checks
        rk = msg.delivery_info['routing_key']
        if not rk:
            raise Exception("Invalid routing-key '%s' (%s)" % (rk, body))

        #self.logger.info( body )
        ## Try to decode event
        if isinstance(body, dict):
            event = body
            # force utf8 only if python version is 2
            if PYVER < '3':
                event = forceUTF8(event)
        else:
            self.logger.debug(" + Decode JSON")
            try:
                if isinstance(body, basestring):
                    try:
                        event = loads(body)
                        self.logger.debug("   + Ok")
                    except Exception as err:
                        try:
                            self.logger.debug(" + Try hack for windows string")
                            # Hack for windows FS -_-
                            event = loads(body.replace('\\', '\\\\'))
                            self.logger.debug("   + Ok")
                        except Exception as err:
                            try:
                                self.logger.debug(" + Decode BSON")
                                bson = BSON(body)
                                event = bson.decode()
                                self.logger.debug("   + Ok")
                            except Exception as err:
                                raise Exception(err)

            except Exception as err:
                self.logger.error("   + Failed (%s)" % err)
                self.logger.debug("RK: '%s', Body:" % rk)
                self.logger.debug(body)
                raise Exception("Impossible to parse event '%s'" % rk)

        event['rk'] = ensure_unicode(rk)

        if event.get("resource", ''):
            if not isinstance(event['resource'], basestring):
                event['resource'] = ''
            else:
                event['resource'] = ensure_unicode(event['resource'])
            if not event['resource']:
                del event['resource']

        # Clean tags field
        event['tags'] = event.get('tags', [])

        tags = event['tags']

        if isinstance(tags, basestring) and tags != "":
            event['tags'] = [event['tags']]

        elif not isinstance(tags, list):
            event['tags'] = []

        event['timestamp'] = int(event.get('timestamp', time()))

        try:
            event['state'] = int(event.get('state', 0))
        except (ValueError, TypeError, AttributeError):
            self.logger.error(
                'state convertion failed: must be an int ({})'.format(event))
            event['state'] = 0

        event['state_type'] = event.get('state_type', 1)
        event['event_type'] = event.get('event_type', 'check')

        default_status = 0 if not event["state"] else 1
        event['status'] = event.get("status", default_status)

        event['output'] = event.get('output', '')

        # Get perfdata
        perf_data = event.get('perf_data')
        perf_data_array = event.get('perf_data_array')

        if perf_data_array is None:
            perf_data_array = []

        # Parse perfdata
        if perf_data:
            self.logger.debug(u' + perf_data: {0}'.format(perf_data))

            try:
                perf_data_array += PerfDataParser(perf_data).perf_data_array

            except Exception as err:
                self.logger.error(
                    "Impossible to parse perfdata from: {0} ({1})".format(
                        event, err))

            event['perf_data_array'] = perf_data_array

        return event
def from_binary(binary):

    return DataSet.fromdict(BSON.decode(binary))
Exemple #57
0
def test_bson() -> None:
    doc = {"foo": "bar", "buzz": True}
    data = BSON.encode(doc)
    assert BSON.decode(data) == doc
Exemple #58
0
def decode_bson(data):
    return BSON.decode(BSON(data))