From 0e158e85d3b0ccbfd2ff63a698325f8270a9ea2f Mon Sep 17 00:00:00 2001 From: richard jackson Date: Wed, 2 Oct 2024 15:34:26 +0200 Subject: [PATCH] Updating templates, TemplateBuilder Class with nested if statement and a resync function for the setup script --- README.md | 54 +++++++++++++++++ auto_shell_scripting/TemplateBuilder.py | 56 ++++++++++++------ changelog.md | 21 ++++++- img/logo.png | Bin 9566 -> 9235 bytes setup.sh | 19 +++++- ...cleaner.json => data_cleaner_revised.json} | 4 +- templates/standard/standard.json | 10 ++-- 7 files changed, 137 insertions(+), 27 deletions(-) rename templates/data/{data-cleaner.json => data_cleaner_revised.json} (88%) diff --git a/README.md b/README.md index 8bd841e..b21a44f 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,60 @@ $ source script/basic.sh 3. The return value is as follows: > Bye, There +### How to initialize the locally installed templates +* All of the templates are located in the **templates** directory. +* Initially, you will need to create the location of the main working directory. +* The working directory will store all of the available templates. +* Simply, execute the following command in the command-line interface to setup. + +``` sh +./setup.sh --action=init +``` + +* The previous command will create the default templates. +* List these templates via the following command: +``` sh +./py2shell --templates +``` +* Results are as follows: + +
+==== Available Templates: ====
+1: advanced::shifting_args_extended - An extended example of using the shift command to pass parameters.
+2: advanced::shifting_args - An example of using the shift command to pass parameters.
+3: default::template_data - A template to test build a generic script.
+4: standard::standard - Standard script with help menu, conditions and conditional loops.
+5: basic::basic - A basic BASH shell script.
+6: basic::math - Random Math Applications
+7: animators::animation - Create a flipping animation
+8: data::data_cleaner_revised - A BASH revised shell script to clean up a Big Data dataset and save to clean_data.
+9: data::data_cleaner - A BASH shell script to clean up a Big Data dataset and save to clean_data.
+
+ +* All of the templates are then stored in the home directory as the name **~/.py2shell/templates**. + +### How to update the locally installed templates after modifying +* After you add or modify a template located in the **templates** directory. +* Simply, execute the following command in the command-line interface to update and push to the **~/.py2shell/templates** directory. + +``` sh +./setup.sh --action=update +``` +* Returns the following output: + +
+Pushing, 6 templates
+'templates/basic/math.json' -> '/home/denezt/.py2shell/templates/basic/math.json'
+'templates/basic/basic.json' -> '/home/denezt/.py2shell/templates/basic/basic.json'
+'templates/advanced/shifting_args.json' -> '/home/denezt/.py2shell/templates/advanced/shifting_args.json'
+'templates/advanced/shifting_args_extended.json' -> '/home/denezt/.py2shell/templates/advanced/shifting_args_extended.json'
+'templates/animators/animation.json' -> '/home/denezt/.py2shell/templates/animators/animation.json'
+'templates/default/template_data.json' -> '/home/denezt/.py2shell/templates/default/template_data.json'
+'templates/standard/standard.json' -> '/home/denezt/.py2shell/templates/standard/standard.json'
+'templates/data/data_cleaner_revised.json' -> '/home/denezt/.py2shell/templates/data/data_cleaner_revised.json'
+'templates/data/data_cleaner.json' -> '/home/denezt/.py2shell/templates/data/data_cleaner.json'
+
+ ### Contributors: diff --git a/auto_shell_scripting/TemplateBuilder.py b/auto_shell_scripting/TemplateBuilder.py index 949da1d..9def366 100755 --- a/auto_shell_scripting/TemplateBuilder.py +++ b/auto_shell_scripting/TemplateBuilder.py @@ -14,7 +14,7 @@ class TemplateBuilder: def buildIfStatement(self, if_statement: dict) -> str: statement_builder = "" - print("Building, if statement") + print("\033[35mBuilding, if statement\033[0m") if_statements = "" goal = "" for key, value in if_statement: @@ -26,12 +26,12 @@ def buildIfStatement(self, if_statement: dict) -> str: if if_statements: statement_builder += "\n" statement_builder += "if [ {} ]; then\n".format(goal) - statement_builder += if_statements + statement_builder += "{}".format(if_statements) statement_builder += "fi\n" - return statement_builder - + return statement_builder + def buildCaseStatement(self, case_statement: dict) -> str: - print("Building, case statement") + print("\033[35mBuilding, case statement\033[0m") switch_array = "" statement_builder = "" goal = "" @@ -48,8 +48,26 @@ def buildCaseStatement(self, case_statement: dict) -> str: statement_builder += "esac\n" return statement_builder + def buildNestedIfStatement(self, if_statement: dict) -> str: + statement_builder = "" + print("\033[35mBuilding, nested if statement\033[0m") + if_statements = "" + goal = "" + for key, value in if_statement: + if key == "goal": + goal = value + if key == "run": + for k in value: + if_statements += "\t{}".format(self.iterateRun(k)) + if if_statements: + statement_builder += "\n" + statement_builder += "\tif [ {} ]; then\n".format(goal) + statement_builder += "\t{}".format(if_statements) + statement_builder += "\tfi\n" + return statement_builder + def buildNestedCaseStatement(self, case_statement: dict) -> str: - print("Building, case statement") + print("\033[35mBuilding, nested case statement\033[0m") switch_array = "" statement_builder = "" goal = "" @@ -67,7 +85,7 @@ def buildNestedCaseStatement(self, case_statement: dict) -> str: return statement_builder def buildForStatement(self, loop_statement: dict) -> str: - print("Building, loop statement") + print("\033[35mBuilding, loop statement\033[0m") statement_builder = "" for_statements = "" goal = "" @@ -84,7 +102,7 @@ def buildForStatement(self, loop_statement: dict) -> str: return statement_builder def buildWhileStatement(self, loop_statement: dict) -> str: - print("Building, loop statement") + print("\033[35mBuilding, loop statement\033[0m") statement_builder = "" while_statements = "" goal = "" @@ -114,6 +132,8 @@ def getConditionBuilder(self, value) -> str: template += self.buildIfStatement(arr.items()) elif condition_type == "case": template += self.buildCaseStatement(arr.items()) + elif condition_type == "if.nested": + template += self.buildNestedIfStatement(arr.items()) elif condition_type == "case.nested": template += self.buildNestedCaseStatement(arr.items()) elif condition_type == "for": @@ -123,7 +143,7 @@ def getConditionBuilder(self, value) -> str: return template def buildFunction(self, function: dict) -> str: - print("Building, function statement") + print("\033[35mBuilding, function statement\033[0m") statement_builder = "" statements = "" name = "" @@ -133,16 +153,16 @@ def buildFunction(self, function: dict) -> str: if key == "statements": for stmt in value: if stmt.keys().__contains__('conditions'): - condition = [v for k, v in stmt.items()][0] + condition = [ v for k, v in stmt.items()][0] statements += self.getConditionBuilder(condition) else: - print(f"Build Function [stmt]: {stmt}") + print(f"\033[35mBuild Function [stmt]:\033[32m {stmt}\033[0m") statements += "\t" + self.iterateRun(stmt) if key in [ "control", "oneliner" ]: statements += "\t" + self.buildOneliner(value) if statements: statement_builder += "{}(){}".format(name, '{\n') - statement_builder += statements + statement_builder += "{}".format(statements) statement_builder += "}\n" return statement_builder @@ -165,14 +185,14 @@ def buildOneliner(self, value: dict) -> str: line = "" key = list(value.keys()) values = list(value.values()) - print(f"Build Oneliner [key0, values]: {key}, {values}") + print(f"\033[35mBuild Oneliner [key0, values]: \033[32m{key}, {values}\033[0m") for v in values[0]: line += self.replaceMetaTag(v) return "{} {}\n".format(key[0], line) # Normal nested inside of a conditional statement, function and loops def iterateRun(self, template_data: dict) -> str: - print(f"Template Data [iterateRun]: {type(template_data)} => {template_data}") + print(f"\033[35mTemplate Data [iterateRun]: \033[33m{type(template_data)} \033[35m=> \033[32m{template_data}\033[0m") line_statement = "" run_type = "" try: @@ -192,8 +212,8 @@ def iterateRun(self, template_data: dict) -> str: elif key == "function_call": line_statement += value + "\n" except AttributeError as ae: - print("Check datasource syntax and ensure you are using the correct datatype (array, object)") - print(ae) + print("\033[35mCheck datasource syntax and ensure you are using the correct datatype (array, object)\033[0m") + print("\033[31m{}\033[0m".format(ae)) exit(1) return line_statement @@ -211,7 +231,7 @@ def getTemplateData(self, templates, datasource: str) -> dict: datasource)) except Exception as e: print( - "Error: Missing or unable to find template (name: {})".format(datasource)) + "\033[35mError: \033[31mMissing or unable to find template (name: {})\033[0m".format(datasource)) return template_data def generate_template(self, template_data: dict) -> str: @@ -221,7 +241,7 @@ def generate_template(self, template_data: dict) -> str: print("\033[36mPURPOSE: \033[33m{}\033[0m".format(value)) # Writes the initial shell if key in ["shell.type"]: - print("Shell Type is {}".format(value)) + print("\033[36mShell Type is \033[36m{}\033[0m".format(value)) template += "#!/usr/bin/env {}\n\n".format(value) # template += "set -x\n\n" elif key in ["define.variables"]: diff --git a/changelog.md b/changelog.md index 3970753..1fb6a84 100644 --- a/changelog.md +++ b/changelog.md @@ -16,6 +16,24 @@ All notable changes to this project will be documented in this file. ### Removed - --> + +## [2.2.0] - 2024-05-02 + +### Added +- Adding the nested if condition for function, which will add an indentation for better formatting. + +### Changed +- Updated template builder with a nested if statement for functions. +- Modified the setup script with a new resynchronization function to update templates. + +## [2.0.0] - 2024-05-02 + +### Added +- Add more templates and fix older templates to make command call objects use an array + +### Changed +- Updated template builder and template lister class. + ## [1.0.2] - 2024-03-18 ### Added @@ -27,7 +45,6 @@ All notable changes to this project will be documented in this file. - All templates require the `name`, `purpose`, and `category` key. - Setup script will create a __.py2shell__ file in the home drive. - ## [1.0.1] - 2023-04-12 ### Added @@ -50,6 +67,8 @@ All notable changes to this project will be documented in this file. - Initial Commit +[2.2.0]: https://github.com/denezt/automate-shell-scripting/compare/v2.0.0...v2.2.0 +[2.0.0]: https://github.com/denezt/automate-shell-scripting/compare/v1.0.2...v2.0.0 [1.0.2]: https://github.com/denezt/automate-shell-scripting/compare/v1.0.1...v1.0.2 [1.0.1]: https://github.com/denezt/automate-shell-scripting/compare/v1.0.0...v1.0.1 [1.0.0]: https://github.com/denezt/automate-shell-scripting/releases/tag/v1.0.0 \ No newline at end of file diff --git a/img/logo.png b/img/logo.png index 1282a203369d74c629e4158a43b5855b2c77ebd9..c39d0b27796930bba5a3c1a4de7e0a2b4097676e 100644 GIT binary patch literal 9235 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 KS#Eyu*8c%e3>ts{ literal 9566 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 bPq%rZeB(Yo*Z-Kw@y}TQieA~pYk&M7%TjKJ diff --git a/setup.sh b/setup.sh index c556823..d0e60bc 100755 --- a/setup.sh +++ b/setup.sh @@ -42,6 +42,21 @@ initialize() { printf "\033[32mInitialization process is complete!!!\033[0m\n" } +resync_templates(){ + userpath="${HOME}/.py2shell" + if [ ! -d "${userpath}" ]; + then + mkdir -vp "${userpath}" + fi + if [ -d "${template_dir}" ]; + then + printf "\033[1;36mPushing, $(ls ${template_dir} | wc -l) templates\033[0m\n" + cp -a -v "${template_dir}" "${userpath}" + else + error "Missing or unable to locate templates directory" + fi +} + usage() { printf "\033[36mUSAGE:\033[0m\n" printf "\033[35m$0 \033[33m--action=\033[32mCOMMAND\033[0m\n" @@ -50,7 +65,8 @@ usage() { commands() { printf "\033[36mCOMMANDS:\033[0m\n" - printf "\033[35mInitial Install \033[32m[ init, initialize, setup, install ]\033[0m\n" + printf "\033[35mInitial Install\t\t\033[32m[ init, initialize, setup, install ]\033[0m\n" + printf "\033[35mUpdate Templates\t\033[32m[ push, resync, update ]\033[0m\n" printf "\n" } @@ -72,4 +88,5 @@ done case $_action in init|initialize|setup|install) initialize;; + push|resync|update) resync_templates;; esac diff --git a/templates/data/data-cleaner.json b/templates/data/data_cleaner_revised.json similarity index 88% rename from templates/data/data-cleaner.json rename to templates/data/data_cleaner_revised.json index 8610b7d..1809fd6 100755 --- a/templates/data/data-cleaner.json +++ b/templates/data/data_cleaner_revised.json @@ -1,6 +1,6 @@ { - "name": "data_cleaner", - "purpose": "A BASH shell script to clean up a Big Data dataset and save to clean_data.", + "name": "data_cleaner_revised", + "purpose": "A BASH revised shell script to clean up a Big Data dataset and save to clean_data.", "category": "data", "shell.type": "bash", "define.variables": { diff --git a/templates/standard/standard.json b/templates/standard/standard.json index 8c7881d..b288261 100755 --- a/templates/standard/standard.json +++ b/templates/standard/standard.json @@ -18,7 +18,7 @@ { "conditions": [ { - "type": "if", + "type": "if.nested", "goal": "1 -gt 1", "run": [ { @@ -40,7 +40,7 @@ { "conditions": [ { - "type": "if", + "type": "if.nested", "goal": "1 == 1", "run": [ { @@ -72,7 +72,7 @@ "type": "if", "goal": "1 == 1", "run": [ - { + { "command_call": { "printf": [ "__BEGIN__", @@ -101,7 +101,7 @@ "run": [ { "command_call": { - "printf": [ + "printf": [ "__BEGIN__", "loop...", "__NEWLINE__", @@ -140,4 +140,4 @@ ] } ] -} \ No newline at end of file +}