summaryrefslogtreecommitdiffstats
path: root/csarvalidation/python/main/validation/rules
diff options
context:
space:
mode:
authorBogumil Zebek <bogumil.zebek@nokia.com>2020-12-02 06:07:31 +0000
committerGerrit Code Review <gerrit@onap.org>2020-12-02 06:07:31 +0000
commitf65a16e597a267a0c6fae80db8b06f9e34f512d6 (patch)
tree7ff8040bbf605e9c046150552bb7340c313efd36 /csarvalidation/python/main/validation/rules
parent46a1379ba6b6ef9c43fb58ac2b125fe7ed82fff1 (diff)
parent97f2131b263b4beed8fe4b2dd3c07b44edbac396 (diff)
Merge "Add python script to generate table with active validation rules."
Diffstat (limited to 'csarvalidation/python/main/validation/rules')
-rw-r--r--csarvalidation/python/main/validation/rules/ActiveRulesTableGenerator.py70
-rw-r--r--csarvalidation/python/main/validation/rules/__init__.py0
-rw-r--r--csarvalidation/python/main/validation/rules/providers/ActiveRulesProvider.py43
-rw-r--r--csarvalidation/python/main/validation/rules/providers/RulesDescriptionsProvider.py40
-rw-r--r--csarvalidation/python/main/validation/rules/providers/__init__.py0
-rw-r--r--csarvalidation/python/main/validation/rules/table/ActiveRuleEntity.py24
-rw-r--r--csarvalidation/python/main/validation/rules/table/ActiveRulesTable.py37
-rw-r--r--csarvalidation/python/main/validation/rules/table/__init__.py0
8 files changed, 214 insertions, 0 deletions
diff --git a/csarvalidation/python/main/validation/rules/ActiveRulesTableGenerator.py b/csarvalidation/python/main/validation/rules/ActiveRulesTableGenerator.py
new file mode 100644
index 0000000..c8a0f37
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/ActiveRulesTableGenerator.py
@@ -0,0 +1,70 @@
+# ============LICENSE_START====================================
+# vnfsdk-validation
+# =========================================================
+# Copyright (C) 2020 Nokia. All rights reserved.
+# =========================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=====================================
+
+from validation.rules.providers.ActiveRulesProvider import ActiveRulesProvider
+
+from validation.rules.table.ActiveRuleEntity import ActiveRuleEntity
+from validation.rules.table.ActiveRulesTable import ActiveRulesTable
+
+
+class ActiveRulesTableGenerator:
+
+ def __init__(self,
+ rules_descriptions_providers: list,
+ active_rules_provider: ActiveRulesProvider
+ ):
+ self._rules_descriptions = rules_descriptions_providers
+ self._active_rules = active_rules_provider
+
+ def generate_active_validation_rule_tables(self, reqs_tags: list) -> list:
+ tables = []
+ for reqs_tag in reqs_tags:
+ tables.append(
+ self._create_rules_table(reqs_tag)
+ )
+ return tables
+
+ def _create_rules_table(self, reqs_tag: str) -> ActiveRulesTable:
+ active_rules_table = ActiveRulesTable()
+ active_rules = self._active_rules.get_active_rules(reqs_tag)
+ for rule in active_rules:
+ yaml_description = self._get_rule_description(rule)
+ active_rules_table.add_entity(
+ ActiveRuleEntity(
+ rule,
+ self._get_description_from_yaml(yaml_description),
+ self._get_product_from_yaml(yaml_description)
+ )
+ )
+ return active_rules_table
+
+ def _get_rule_description(self, rule: str) -> dict:
+ yaml_description = ""
+ for rules_description in self._rules_descriptions:
+ if rules_description.contains_rule(rule):
+ yaml_description = rules_description.get_rule_description(rule)
+ break
+ return yaml_description
+
+ @staticmethod
+ def _get_description_from_yaml(yaml_file: dict) -> str:
+ return yaml_file['description'].replace("\n", " ")
+
+ @staticmethod
+ def _get_product_from_yaml(yaml_file: dict) -> str:
+ return yaml_file['info']['product']
diff --git a/csarvalidation/python/main/validation/rules/__init__.py b/csarvalidation/python/main/validation/rules/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/__init__.py
diff --git a/csarvalidation/python/main/validation/rules/providers/ActiveRulesProvider.py b/csarvalidation/python/main/validation/rules/providers/ActiveRulesProvider.py
new file mode 100644
index 0000000..1d601f2
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/providers/ActiveRulesProvider.py
@@ -0,0 +1,43 @@
+# ============LICENSE_START====================================
+# vnfsdk-validation
+# =========================================================
+# Copyright (C) 2020 Nokia. All rights reserved.
+# =========================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=====================================
+
+class ActiveRulesProvider:
+
+ def __init__(self, properties_file_path: str, rules_separator: str = ",", key_value_separator: str = "="):
+ self.properties_file_path = properties_file_path
+ self._rules_separator = rules_separator
+ self._key_value_separator = key_value_separator
+
+ def get_active_rules(self, reqs: str) -> list:
+ active_rules = []
+ for line in self._load_file_by_lines():
+ if line.startswith(reqs):
+ active_rules = self._split_properties_line(line, self._rules_separator, self._key_value_separator)
+ break
+ return active_rules
+
+ def _load_file_by_lines(self) -> list:
+ with open(self.properties_file_path, 'r') as properties_file:
+ lines = properties_file.read().splitlines()
+ return lines
+
+ @staticmethod
+ def _split_properties_line(line: str, splitter: str, key_value_separator: str) -> list:
+ key_value_separation_index = line.index(key_value_separator) + 1
+ value = line[key_value_separation_index:]
+ return value.split(splitter)
diff --git a/csarvalidation/python/main/validation/rules/providers/RulesDescriptionsProvider.py b/csarvalidation/python/main/validation/rules/providers/RulesDescriptionsProvider.py
new file mode 100644
index 0000000..a34bbe3
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/providers/RulesDescriptionsProvider.py
@@ -0,0 +1,40 @@
+# ============LICENSE_START====================================
+# vnfsdk-validation
+# =========================================================
+# Copyright (C) 2020 Nokia. All rights reserved.
+# =========================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=====================================
+
+import os
+import yaml
+
+
+class RulesDescriptionsProvider:
+
+ def __init__(self, directory_containing_rules: str, rule_description_file_name_pattern: str):
+ self._directory_containing_rules = directory_containing_rules
+ self._rule_description_file_name_pattern = rule_description_file_name_pattern
+
+ def contains_rule(self, rule: str) -> bool:
+ description_file_name = self._rule_description_file_name_pattern % rule
+ return os.path.isfile(self._directory_containing_rules + description_file_name)
+
+ def get_rule_description(self, rule: str) -> str:
+ description_file_name = self._rule_description_file_name_pattern % rule
+ return self._get_yaml_description(description_file_name)
+
+ def _get_yaml_description(self, yaml_file: str) -> str:
+ with open(self._directory_containing_rules + yaml_file, 'r') as description_file:
+ description_yaml = yaml.load(description_file, Loader=yaml.FullLoader)
+ return description_yaml
diff --git a/csarvalidation/python/main/validation/rules/providers/__init__.py b/csarvalidation/python/main/validation/rules/providers/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/providers/__init__.py
diff --git a/csarvalidation/python/main/validation/rules/table/ActiveRuleEntity.py b/csarvalidation/python/main/validation/rules/table/ActiveRuleEntity.py
new file mode 100644
index 0000000..ed8c7d5
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/table/ActiveRuleEntity.py
@@ -0,0 +1,24 @@
+# ============LICENSE_START====================================
+# vnfsdk-validation
+# =========================================================
+# Copyright (C) 2020 Nokia. All rights reserved.
+# =========================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=====================================
+
+class ActiveRuleEntity:
+
+ def __init__(self, rule, description, product):
+ self.rule = rule
+ self.description = description
+ self.product = product
diff --git a/csarvalidation/python/main/validation/rules/table/ActiveRulesTable.py b/csarvalidation/python/main/validation/rules/table/ActiveRulesTable.py
new file mode 100644
index 0000000..70bb10d
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/table/ActiveRulesTable.py
@@ -0,0 +1,37 @@
+# ============LICENSE_START====================================
+# vnfsdk-validation
+# =========================================================
+# Copyright (C) 2020 Nokia. All rights reserved.
+# =========================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=====================================
+
+from validation.rules.table.ActiveRuleEntity import ActiveRuleEntity
+
+
+class ActiveRulesTable:
+
+ def __init__(self):
+ self._active_rules_entities = []
+
+ def add_entity(self, active_rule_entity: ActiveRuleEntity):
+ self._active_rules_entities.append(active_rule_entity)
+
+ def get_table_in_csv_format(self, values_separator=";", entity_separator="\n") -> str:
+ csv_table = ""
+ for entity in self._active_rules_entities:
+ csv_table += \
+ entity.product + values_separator + \
+ entity.rule + values_separator + \
+ entity.description + entity_separator
+ return csv_table
diff --git a/csarvalidation/python/main/validation/rules/table/__init__.py b/csarvalidation/python/main/validation/rules/table/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/csarvalidation/python/main/validation/rules/table/__init__.py