From d8e99fef54cabb46fec60790aa01ad9e32eabf52 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Fri, 14 Feb 2020 21:34:47 +0100 Subject: [PATCH] remove servcice_elt_attr_list --- src/rougail/annotator.py | 30 +++++++++++++++--------------- src/rougail/objspace.py | 6 ------ 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/src/rougail/annotator.py b/src/rougail/annotator.py index c938a2af..13f0ac9a 100644 --- a/src/rougail/annotator.py +++ b/src/rougail/annotator.py @@ -114,21 +114,21 @@ class ServiceAnnotator: def convert_service_to_family(self, service_name, service_family, service): # tranform service object to family object # add services, service_accesses, ... - for elttype in self.objectspace.service_elt_attr_list: - if hasattr(service, elttype): - family = self.objectspace.family() - if elttype.endswith('s'): - family.name = elttype + 'es' - else: - family.name = elttype + 's' - values = getattr(service, elttype) - if isinstance(values, dict): - values = list(values.values()) - family.family = self.convert_subelement_service(elttype, - values, - 'services.{}.{}'.format(service_name, family.name)) - family.mode = None - service_family[family.name] = family + for elttype, values in vars(service).items(): + if elttype in ['name', 'index']: + continue + family = self.objectspace.family() + if elttype.endswith('s'): + family.name = elttype + 'es' + else: + family.name = elttype + 's' + if isinstance(values, dict): + values = list(values.values()) + family.family = self.convert_subelement_service(elttype, + values, + 'services.{}.{}'.format(service_name, family.name)) + family.mode = None + service_family[family.name] = family def convert_subelement_service(self, name, elts, path): families = [] diff --git a/src/rougail/objspace.py b/src/rougail/objspace.py index 5c6047e4..f464d533 100644 --- a/src/rougail/objspace.py +++ b/src/rougail/objspace.py @@ -86,8 +86,6 @@ class CreoleObjSpace(object): self.redefine_variables = None self.probe_variables = [] - # elt service's attrs list - self.service_elt_attr_list = [] # # ['variable', 'separator', 'family'] self.forced_text_elts = set() # ['disknod', 'follower', 'target', 'service', 'package', 'ip', 'value', 'tcpwrapper', @@ -107,7 +105,6 @@ class CreoleObjSpace(object): if elt.type == 'mixed': forced_text_elt = True if elt.name == 'service': - self.service_elt_attr_list = [elt.content.left.name] self.parse_dtd_right_left_elt(elt.content) for attr in elt.iterattributes(): atomic = False @@ -152,10 +149,7 @@ class CreoleObjSpace(object): def parse_dtd_right_left_elt(self, elt): if elt.right.type == 'or': - self.service_elt_attr_list.append(elt.right.left.name) self.parse_dtd_right_left_elt(elt.right) - else: - self.service_elt_attr_list.append(elt.right.name) def _convert_boolean(self, value): # pylint: disable=R0201 """Boolean coercion. The Creole XML may contain srings like `True` or `False`