diff options
Diffstat (limited to 'snaps/config/qos.py')
-rw-r--r-- | snaps/config/qos.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/snaps/config/qos.py b/snaps/config/qos.py new file mode 100644 index 0000000..e507d2d --- /dev/null +++ b/snaps/config/qos.py @@ -0,0 +1,92 @@ +# Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs") +# and others. 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. +import enum + + +class Consumer(enum.Enum): + """ + QoS Specification consumer types + """ + front_end = 'front-end' + back_end = 'back-end' + both = 'both' + + +class QoSConfig(object): + def __init__(self, **kwargs): + """ + Constructor + :param name: the qos's name (required) + :param consumer: the qos's consumer type of the enum type Consumer + (required) + :param specs: dict of key/values + """ + + self.name = kwargs.get('name') + + if kwargs.get('consumer'): + self.consumer = map_consumer(kwargs['consumer']) + else: + self.consumer = None + + self.specs = kwargs.get('specs') + if not self.specs: + self.specs = dict() + + if not self.name or not self.consumer: + raise QoSConfigError( + "The attributes name and consumer are required") + + +def map_consumer(consumer): + """ + Takes a the protocol value maps it to the Consumer enum. When None return + None + :param consumer: the value to map to the Enum + :return: the Protocol enum object + :raise: Exception if value is invalid + """ + if not consumer: + return None + elif isinstance(consumer, Consumer): + return consumer + elif isinstance(consumer, str): + proto_str = str(consumer) + if proto_str == 'front-end': + return Consumer.front_end + elif proto_str == 'back-end': + return Consumer.back_end + elif proto_str == 'both': + return Consumer.both + else: + raise QoSConfigError('Invalid Consumer - ' + proto_str) + else: + if consumer.value == 'front-end': + return Consumer.front_end + elif consumer.value == 'back-end': + return Consumer.back_end + elif consumer.value == 'both': + return Consumer.both + else: + raise QoSConfigError('Invalid Consumer - ' + consumer.value) + + +class QoSConfigError(Exception): + """ + Exception to be thrown when an qos settings are incorrect + """ + + def __init__(self, message): + Exception.__init__(self, message) |