def get_digest_result(self): """Retrieving the digest of a particular ledger.""" try: data = get_requested_data() digest = get_digest_result(data["ledger_name"]) return digest except Exception as e: logger.exception('Unable to get a ledger digest!') return fail_response('Unable to delete the ledger. Please try again.', HTTPStatus.UNPROCESSABLE_ENTITY)
def describe_ledger(ledger_name): """ Returns information about a ledger, including its state and when it was created. """ try: logger.info("Let's describe ledger...{}".format(ledger_name)) ledger = qldb.client().describe_ledger(Name=ledger_name) logger.info('Success. describe ledger...{}.'.format(ledger)) return ledger except Exception as e: logger.exception('Unable to list ledgers!') return fail_response('Unable to list ledgers!. Please try again.', HTTPStatus.UNPROCESSABLE_ENTITY)
def create_ledger(ledger_name): """Create a ledger and wait for it to be active.""" try: DdlServices.do_create_ledger(ledger_name) wait_for_active(ledger_name) DdlServices.reset_ledgers() return success_response('Ledger is active and ready to use.', HTTPStatus.CREATED) except Exception as e: logger.exception('Unable to create the ledger!') return fail_response( 'Unable to create the ledger. error: {}. Please try again.'. format(e), HTTPStatus.UNPROCESSABLE_ENTITY)
def delete_ledger(ledger_name): """Delete a ledger.""" try: set_deletion_protection(ledger_name, False) DdlServices.do_delete_ledger(ledger_name) wait_for_deleted(ledger_name) DdlServices.reset_ledgers() return success_response('The ledger is successfully deleted.', HTTPStatus.ACCEPTED) except Exception as e: logger.exception('Unable to delete the ledger.') return fail_response( 'Unable to delete the ledger. Please try again.', HTTPStatus.UNPROCESSABLE_ENTITY)
def drop_table(ledger_name=None, table_name=None): """Create a Table""" try: with qldb.session(ledger_name) as session: session.execute_lambda( lambda x: DdlServices.do_drop_table(x, table_name), lambda retry_attempt: logger.info( 'Retrying due to OCC conflict...')) logger.info('Table dropped successfully.') return success_response('Table dropped successfully.', HTTPStatus.CREATED) except Exception: logger.exception('Error creating table.') return fail_response( 'Unable to create the table. Please try again.', HTTPStatus.UNPROCESSABLE_ENTITY)
def get_ledger_list(): """ List all ledgers. :rtype: list :return: List of ledgers. """ try: logger.info("Let's list all the ledgers...") ledgers = DdlServices.ledger_list() logger.info('Success. List of ledgers: {}.'.format(ledgers)) return ledgers except Exception as e: logger.exception('Unable to list ledgers!') return fail_response('Unable to list ledgers!. Please try again.', HTTPStatus.UNPROCESSABLE_ENTITY)
def insert_documents(ledger_name, table_name, documents): """ Insert documents into a table in a QLDB ledger. """ try: with qldb.session(ledger_name) as session: # An INSERT statement creates the initial revision of a document with a version number of zero. # QLDB also assigns a unique document identifier in GUID format as part of the metadata. session.execute_lambda( lambda executor: DmlServices.do_insert_documents(executor, table_name, documents), lambda retry_attempt: logger.info('Retrying due to OCC conflict...')) logger.info('Documents inserted successfully!') return success_response('Ledger is active and ready to use.', HTTPStatus.CREATED) except Exception as e: logger.exception('Error inserting or updating documents.') return fail_response('Error inserting or updating documents. error: {}. Please try again.'.format(e), HTTPStatus.UNPROCESSABLE_ENTITY)
def list_tables(ledger_name): """ Connect to a session for a given ledger using default settings. """ try: qldb_session = qldb.session(ledger_name) logger.info('Listing table names ') tables = qldb_session.list_tables() _tables = [] for table in tables: _tables.append(table) return _tables except Exception as e: logger.exception('Unable to create session.') return fail_response( 'Unable to connect ledgers!. Please try again.', HTTPStatus.UNPROCESSABLE_ENTITY)
def create_table_index(ledger_name=None, table_name=None, index_attribute=None): """Create index on tables in a particular ledger.""" logger.info('Creating index on all tables in a single transaction...') try: with qldb.session(ledger_name) as session: session.execute_lambda( lambda x: DdlServices.do_create_table_index( x, table_name, index_attribute), lambda retry_attempt: logger.info('Retrying due to OCC conflict...')) logger.info('Index created successfully.') return success_response('Index created successfully.', HTTPStatus.CREATED) except Exception: logger.exception('Unable to create index.') return fail_response( 'Unable to create the index. Please try again.', HTTPStatus.UNPROCESSABLE_ENTITY)