我们从Python开源项目中,提取了以下20个代码示例,用于说明如何使用bson.binary()。
def binarize_image(image): from PIL import Image binary = None try: im = Image.open(image) thumb = im.copy() thumb.thumbnail((260, 260)) image_buffer = StringIO() thumb.save(image_buffer, "JPEG") binary = Binary(image_buffer.getvalue(), BINARY_SUBTYPE) except IOError as e: logging.error("failed to binarize image: "+str(e)) return None # if image is a file object, rewind it finally: try: image.seek(0) except AttributeError: pass return binary
def dumps(obj, *args, **kwargs): """Helper function that wraps :func:`json.dumps`. Recursive function that handles all BSON types including :class:`~bson.binary.Binary` and :class:`~bson.code.Code`. :Parameters: - `json_options`: A :class:`JSONOptions` instance used to modify the encoding of MongoDB Extended JSON types. Defaults to :const:`DEFAULT_JSON_OPTIONS`. .. versionchanged:: 3.4 Accepts optional parameter `json_options`. See :class:`JSONOptions`. .. versionchanged:: 2.7 Preserves order when rendering SON, Timestamp, Code, Binary, and DBRef instances. """ json_options = kwargs.pop("json_options", DEFAULT_JSON_OPTIONS) return json.dumps(_json_convert(obj, json_options), *args, **kwargs)
def dumps(obj, *args, **kwargs): """Helper function that wraps :class:`json.dumps`. Recursive function that handles all BSON types including :class:`~bson.binary.Binary` and :class:`~bson.code.Code`. .. versionchanged:: 2.7 Preserves order when rendering SON, Timestamp, Code, Binary, and DBRef instances. (But not in Python 2.4.) """ if not json_lib: raise Exception("No json library available") return json.dumps(_json_convert(obj), *args, **kwargs)
def object_hook(dct, compile_re=True): if "$oid" in dct: return ObjectId(str(dct["$oid"])) if "$ref" in dct: return DBRef(dct["$ref"], dct["$id"], dct.get("$db", None)) if "$date" in dct: secs = float(dct["$date"]) / 1000.0 return EPOCH_AWARE + datetime.timedelta(seconds=secs) if "$regex" in dct: flags = 0 # PyMongo always adds $options but some other tools may not. for opt in dct.get("$options", ""): flags |= _RE_OPT_TABLE.get(opt, 0) if compile_re: return re.compile(dct["$regex"], flags) else: return Regex(dct["$regex"], flags) if "$minKey" in dct: return MinKey() if "$maxKey" in dct: return MaxKey() if "$binary" in dct: if isinstance(dct["$type"], int): dct["$type"] = "%02x" % dct["$type"] subtype = int(dct["$type"], 16) if subtype >= 0xffffff80: # Handle mongoexport values subtype = int(dct["$type"][6:], 16) return Binary(base64.b64decode(dct["$binary"].encode()), subtype) if "$code" in dct: return Code(dct["$code"], dct.get("$scope")) if bson.has_uuid() and "$uuid" in dct: return bson.uuid.UUID(dct["$uuid"]) return dct
def _upsertData(db, clct, data): '''Internal: Upsert json, text or binary data to db.clct. json and binary files need a little pre-processing by the calling function(s), which then call this internal function. ''' try: res = clct.replace_one( {'name': data['name']}, data, upsert=True) # Create it if it doesn't exist. except Exception as e: e.args += (' '.join([ 'Collection: %s;'%(clct.name), 'data: %s;'%(str(data)), 'type(data) should be dict: %s'%(type(data)), '%s collection validation rules:'%(clct.name), pformat(clct.options()) ]),) raise return ('%s to %s.%s, modified: %s, upserted: %d'%( data['name'], db.name, clct.name, res.modified_count, 1 if res.upserted_id else 0 )).strip()
def test_binary(self): bin_type_dict = {"bin": Binary(b"\x00\x01\x02\x03\x04")} md5_type_dict = { "md5": Binary(b" n7\x18\xaf\t/\xd1\xd1/\x80\xca\xe7q\xcc\xac", MD5_SUBTYPE) } custom_type_dict = {"custom": Binary(b"hello", USER_DEFINED_SUBTYPE)} self.round_trip(bin_type_dict) self.round_trip(md5_type_dict) self.round_trip(custom_type_dict) json_bin_dump = bsonjs_dumps(md5_type_dict) # Order should be $binary then $type. self.assertEqual( ('{ "md5" : { "$binary" : "IG43GK8JL9HRL4DK53HMrA==", ' '"$type" : "05" } }'), json_bin_dump) json_bin_dump = bsonjs_dumps(custom_type_dict) self.assertTrue('"$type" : "80"' in json_bin_dump) # Check loading invalid binary self.assertRaises(ValueError, bsonjs.loads, '{"a": {"$binary": "invalid", "$type": "80"}}')
def get_bitmask_per_elt(optimal_bits, threshold=0.0, exclude=[]): result = {} for key in optimal_bits.probability_matrix: if key not in exclude: probs = np.array(optimal_bits.probability_matrix[key]) mask = probs > threshold result[key] = mask return result # Convert an array of bytes to a binary string of 0s and 1s # The MSB comes first in every byte
def create_thumb(image_doc, photo_mount_path): filename = image_doc['PicturePath'] if filename: # try: filename = filename.replace(u'\\', '/') image_path = photo_mount_path + '/' + filename binary = binarize_image(image_path) else: binary = None print '%s: has no file name' % image_doc['PictureId'] return binary
def default(obj): # We preserve key order when rendering SON, DBRef, etc. as JSON by # returning a SON for those types instead of a dict. This works with # the "json" standard library in Python 2.6+ and with simplejson # 2.1.0+ in Python 2.5+, because those libraries iterate the SON # using PyIter_Next. Python 2.4 must use simplejson 2.0.9 or older, # and those versions of simplejson use the lower-level PyDict_Next, # which bypasses SON's order-preserving iteration, so we lose key # order in Python 2.4. if isinstance(obj, ObjectId): return {"$oid": str(obj)} if isinstance(obj, DBRef): return _json_convert(obj.as_doc()) if isinstance(obj, datetime.datetime): # TODO share this code w/ bson.py? if obj.utcoffset() is not None: obj = obj - obj.utcoffset() millis = int(calendar.timegm(obj.timetuple()) * 1000 + obj.microsecond / 1000) return {"$date": millis} if isinstance(obj, (RE_TYPE, Regex)): flags = "" if obj.flags & re.IGNORECASE: flags += "i" if obj.flags & re.LOCALE: flags += "l" if obj.flags & re.MULTILINE: flags += "m" if obj.flags & re.DOTALL: flags += "s" if obj.flags & re.UNICODE: flags += "u" if obj.flags & re.VERBOSE: flags += "x" if isinstance(obj.pattern, unicode): pattern = obj.pattern else: pattern = obj.pattern.decode('utf-8') return SON([("$regex", pattern), ("$options", flags)]) if isinstance(obj, MinKey): return {"$minKey": 1} if isinstance(obj, MaxKey): return {"$maxKey": 1} if isinstance(obj, Timestamp): return SON([("t", obj.time), ("i", obj.inc)]) if isinstance(obj, Code): return SON([('$code', str(obj)), ('$scope', obj.scope)]) if isinstance(obj, Binary): return SON([ ('$binary', base64.b64encode(obj).decode()), ('$type', "%02x" % obj.subtype)]) if PY3 and isinstance(obj, binary_type): return SON([ ('$binary', base64.b64encode(obj).decode()), ('$type', "00")]) if bson.has_uuid() and isinstance(obj, bson.uuid.UUID): return {"$uuid": obj.hex} raise TypeError("%r is not JSON serializable" % obj)
def upsertfile(dbName, clctName, fileName): '''atw.py upsertfile dbName clctName fileName Upsert (insert, or replace the existing document) the data in fileName to dbName.clctName. If clctName is "meta", fileName's contents must be valid json. Note that data is then stored as individual document/json objects found in fileName, and is not retrievable as the same file. clctName can be: - meta: Site-wide metadata. - In json format, conforming to meta's validation rules. - Name(s) of upserted document(s) is in the data. - See atwMeta.json for example. - Relationship of stored documents to fileName is not stored. (The name of the upserted document for any of the below is fileName, without any leading path.) - template: fileName contains one html template with template tags. - A jinja2 html template file. - content: fileName contains content for one page. - .md = treat as Markdown at page generation. - .rst = treat as reStructuredText at page generation. - .txt, .html, or any other suffix = treat as plain text. - .html should be only what goes inside a <body>, as it will be placed inside the template's <body> tag as-is. - Any content document has access to jinja2 meta variables. - code: Intended for plain text storage of program files. - bin: fileName contains binary data like an image or audio. - fileName suffix does not influence treatment; it's just bits. ''' db, client = _dbAndClient(dbName) clct = _collection(db, clctName) # Will raise if clctName is not of the body. baseName, prefix, suffix = _basenamePrefixSuffix(fileName) if suffix == 'pyc': return 'Ignore compiled python file %s.'%(fileName) if clctName == 'meta': return _upsertJson(dbName, clctName, fileName).strip() elif clctName == 'bin': with open(fileName, 'rb') as binFile: binData = Binary(binFile.read()) return _upsertData( db, clct, {'name': baseName, 'data': binData}).strip() else: with open(fileName, 'r') as dataFile: fileData = dataFile.read() return _upsertData( db, clct, {'name': baseName, 'data': fileData}).strip()