From 933a21ec3d09e6ea14514fa6909ee60037d714aa Mon Sep 17 00:00:00 2001 From: Joona Hoikkala Date: Thu, 15 Aug 2019 17:12:11 +0300 Subject: [PATCH] Add apache specific functionality to the interface --- certbot-apache/certbot_apache/interfaces.py | 19 ++++++++-- .../certbot_apache/tests/parsernode_test.py | 36 +++++++++++++++++-- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/certbot-apache/certbot_apache/interfaces.py b/certbot-apache/certbot_apache/interfaces.py index b04a14d84..a69849ee4 100644 --- a/certbot-apache/certbot_apache/interfaces.py +++ b/certbot-apache/certbot_apache/interfaces.py @@ -121,8 +121,21 @@ class ParserNode(object): # True if this node has been modified since last save. dirty: bool + + # Filepath of the file where the configuration element for this ParserNode + # object resides. + filepath: str """ + @abc.abstractmethod + def metadata(self, key): + """ + Gets an element from the metadata dictionary for this ParserNode object. + + :param str key: Element key name + :returns: Requested metadata element + """ + @abc.abstractmethod def save(self, msg): """ @@ -142,7 +155,7 @@ class ParserNode(object): @six.add_metaclass(abc.ABCMeta) -class CommentNode(ParserNode): +class CommentNode(object): """ CommentNode class is used for representation of comments within the parsed configuration structure. Because of the nature of comments, it is not able @@ -161,7 +174,7 @@ class CommentNode(ParserNode): @six.add_metaclass(abc.ABCMeta) -class DirectiveNode(ParserNode): +class DirectiveNode(object): """ DirectiveNode class represents a configuration directive within the configuration. It can have zero or more parameters attached to it. Because of the nature of @@ -195,7 +208,7 @@ class DirectiveNode(ParserNode): @six.add_metaclass(abc.ABCMeta) -class BlockNode(ParserNode): +class BlockNode(object): """ BlockNode class represents a block of nested configuration directives, comments and other blocks as its children. A BlockNode can have zero or more parameters diff --git a/certbot-apache/certbot_apache/tests/parsernode_test.py b/certbot-apache/certbot_apache/tests/parsernode_test.py index 6b45a4d6d..b44815af5 100644 --- a/certbot-apache/certbot_apache/tests/parsernode_test.py +++ b/certbot-apache/certbot_apache/tests/parsernode_test.py @@ -8,28 +8,41 @@ from certbot_apache import interfaces -class DummyCommentNode(interfaces.CommentNode): +class DummyCommentNode(interfaces.ParserNode): """ A dummy class implementing CommentNode interface """ ancestor = None comment = "" dirty = False + filename = "" + + def metadata(self, key): # pragma: no cover + """Metadata""" + pass def save(self, msg): # pragma: no cover + """Save""" pass -class DummyDirectiveNode(interfaces.DirectiveNode): +class DummyDirectiveNode(interfaces.ParserNode): """ A dummy class implementing DirectiveNode interface """ ancestor = None parameters = tuple() # type: Tuple[str, ...] dirty = False enabled = True name = "" + filename = "" + + def metadata(self, key): # pragma: no cover + """Metadata""" + pass def save(self, msg): # pragma: no cover + """Save""" pass def set_parameters(self, parameters): # pragma: no cover + """Set parameters""" pass @@ -41,38 +54,57 @@ class DummyBlockNode(interfaces.BlockNode): dirty = False enabled = True name = "" + filename = "" def save(self, msg): # pragma: no cover + """Save""" pass def add_child_block(self, name, parameters=None, position=None): # pragma: no cover + """Add child block""" pass def add_child_directive(self, name, parameters=None, position=None): # pragma: no cover + """Add child directive""" pass def add_child_comment(self, comment="", position=None): # pragma: no cover + """Add child comment""" pass def find_blocks(self, name, exclude=True): # pragma: no cover + """Find blocks""" pass def find_directives(self, name, exclude=True): # pragma: no cover + """Find directives""" pass def find_comments(self, comment, exact=False): # pragma: no cover + """Find comments""" pass def delete_child(self, child): # pragma: no cover + """Delete child""" + pass + + def metadata(self, key): # pragma: no cover + """Metadata""" pass def set_parameters(self, parameters): # pragma: no cover + """Set parameters""" pass def unsaved_files(self): # pragma: no cover + """Unsaved files""" pass +interfaces.CommentNode.register(DummyCommentNode) +interfaces.DirectiveNode.register(DummyDirectiveNode) +interfaces.BlockNode.register(DummyBlockNode) + class ParserNodeTest(unittest.TestCase): """Dummy placeholder test case for ParserNode interfaces"""