diff --git a/dyc/base.py b/dyc/base.py index 5f97f30..8d2acff 100644 --- a/dyc/base.py +++ b/dyc/base.py @@ -6,10 +6,11 @@ class Builder(object): - def __init__(self, filename, config, placeholders=False): + def __init__(self, filename, config, placeholders=False, test=False): self.filename = filename self.config = config self.placeholders = placeholders + self.test = test details = dict() diff --git a/dyc/classes.py b/dyc/classes.py index cd609b8..dfafd81 100644 --- a/dyc/classes.py +++ b/dyc/classes.py @@ -144,6 +144,7 @@ def extract_and_set_information(self, filename, start, line, length): config=self.config, leading_space=get_leading_whitespace(initial_line), placeholders=self.placeholders, + test=self.test ) def extract_classes(self, line): @@ -167,7 +168,6 @@ def prompts(self): def _class_interface_gen(self): # For each ClassInterface object in details[filename][class_name] - pass if not self.details: yield None for filename, func_pack in self.details.items(): @@ -227,7 +227,6 @@ def _get_name(self, line): if name: return name - # Dumb duplicate of _is_class def _is_class(self, line): """ A predicate method that checks if a line is a @@ -245,7 +244,7 @@ class ClassFormatter: formatted_string = "{open}{break_after_open}{class_docstring}{break_after_docstring}{empty_line}{parents_format}{break_before_close}{close}" fmt = BlankFormatter() - def format(self): + def format(self, test): """ Public formatting method that executes a pattern of methods to complete the process @@ -256,6 +255,7 @@ def format(self): self.result = self.fmt.format(self.formatted_string, **self.class_format) self.add_indentation() self.polish() + self.test = test def wrap_strings(self, words): """ @@ -384,11 +384,16 @@ def confirm(self, polished): try: result = "\n".join(class_split) - message = click.edit( - "## CONFIRM: MODIFY DOCSTRING BETWEEN START AND END LINES ONLY\n\n" - + result - ) - message = result if message == None else "\n".join(message.split("\n")[2:]) + + # If running an automated test + if self.test: + message = result + else: + message = click.edit( + "## CONFIRM: MODIFY DOCSTRING BETWEEN START AND END LINES ONLY\n\n" + + result + ) + message = result if message == None else "\n".join(message.split("\n")[2:]) except: print("Quitting the program in the editor terminates the process. Thanks") sys.exit() @@ -432,6 +437,7 @@ def __init__( config, leading_space, placeholders, + test, ): self.plain = plain self.name = name @@ -444,11 +450,12 @@ def __init__( self.config = config self.leading_space = leading_space self.placeholders = placeholders + self.test = test def prompt(self): self._prompt_docstring() self._prompt_parents() - self.format() + self.format(test=self.test) def _prompt_docstring(self): """ @@ -507,10 +514,14 @@ def extract(self): ] except: pass - self.parents = [parent for parent in self.parents if parent != ''] + self.parents = [parent for parent in self.parents if parent != ""] def sanitize(self): """ Sanitizes classes to validate all classes are correct """ - return map(lambda parent: re.findall(r"[a-zA-Z0-9_]+", parent)[0], self.parents) + # Updated filter function to remove invalid parent names + return list(filter( + lambda parent: not re.findall(r"[^a-zA-Z0-9_]", parent), + self.parents + )) diff --git a/dyc/dyc.py b/dyc/dyc.py index 5e45165..42b8df4 100644 --- a/dyc/dyc.py +++ b/dyc/dyc.py @@ -34,8 +34,9 @@ def main(config): @main.command() @click.option("--placeholders", is_flag=True, default=False) @click.argument("files", nargs=-1, type=click.Path(exists=True), required=False) +@click.option("-t", "--test", required=False, default=False, is_flag=True) @config -def start(config, files, placeholders): +def start(config, files, placeholders, test): """ This is the entry point of starting DYC for the whole project. When you run `dyc start`. ParsedConfig will wrap all the @@ -44,7 +45,7 @@ def start(config, files, placeholders): """ if files: config.plain["file_list"] = list(files) - dyc = DYC(config.plain, placeholders=placeholders) + dyc = DYC(config.plain, placeholders=placeholders, test=test) dyc.prepare() dyc.process_methods() dyc.process_top() diff --git a/dyc/main.py b/dyc/main.py index 0cac4b1..4ba2957 100644 --- a/dyc/main.py +++ b/dyc/main.py @@ -14,9 +14,10 @@ class DYC(Processor): - def __init__(self, config, details=None, placeholders=False): + def __init__(self, config, details=None, placeholders=False, test=False): self.config = config self.placeholders = placeholders + self.test = test def process_methods(self, diff_only=False, changes=[]): """ @@ -46,7 +47,7 @@ def process_methods(self, diff_only=False, changes=[]): method_cnf = fmt.get("method", {}) method_cnf["arguments"] = fmt.get("arguments") builder = MethodBuilder( - filename, method_cnf, placeholders=self.placeholders + filename, method_cnf, placeholders=self.placeholders, test=self.test ) builder.initialize(change=change) builder.prompts() @@ -64,7 +65,7 @@ def process_classes(self): classes_cnf = fmt.get("class", {}) classes_cnf["parents"] = fmt.get("parents") builder = ClassBuilder( - filename, classes_cnf, placeholders=self.placeholders + filename, classes_cnf, placeholders=self.placeholders, test=self.test ) builder.initialize() builder.prompts() @@ -81,7 +82,7 @@ def process_top(self, diff_only=False): extension = get_extension(filename) fmt = self.formats.get(extension) top_cnf = fmt.get("top", {}) - builder = TopBuilder(filename, top_cnf, placeholders=self.placeholders) + builder = TopBuilder(filename, top_cnf, placeholders=self.placeholders, test=self.test) builder.prompts() builder.apply() builder.clear(filename)