blob: 958bb3ed422f2132a1fb320f32aea050107c79d4 [file] [log] [blame]
tierno87858ca2018-10-08 16:30:15 +02001# -*- coding: utf-8 -*-
2
3# Copyright 2018 Telefonica S.A.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14# implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
tierno5c012612018-04-19 16:01:59 +020017
tierno5c012612018-04-19 16:01:59 +020018from http import HTTPStatus
aticig3dd0db62022-03-04 19:35:45 +030019import logging
tierno1e9a3292018-11-05 18:18:45 +010020from threading import Lock
tierno5c012612018-04-19 16:01:59 +020021
aticig3dd0db62022-03-04 19:35:45 +030022from osm_common.common_utils import FakeLock
23
tierno5c012612018-04-19 16:01:59 +020024__author__ = "Alfonso Tierno <alfonso.tiernosepulveda@telefonica.com>"
25
26
27class MsgException(Exception):
28 """
29 Base Exception class for all msgXXXX exceptions
30 """
31
tiernoa4eaefe2018-06-20 17:37:17 +020032 def __init__(self, message, http_code=HTTPStatus.SERVICE_UNAVAILABLE):
tierno5c012612018-04-19 16:01:59 +020033 """
34 General exception
35 :param message: descriptive text
36 :param http_code: <http.HTTPStatus> type. It contains ".value" (http error code) and ".name" (http error name
37 """
38 self.http_code = http_code
39 Exception.__init__(self, "messaging exception " + message)
40
41
42class MsgBase(object):
43 """
44 Base class for all msgXXXX classes
45 """
46
garciadeblas2644b762021-03-24 09:21:01 +010047 def __init__(self, logger_name="msg", lock=False):
tierno1e9a3292018-11-05 18:18:45 +010048 """
49 Constructor of FsBase
50 :param logger_name: logging name
51 :param lock: Used to protect simultaneous access to the same instance class by several threads:
52 False, None: Do not protect, this object will only be accessed by one thread
53 True: This object needs to be protected by several threads accessing.
54 Lock object. Use thi Lock for the threads access protection
55 """
56 self.logger = logging.getLogger(logger_name)
57 if not lock:
58 self.lock = FakeLock()
59 elif lock is True:
60 self.lock = Lock()
61 elif isinstance(lock, Lock):
62 self.lock = lock
63 else:
64 raise ValueError("lock parameter must be a Lock class or boolean")
tierno5c012612018-04-19 16:01:59 +020065
66 def connect(self, config):
67 pass
68
69 def disconnect(self):
70 pass
71
72 def write(self, topic, key, msg):
garciadeblas2644b762021-03-24 09:21:01 +010073 raise MsgException(
74 "Method 'write' not implemented", http_code=HTTPStatus.INTERNAL_SERVER_ERROR
75 )
tierno5c012612018-04-19 16:01:59 +020076
77 def read(self, topic):
garciadeblas2644b762021-03-24 09:21:01 +010078 raise MsgException(
79 "Method 'read' not implemented", http_code=HTTPStatus.INTERNAL_SERVER_ERROR
80 )
tierno5c012612018-04-19 16:01:59 +020081
Dario Faccin37e09142023-05-24 12:48:37 +020082 async def aiowrite(self, topic, key, msg):
garciadeblas2644b762021-03-24 09:21:01 +010083 raise MsgException(
84 "Method 'aiowrite' not implemented",
85 http_code=HTTPStatus.INTERNAL_SERVER_ERROR,
86 )
tierno5c012612018-04-19 16:01:59 +020087
garciadeblas2644b762021-03-24 09:21:01 +010088 async def aioread(
Dario Faccin37e09142023-05-24 12:48:37 +020089 self, topic, callback=None, aiocallback=None, group_id=None, **kwargs
garciadeblas2644b762021-03-24 09:21:01 +010090 ):
91 raise MsgException(
92 "Method 'aioread' not implemented",
93 http_code=HTTPStatus.INTERNAL_SERVER_ERROR,
94 )