3.0.0 policy-handler - migrated to python 3.6
- migrated from python 2.7 to 3.6
- brought up the latest versions of dependencies
-- Cherrypy 15.0.0, requests 2.18.4, websocket-client 0.48.0
- fixed migration errors
-- renamed the standard package Queue to queue
-- dict.items() instead of dict.iteritems()
-- dict.keys() instead of dict.viewkeys()
-- range() instead of xrange()
-- subprocess.check_output(..., universal_newlines=True) to
get str instead of byte-stream from stdout
- cleaned up migration warnings
-- super() instead of super(A, self)
-- logger.warning() instead of .warn()
- moved main() from policy_handler.py to __main__.py
- getting the policy_handler version directly from setup.py
instead of the env var on init of the audit
Change-Id: I0fc4ddc51c08a64f3cfdc5d2f010b1c6a1ae92f0
Signed-off-by: Alex Shatov <alexs@att.com>
Issue-ID: DCAEGEN2-515
diff --git a/policyhandler/__init__.py b/policyhandler/__init__.py
index e9d0246..3315706 100644
--- a/policyhandler/__init__.py
+++ b/policyhandler/__init__.py
@@ -15,3 +15,20 @@
# ============LICENSE_END=========================================================
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+"""policyhandler package"""
+
+class LogWriter(object):
+ """redirect the standard out + err to the logger"""
+ def __init__(self, logger_func):
+ self.logger_func = logger_func
+
+ def write(self, log_line):
+ """actual writer to be used in place of stdout or stderr"""
+ log_line = log_line.rstrip()
+ if log_line:
+ self.logger_func(log_line)
+
+ def flush(self):
+ """no real flushing of the buffer"""
+ pass
diff --git a/policyhandler/policy_handler.py b/policyhandler/__main__.py
similarity index 68%
rename from policyhandler/policy_handler.py
rename to policyhandler/__main__.py
index 8d5f360..1f17d9d 100644
--- a/policyhandler/policy_handler.py
+++ b/policyhandler/__main__.py
@@ -16,31 +16,22 @@
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-"""run as server: python -m policyhandler/policy_handler"""
+"""
+ run as server:
+ python -m policyhandler
-import os
-import sys
+ that will invoke this module __main__.py in folder of policyhandler
+"""
+
import logging
+import sys
+from policyhandler import LogWriter
from policyhandler.config import Config
from policyhandler.onap.audit import Audit
-from policyhandler.web_server import PolicyWeb
from policyhandler.policy_receiver import PolicyReceiver
+from policyhandler.web_server import PolicyWeb
-class LogWriter(object):
- """redirect the standard out + err to the logger"""
- def __init__(self, logger_func):
- self.logger_func = logger_func
-
- def write(self, log_line):
- """actual writer to be used in place of stdout or stderr"""
- log_line = log_line.rstrip()
- if log_line:
- self.logger_func(log_line)
-
- def flush(self):
- """no real flushing of the buffer"""
- pass
def run_policy_handler():
"""main run function for policy-handler"""
@@ -51,10 +42,8 @@
sys.stdout = LogWriter(logger.info)
sys.stderr = LogWriter(logger.error)
- logger.info("========== run_policy_handler ==========")
- policy_handler_version = os.getenv("APP_VER")
- logger.info("policy_handler_version %s", policy_handler_version)
- Audit.init(Config.get_system_name(), policy_handler_version, Config.LOGGER_CONFIG_FILE_PATH)
+ logger.info("========== run_policy_handler ========== %s", __package__)
+ Audit.init(Config.get_system_name(), Config.LOGGER_CONFIG_FILE_PATH)
logger.info("starting policy_handler with config:")
logger.info(Audit.log_json_dumps(Config.config))
@@ -63,5 +52,6 @@
PolicyReceiver.run(audit)
PolicyWeb.run_forever(audit)
+
if __name__ == "__main__":
run_policy_handler()
diff --git a/policyhandler/config.py b/policyhandler/config.py
index 8a8f418..39d528b 100644
--- a/policyhandler/config.py
+++ b/policyhandler/config.py
@@ -71,7 +71,7 @@
new_config = DiscoveryClient.get_value(discovery_key)
if not new_config or not isinstance(new_config, dict):
- Config._logger.warn("unexpected config from discovery: %s", new_config)
+ Config._logger.warning("unexpected config from discovery: %s", new_config)
return
Config._logger.debug("loaded config from discovery(%s): %s", \
@@ -92,7 +92,7 @@
loaded_config = json.load(config_json)
if not loaded_config:
- Config._logger.warn("config not loaded from file: %s", file_path)
+ Config._logger.warning("config not loaded from file: %s", file_path)
return
Config._logger.info("config loaded from file: %s", file_path)
diff --git a/policyhandler/customize/customizer.py b/policyhandler/customize/customizer.py
index 22bf60e..38928e9 100644
--- a/policyhandler/customize/customizer.py
+++ b/policyhandler/customize/customizer.py
@@ -26,10 +26,13 @@
:Customizer: class is owned by the company that needs to customize the policy-handler
- :override: any method defined in the CustomizerBase class to customize the behavior of the policy-handler
+ :override: any method defined in the CustomizerBase class to customize
+ the behavior of the policy-handler
see README.md for the sample of the customizer.py
"""
- def __init__(self):
- """class that contains the customization"""
- super(Customizer, self).__init__()
+ # def __init__(self):
+ # """class that contains the customization"""
+ # super().__init__()
+
+ pass
diff --git a/policyhandler/customize/customizer_base.py b/policyhandler/customize/customizer_base.py
index 97e1550..c98a9eb 100644
--- a/policyhandler/customize/customizer_base.py
+++ b/policyhandler/customize/customizer_base.py
@@ -35,7 +35,8 @@
policy-hanlder is using the instance of the child Customizer class to get the overriden methods
- the methods defined in this class are the placeholders and are expected to be overriden by the Customizer class
+ the methods defined in this class are the placeholders and are expected
+ to be overriden by the Customizer class
"""
def __init__(self):
diff --git a/policyhandler/onap/audit.py b/policyhandler/onap/audit.py
index 0aa1c50..a007a26 100644
--- a/policyhandler/onap/audit.py
+++ b/policyhandler/onap/audit.py
@@ -140,10 +140,9 @@
_packages = []
@staticmethod
- def init(service_name, service_version, config_file_path):
+ def init(service_name, config_file_path):
"""init static invariants and loggers"""
_Audit._service_name = service_name
- _Audit._service_version = service_version
_Audit._logger_debug = CommonLogger(config_file_path, "debug", \
instanceUUID=_Audit._service_instance_uuid, serviceName=_Audit._service_name)
_Audit._logger_error = CommonLogger(config_file_path, "error", \
@@ -154,7 +153,14 @@
instanceUUID=_Audit._service_instance_uuid, serviceName=_Audit._service_name)
ProcessInfo.init()
try:
- _Audit._packages = filter(None, subprocess.check_output(["pip", "freeze"]).splitlines())
+ _Audit._service_version = subprocess.check_output(
+ ["python", "setup.py", "--version"], universal_newlines=True).strip()
+ except subprocess.CalledProcessError:
+ pass
+ try:
+ _Audit._packages = list(
+ filter(None, subprocess.check_output(["pip", "freeze"],
+ universal_newlines=True).splitlines()))
except subprocess.CalledProcessError:
pass
@@ -337,10 +343,10 @@
:aud_parent: is the parent Audit - used for sub-query metrics to other systems
:kwargs: - put any request related params into kwargs
"""
- super(Audit, self).__init__(job_name=job_name,
- request_id=request_id,
- req_message=req_message,
- **kwargs)
+ super().__init__(job_name=job_name,
+ request_id=request_id,
+ req_message=req_message,
+ **kwargs)
headers = self.kwargs.get("headers", {})
if headers:
@@ -411,10 +417,10 @@
:aud_parent: is the parent Audit - used for sub-query metrics to other systems
:kwargs: - put any request related params into kwargs
"""
- super(Metrics, self).__init__(job_name=aud_parent.job_name,
- request_id=aud_parent.request_id,
- req_message=aud_parent.req_message,
- **aud_parent.merge_all_kwargs(**kwargs))
+ super().__init__(job_name=aud_parent.job_name,
+ request_id=aud_parent.request_id,
+ req_message=aud_parent.req_message,
+ **aud_parent.merge_all_kwargs(**kwargs))
self.aud_parent = aud_parent
self._metrics_name = _Audit._key_format.sub(
'_', AUDIT_METRICS + "_" + self.kwargs.get(AUDIT_TARGET_ENTITY, self.job_name))
diff --git a/policyhandler/onap/health.py b/policyhandler/onap/health.py
index e6a6f69..d117255 100644
--- a/policyhandler/onap/health.py
+++ b/policyhandler/onap/health.py
@@ -156,5 +156,5 @@
def dump(self):
"""returns dict of stats"""
with self._lock:
- stats = dict((k, v.dump()) for (k, v) in self._all_stats.iteritems())
+ stats = dict((k, v.dump()) for (k, v) in self._all_stats.items())
return stats
diff --git a/policyhandler/onap/process_info.py b/policyhandler/onap/process_info.py
index 9fb6334..a22ccf9 100644
--- a/policyhandler/onap/process_info.py
+++ b/policyhandler/onap/process_info.py
@@ -38,7 +38,7 @@
try:
return func(*args, **kwargs)
except Exception as ex:
- return "%s: %s" % (type(ex).__name__, str(ex))
+ return {type(ex).__name__ : str(ex)}
return wrapper
@@ -86,7 +86,7 @@
process = psutil.Process()
with process.oneshot():
return dict((k, ProcessInfo.bytes_to_bibytes(v))
- for k, v in process.memory_full_info()._asdict().iteritems())
+ for k, v in process.memory_full_info()._asdict().items())
@staticmethod
@@ -94,7 +94,7 @@
def virtual_memory():
"""calculates the virtual memory usage of the whole vm"""
return dict((k, ProcessInfo.bytes_to_bibytes(v))
- for k, v in psutil.virtual_memory()._asdict().iteritems())
+ for k, v in psutil.virtual_memory()._asdict().items())
@staticmethod
diff --git a/policyhandler/policy_receiver.py b/policyhandler/policy_receiver.py
index dd9eea6..280e3c6 100644
--- a/policyhandler/policy_receiver.py
+++ b/policyhandler/policy_receiver.py
@@ -122,7 +122,8 @@
message = json.loads(message)
if not message or not isinstance(message, dict):
- _PolicyReceiver._logger.warn("unexpected message from PDP: %s", json.dumps(message))
+ _PolicyReceiver._logger.warning("unexpected message from PDP: %s",
+ json.dumps(message))
return
policies_updated = [(policy.get(POLICY_NAME), policy.get(POLICY_VER))
diff --git a/policyhandler/policy_rest.py b/policyhandler/policy_rest.py
index 977a9a1..16c38bb 100644
--- a/policyhandler/policy_rest.py
+++ b/policyhandler/policy_rest.py
@@ -207,7 +207,7 @@
latest_policy = None
expect_policy_removed = (ignore_policy_names and not min_version_expected)
- for retry in xrange(1, PolicyRest._policy_retry_count + 1):
+ for retry in range(1, PolicyRest._policy_retry_count + 1):
PolicyRest._logger.debug(str_metrics)
status_code, policy_configs = PolicyRest._pdp_get_config(
@@ -323,7 +323,7 @@
apns = [(audit, policy_id,
policy_to_find.get(PolicyRest.MIN_VERSION_EXPECTED),
policy_to_find.get(PolicyRest.IGNORE_POLICY_NAMES))
- for (policy_id, policy_to_find) in policies_to_find.iteritems()]
+ for (policy_id, policy_to_find) in policies_to_find.items()]
policies = None
apns_length = len(apns)
@@ -343,13 +343,13 @@
if policy and policy.get(POLICY_ID))
removed_policies = dict((policy_id, True)
- for (policy_id, policy_to_find) in policies_to_find.iteritems()
+ for (policy_id, policy_to_find) in policies_to_find.items()
if not policy_to_find.get(PolicyRest.MIN_VERSION_EXPECTED)
and policy_to_find.get(PolicyRest.IGNORE_POLICY_NAMES)
and policy_id not in updated_policies)
errored_policies = dict((policy_id, policy_to_find)
- for (policy_id, policy_to_find) in policies_to_find.iteritems()
+ for (policy_id, policy_to_find) in policies_to_find.items()
if policy_id not in updated_policies
and policy_id not in removed_policies)
@@ -413,7 +413,7 @@
audit.set_http_status_code(status_code)
valid_policies = {}
errored_policies = {}
- for (policy_id, policy) in latest_policies.iteritems():
+ for (policy_id, policy) in latest_policies.items():
if PolicyRest._validate_policy(policy):
valid_policies[policy_id] = policy
else:
@@ -481,10 +481,10 @@
# latest_policies == [(valid_policies, errored_policies, errored_scope_prefix), ...]
result[LATEST_POLICIES] = dict(
- pair for (vps, _, _) in latest_policies if vps for pair in vps.iteritems())
+ pair for (vps, _, _) in latest_policies if vps for pair in vps.items())
result[ERRORED_POLICIES] = dict(
- pair for (_, eps, _) in latest_policies if eps for pair in eps.iteritems())
+ pair for (_, eps, _) in latest_policies if eps for pair in eps.items())
result[ERRORED_SCOPES] = sorted([esp for (_, _, esp) in latest_policies if esp])
diff --git a/policyhandler/policy_updater.py b/policyhandler/policy_updater.py
index 9f24d3d..cff7b41 100644
--- a/policyhandler/policy_updater.py
+++ b/policyhandler/policy_updater.py
@@ -21,7 +21,7 @@
import copy
import json
import logging
-from Queue import Queue
+from queue import Queue
from threading import Lock, Thread
from .config import Config
@@ -206,14 +206,14 @@
catch_up_result = ""
if not aud_catch_up.is_success():
catch_up_result = "- not sending catch-up to deployment-handler due to errors"
- PolicyUpdater._logger.warn(catch_up_result)
+ PolicyUpdater._logger.warning(catch_up_result)
elif not self._need_to_send_catch_up(aud_catch_up, catch_up_message):
catch_up_result = "- skipped sending the same policies"
else:
DeployHandler.policy_update(aud_catch_up, catch_up_message, rediscover=True)
if not aud_catch_up.is_success():
catch_up_result = "- failed to send catch-up to deployment-handler"
- PolicyUpdater._logger.warn(catch_up_result)
+ PolicyUpdater._logger.warning(catch_up_result)
else:
catch_up_result = "- sent catch-up to deployment-handler"
success, _, _ = aud_catch_up.audit_done(result=catch_up_result)
@@ -255,13 +255,13 @@
if not queued_audit.is_success():
result = "- not sending policy-updates to deployment-handler due to errors"
- PolicyUpdater._logger.warn(result)
+ PolicyUpdater._logger.warning(result)
else:
message = {LATEST_POLICIES: updated_policies, REMOVED_POLICIES: removed_policies}
deployment_handler_changed = DeployHandler.policy_update(queued_audit, message)
if not queued_audit.is_success():
result = "- failed to send policy-updates to deployment-handler"
- PolicyUpdater._logger.warn(result)
+ PolicyUpdater._logger.warning(result)
else:
result = "- sent policy-updates to deployment-handler"
diff --git a/policyhandler/policy_utils.py b/policyhandler/policy_utils.py
index c96d4f6..c2a8b07 100644
--- a/policyhandler/policy_utils.py
+++ b/policyhandler/policy_utils.py
@@ -134,8 +134,8 @@
try:
return json.loads(json_str)
except (ValueError, TypeError) as err:
- Utils._logger.warn("unexpected json error(%s): len(%s) str[:100]: (%s)",
- str(err), len(json_str), str(json_str)[:100])
+ Utils._logger.warning("unexpected json error(%s): len(%s) str[:100]: (%s)",
+ str(err), len(json_str), str(json_str)[:100])
return json_str
@staticmethod
@@ -159,11 +159,11 @@
return True
if isinstance(body_1, dict) and isinstance(body_2, dict):
- if body_1.viewkeys() ^ body_2.viewkeys():
+ if body_1.keys() ^ body_2.keys():
Utils._logger.debug("keys %s != %s", json.dumps(body_1), json.dumps(body_2))
return False
- for key, val_1 in body_1.iteritems():
+ for key, val_1 in body_1.items():
if not Utils.are_the_same(val_1, body_2[key]):
return False
return True