Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __init__(self, options):
"""Abstracts libmongocrypt's mongocrypt_t type.
:Parameters:
- `options`: A :class:`MongoCryptOptions`.
"""
self.__opts = options
self.__crypt = None
if not isinstance(options, MongoCryptOptions):
raise TypeError("options must be a MongoCryptOptions")
self.__crypt = lib.mongocrypt_new()
if self.__crypt == ffi.NULL:
raise MongoCryptError("unable to create new mongocrypt object")
try:
self.__init()
except Exception:
# Destroy the mongocrypt object on error.
self.close()
raise
def __raise_from_status(self):
status = lib.mongocrypt_status_new()
try:
lib.mongocrypt_kms_ctx_status(self.__ctx, status)
exc = MongoCryptError.from_status(status)
finally:
lib.mongocrypt_status_destroy(status)
raise exc
def __raise_from_status(self):
status = lib.mongocrypt_status_new()
try:
lib.mongocrypt_status(self.__crypt, status)
exc = MongoCryptError.from_status(status)
finally:
lib.mongocrypt_status_destroy(status)
raise exc
mongocryptd_cmd = ctx.mongo_operation()
result = callback.mark_command(ctx.database, mongocryptd_cmd)
ctx.add_mongo_operation_result(result)
ctx.complete_mongo_operation()
elif state == lib.MONGOCRYPT_CTX_NEED_MONGO_KEYS:
key_filter = ctx.mongo_operation()
for key in callback.fetch_keys(key_filter):
ctx.add_mongo_operation_result(key)
ctx.complete_mongo_operation()
elif state == lib.MONGOCRYPT_CTX_NEED_KMS:
for kms_ctx in ctx.kms_contexts():
with kms_ctx:
callback.kms_request(kms_ctx)
ctx.complete_kms()
else:
raise MongoCryptError('unknown state: %r' % (state,))