X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_common%2Fmsgbase.py;h=49adcb8d1a8530733f8b54c9204e0440e2e4bb34;hb=HEAD;hp=98f97bf2548566becb106f8a6ad25a25f316a7c6;hpb=ebbf35359cebd00c42afc93f0d65ab61b38ad70a;p=osm%2Fcommon.git diff --git a/osm_common/msgbase.py b/osm_common/msgbase.py index 98f97bf..958bb3e 100644 --- a/osm_common/msgbase.py +++ b/osm_common/msgbase.py @@ -1,6 +1,25 @@ +# -*- coding: utf-8 -*- + +# Copyright 2018 Telefonica S.A. +# +# 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. -# import asyncio from http import HTTPStatus +import logging +from threading import Lock + +from osm_common.common_utils import FakeLock __author__ = "Alfonso Tierno " @@ -10,7 +29,7 @@ class MsgException(Exception): Base Exception class for all msgXXXX exceptions """ - def __init__(self, message, http_code=HTTPStatus.INTERNAL_SERVER_ERROR): + def __init__(self, message, http_code=HTTPStatus.SERVICE_UNAVAILABLE): """ General exception :param message: descriptive text @@ -25,8 +44,24 @@ class MsgBase(object): Base class for all msgXXXX classes """ - def __init__(self): - pass + def __init__(self, logger_name="msg", lock=False): + """ + Constructor of FsBase + :param logger_name: logging name + :param lock: Used to protect simultaneous access to the same instance class by several threads: + False, None: Do not protect, this object will only be accessed by one thread + True: This object needs to be protected by several threads accessing. + Lock object. Use thi Lock for the threads access protection + """ + self.logger = logging.getLogger(logger_name) + if not lock: + self.lock = FakeLock() + elif lock is True: + self.lock = Lock() + elif isinstance(lock, Lock): + self.lock = lock + else: + raise ValueError("lock parameter must be a Lock class or boolean") def connect(self, config): pass @@ -35,13 +70,25 @@ class MsgBase(object): pass def write(self, topic, key, msg): - raise MsgException("Method 'write' not implemented") + raise MsgException( + "Method 'write' not implemented", http_code=HTTPStatus.INTERNAL_SERVER_ERROR + ) def read(self, topic): - raise MsgException("Method 'read' not implemented") + raise MsgException( + "Method 'read' not implemented", http_code=HTTPStatus.INTERNAL_SERVER_ERROR + ) - async def aiowrite(self, topic, key, msg, loop): - raise MsgException("Method 'aiowrite' not implemented") + async def aiowrite(self, topic, key, msg): + raise MsgException( + "Method 'aiowrite' not implemented", + http_code=HTTPStatus.INTERNAL_SERVER_ERROR, + ) - async def aioread(self, topic, loop): - raise MsgException("Method 'aioread' not implemented") + async def aioread( + self, topic, callback=None, aiocallback=None, group_id=None, **kwargs + ): + raise MsgException( + "Method 'aioread' not implemented", + http_code=HTTPStatus.INTERNAL_SERVER_ERROR, + )