Update to Python 3.10 and Ubuntu 22.04 69/13369/1 release-v14.0-start
authorMark Beierl <mark.beierl@canonical.com>
Thu, 11 May 2023 01:35:27 +0000 (21:35 -0400)
committerMark Beierl <mark.beierl@canonical.com>
Thu, 11 May 2023 01:35:27 +0000 (21:35 -0400)
Removal of deprecated event loop
Updated pip requirements

Change-Id: I0eeba1b700187ec87197f5b28e6e20fd15bd945b
Signed-off-by: Mark Beierl <mark.beierl@canonical.com>
Dockerfile
osm_pla/cmd/pla_server.py
osm_pla/server/server.py
osm_pla/test/test_server.py
requirements-dev.txt
requirements-test.txt
tox.ini

index 7470d52..e3e66cf 100644 (file)
@@ -21,7 +21,7 @@
 #   devops-stages/stage-build.sh
 #
 
-FROM ubuntu:20.04
+FROM ubuntu:22.04
 
 ARG APT_PROXY
 RUN if [ ! -z $APT_PROXY ] ; then \
@@ -37,10 +37,12 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
         python3 \
         python3-all \
         python3-dev \
-        python3-setuptools
+        python3-setuptools \
+        python3-pip \
+        tox
 
-RUN python3 -m easy_install pip==21.3.1
-RUN pip install tox==3.24.5
+ENV LC_ALL C.UTF-8
+ENV LANG C.UTF-8
 
 ADD https://github.com/MiniZinc/MiniZincIDE/releases/download/2.4.2/MiniZincIDE-2.4.2-bundle-linux-x86_64.tgz /minizinc.tgz
 
index 409f14d..29c7332 100755 (executable)
@@ -15,7 +15,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 import argparse
-import asyncio
 import logging
 import sys
 
@@ -42,8 +41,7 @@ def main():
     log = logging.getLogger(__name__)
     log.info("Starting PLA Server...")
 
-    loop = asyncio.get_event_loop()
-    server = Server(cfg, loop)
+    server = Server(cfg)
     server.run()
 
 
index d2476ec..ede6f86 100644 (file)
@@ -33,12 +33,11 @@ class Server:
     pil_price_list_file = Path("/placement/pil_price_list.yaml")
     vnf_price_list_file = Path("/placement/vnf_price_list.yaml")
 
-    def __init__(self, config: Config, loop=None):
+    def __init__(self, config: Config):
         self.log = logging.getLogger("pla.server")
         self.db = None
         self.msgBus = None
         self.config = config
-        self.loop = loop or asyncio.get_event_loop()
 
         try:
             if config.get("database", "driver") == "mongo":
@@ -64,7 +63,6 @@ class Server:
                         config.get("message", "driver")
                     )
                 )
-            self.msgBus.loop = loop
             self.msgBus.connect(config.get("message"))
 
         except Exception as e:
@@ -259,21 +257,19 @@ class Server:
         self.log.info("Kafka msg arrived: {} {} {}".format(topic, command, params))
         if topic == "pla" and command == "get_placement":
             nslcmop_id = params.get("nslcmopId")
-            self.loop.create_task(self.get_placement(nslcmop_id))
+            asyncio.create_task(self.get_placement(nslcmop_id))
 
     async def kafka_read(self):
         self.log.info("Task kafka_read start")
         while True:
             try:
                 topics = "pla"
-                await self.msgBus.aioread(topics, self.loop, self.handle_kafka_command)
+                await self.msgBus.aioread(topics, self.handle_kafka_command)
             except Exception as e:
                 self.log.error("kafka read error. Exception: {}".format(e))
-                await asyncio.sleep(5, loop=self.loop)
+                await asyncio.sleep(5)
 
     def run(self):
-        self.loop.run_until_complete(self.kafka_read())
-        self.loop.close()
-        self.loop = None
+        asyncio.run(self.kafka_read())
         if self.msgBus:
             self.msgBus.disconnect()
index 127b4d1..d58ee03 100644 (file)
@@ -576,18 +576,18 @@ class TestServer(TestCase):
         }
         self.assertEqual(expected_keys, ppi["pil"][0].keys(), "expected keys not found")
 
-    def test_handle_kafka_command(self):  # OK
-        server = self.serverSetup()
-        server.loop.create_task = Mock()
-        server.handle_kafka_command("pli", "get_placement", {})
-        server.loop.create_task.assert_not_called()
-        server.loop.create_task.reset_mock()
-        server.handle_kafka_command(
-            "pla", "get_placement", {"nslcmopId": nslcmop_record_wo_pinning["id"]}
-        )
-        self.assertTrue(server.loop.create_task.called, "create_task not called")
-        args, kwargs = server.loop.create_task.call_args
-        self.assertIn("Server.get_placement", str(args[0]), "get_placement not called")
+    def test_handle_kafka_command(self):  # OK
+        server = self.serverSetup()
+        server.loop.create_task = Mock()
+        server.handle_kafka_command("pli", "get_placement", {})
+        server.loop.create_task.assert_not_called()
+        server.loop.create_task.reset_mock()
+        server.handle_kafka_command(
+            "pla", "get_placement", {"nslcmopId": nslcmop_record_wo_pinning["id"]}
+        )
+        self.assertTrue(server.loop.create_task.called, "create_task not called")
+        args, kwargs = server.loop.create_task.call_args
+        self.assertIn("Server.get_placement", str(args[0]), "get_placement not called")
 
     @mock.patch.object(
         NsPlacementDataFactory, "__init__", lambda x0, x1, x2, x3, x4, x5, x6: None
index fc55bcb..46fdb1f 100644 (file)
@@ -22,19 +22,27 @@ async-timeout==4.0.2
     #   aiokafka
 dataclasses==0.6
     # via -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
+dnspython==2.3.0
+    # via
+    #   -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
+    #   pymongo
 kafka-python==2.0.2
     # via
     #   -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
     #   aiokafka
+motor==3.1.2
+    # via -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
 osm-common @ git+https://osm.etsi.org/gerrit/osm/common.git@master
     # via -r requirements-dev.in
-packaging==23.0
+packaging==23.1
     # via
     #   -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
     #   aiokafka
-pycrypto==2.6.1
-    # via -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
-pymongo==3.13.0
+pycryptodome==3.17
     # via -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
+pymongo==4.3.3
+    # via
+    #   -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
+    #   motor
 pyyaml==5.4.1
     # via -r https://osm.etsi.org/gitweb/?p=osm/common.git;a=blob_plain;f=requirements.txt;hb=master
index fd0128d..295394e 100644 (file)
@@ -14,9 +14,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #######################################################################################
-coverage==7.1.0
+coverage==7.2.5
     # via -r requirements-test.in
-mock==5.0.1
+mock==5.0.2
     # via -r requirements-test.in
-nose2==0.12.0
+nose2==0.13.0
     # via -r requirements-test.in
diff --git a/tox.ini b/tox.ini
index 4b93d38..98409d3 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -23,7 +23,7 @@ toxworkdir = /tmp/.tox
 
 [testenv]
 usedevelop = True
-basepython = python3.8
+basepython = python3.10
 setenv = VIRTUAL_ENV={envdir}
          PYTHONDONTWRITEBYTECODE = 1
 deps =  -r{toxinidir}/requirements.txt