def products(kb_session, all, environment): ''' Gets the list of valid products for the system. ''' timer = ApodeixiTimer() func_trace = FunctionalTrace(parent_trace=None, path_mask=None) root_trace = func_trace.doing("CLI call to get products", origination={'signaled_from': __file__}) try: environment_filter = _get_environment_filter(root_trace, kb_session, all, environment) products_description = CLI_Utils().get_products( root_trace, kb_session, environment_filter) click.echo(products_description) output = "Success" click.echo(output) click.echo(timer.elapsed_time_message()) except ApodeixiError as ex: error_msg = CLI_ErrorReporting(kb_session).report_a6i_error( parent_trace=root_trace, a6i_error=ex) # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit() except Exception as ex: click.echo("Unrecoverable error: " + str(ex)) _sys.exit()
def apis(kb_session): ''' Gets the list of posting and manifest APIs supported by the KnowledgeBase ''' timer = ApodeixiTimer() func_trace = FunctionalTrace(parent_trace=None, path_mask=None) root_trace = func_trace.doing("CLI call to get posting APIs", origination={'signaled_from': __file__}) try: posting_apis_description = CLI_Utils().get_apodeixi_apis( root_trace, kb_session) click.echo(posting_apis_description) output = "Success" click.echo(output) click.echo(timer.elapsed_time_message()) except ApodeixiError as ex: error_msg = CLI_ErrorReporting(kb_session).report_a6i_error( parent_trace=root_trace, a6i_error=ex) # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit() except Exception as ex: click.echo("Unrecoverable error: " + str(ex)) _sys.exit()
def diff(kb_session, manifest_api, kind, namespace, name): ''' Makes a diff between two versions of a manifest. For a list of valid MANIFEST_APIs and KINDs, try 'get apis' For a list of valid NAMESPACEs and NAMEs, try 'get assertions' MANIFEST_API must be a versionless manifest API. Example: 'delivery-planning.journeys.a6i.io', (as opposed to 'delivery-planning.journeys.a6i.io/v1a'). ''' timer = ApodeixiTimer() func_trace = FunctionalTrace(parent_trace=None, path_mask=None) root_trace = func_trace.doing("CLI call to post", origination={'signaled_from': __file__}) kb_operation_succeeded = False try: my_trace = root_trace.doing( "Invoking ManifestUtils's postByFile service") diff_result = ManifestUtils().diff_manifest( parent_trace=my_trace, store=kb_session.store, manifest_api_name=manifest_api, namespace=namespace, name=name, kind=kind, version1=None, version2=None) kb_operation_succeeded = True diff_description = CLI_Utils().describe_diff_response( my_trace, kb_session, diff_result) # GOTCHA: # Make sure to remove non-ascii characters before passing the description to click.echo, since it # will raise errors if there are characters like \uFFFFD in the description # diff_description = StringUtils().to_ascii(diff_description) click.echo(diff_description) output = "Success" click.echo(output) click.echo(timer.elapsed_time_message()) except ApodeixiError as ex: error_msg = CLI_ErrorReporting(kb_session).report_a6i_error( parent_trace=root_trace, a6i_error=ex) if kb_operation_succeeded: error_msg = "KnowledgeBase operation completed, but run into a problem when preparing "\ + "a description of the response:\n"\ + error_msg # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit() except Exception as ex: try: error_msg = CLI_ErrorReporting(kb_session).report_generic_error( parent_trace=root_trace, generic_error=ex) if kb_operation_succeeded: error_msg = "KnowledgeBase operation completed, but run into a problem when preparing "\ + "a description of the response:\n"\ + error_msg except Exception as ex2: error_msg = "CLI run into trouble: found error:\n\n\t" + str(ex) + "\n\n" \ + "To make things worse, when trying to produce an error log file with a "\ + "stack trace, run into an additional error:\n\n\t" + str(ex2) # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit()
def form(kb_session, posting_api, namespace, subnamespace, dry_run, environment, timestamp): ''' Requests a form (an Excel spreadsheet) which (after some edits, as appropriate) can be used as the input to the post command. ''' timer = ApodeixiTimer() func_trace = FunctionalTrace(parent_trace=None, path_mask=None) root_trace = func_trace.doing("CLI call to post", origination={'signaled_from': __file__}) kb_operation_succeeded = False try: # Catch warnings and handle them so that we avoid spurious noise in the CLI due to noisy 3rd party libraries with warnings.catch_warnings(record=True) as w: WarningUtils().turn_traceback_on(root_trace, warnings_list=w) if environment != None: kb_session.store.activate(parent_trace=root_trace, environment_name=environment) click.echo(CLI_Utils().sandox_announcement(environment)) elif dry_run == True: sandbox_name = kb_session.provisionSandbox(root_trace) click.echo(CLI_Utils().sandox_announcement(sandbox_name)) ''' else: raise ApodeixiError(root_trace, "Sorry, only sandbox-isolated runs are supported at this time. Aborting.") ''' # Now that we have pinned down the environment (sandbox or not) in which to call the KnowledgeBase's services, # set that environment's tag to use for KnoweldgeBase's posting logs, if the user set it. if timestamp: kb_session.store.current_environment(root_trace).config( root_trace).use_timestamps = timestamp my_trace = root_trace.doing( "Invoking KnowledgeBase's requestForm service") output_dir = _os.getcwd() clientURL = kb_session.store.getClientURL(my_trace) relative_path, void = PathUtils().relativize(parent_trace=my_trace, root_dir=clientURL, full_path=output_dir) form_request = kb_session.store.getBlindFormRequest( parent_trace=my_trace, relative_path=relative_path, posting_api=posting_api, namespace=namespace, subnamespace=subnamespace) response, log_txt, rep = kb_session.kb.requestForm( parent_trace=my_trace, form_request=form_request) kb_operation_succeeded = True manifests_description = CLI_Utils().describe_req_form_response( my_trace, form_request_response=response, store=kb_session.store, representer=rep) click.echo(manifests_description) output = "Success" click.echo(output) click.echo(timer.elapsed_time_message()) WarningUtils().handle_warnings(root_trace, warning_list=w) except ApodeixiError as ex: error_msg = CLI_ErrorReporting(kb_session).report_a6i_error( parent_trace=root_trace, a6i_error=ex) if kb_operation_succeeded: error_msg = "KnowledgeBase operation completed, but run into a problem when preparing "\ + "a description of the response:\n"\ + error_msg # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit() except Exception as ex: try: error_msg = CLI_ErrorReporting(kb_session).report_generic_error( parent_trace=root_trace, generic_error=ex) if kb_operation_succeeded: error_msg = "KnowledgeBase operation completed, but run into a problem when preparing "\ + "a description of the response:\n"\ + error_msg except Exception as ex2: error_msg = "CLI run into trouble: found error:\n\n\t" + str(ex) + "\n\n" \ + "To make things worse, when trying to produce an error log file with a "\ + "stack trace, run into an additional error:\n\n\t" + str(ex2) # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit()
def post(kb_session, file, dry_run, environment, timestamp): ''' Posts contents of an Excel file to the KnowledgeBase. The filename must be of the form '<some string><posting API>.xlsx' for some supported KnowledgeBase posting API. ''' timer = ApodeixiTimer() func_trace = FunctionalTrace(parent_trace=None, path_mask=None) root_trace = func_trace.doing("CLI call to post", origination={'signaled_from': __file__}) kb_operation_succeeded = False try: if environment != None: kb_session.store.activate(parent_trace=root_trace, environment_name=environment) click.echo(CLI_Utils().sandox_announcement(environment)) elif dry_run == True: sandbox_name = kb_session.provisionSandbox(root_trace) click.echo(CLI_Utils().sandox_announcement(sandbox_name)) ''' else: raise ApodeixiError(root_trace, "Sorry, only sandbox-isolated runs are supported at this time. Aborting.") ''' # Now that we have pinned down the environment (sandbox or not) in which to call the KnowledgeBase's services, # set that environment's tag to use for KnoweldgeBase's posting logs, if the user set it. if timestamp: kb_session.store.current_environment(root_trace).config( root_trace).use_timestamps = timestamp if len( _os.path.split(file)[0] ) == 0: # This must be a local file in our working directory, no folder was given file = _os.getcwd() + "/" + file my_trace = root_trace.doing( "Invoking KnowledgeBase's postByFile service") response, log_txt = kb_session.kb.postByFile( parent_trace=my_trace, path_of_file_being_posted=file, excel_sheet="Posting Label") kb_operation_succeeded = True manifests_description = CLI_Utils().describe_post_response( my_trace, response, kb_session.store) click.echo(manifests_description) output = "Success" click.echo(output) click.echo(timer.elapsed_time_message()) except ApodeixiError as ex: error_msg = CLI_ErrorReporting(kb_session).report_a6i_error( parent_trace=root_trace, a6i_error=ex) if kb_operation_succeeded: error_msg = "KnowledgeBase operation completed, but run into a problem when preparing "\ + "a description of the response:\n"\ + error_msg # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit() except Exception as ex: try: error_msg = CLI_ErrorReporting(kb_session).report_generic_error( parent_trace=root_trace, generic_error=ex) if kb_operation_succeeded: error_msg = "KnowledgeBase operation completed, but run into a problem when preparing "\ + "a description of the response:\n"\ + error_msg except Exception as ex2: error_msg = "CLI run into trouble: found error:\n\n\t" + str(ex) + "\n\n" \ + "To make things worse, when trying to produce an error log file with a "\ + "stack trace, run into an additional error:\n\n\t" + str(ex2) # GOTCHA # Use print, not click.echo or click exception because they don't correctly display styling # (colors, underlines, etc.). So use vanilla Python print and then exit print(error_msg) _sys.exit()