Commit 4e60bc00 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Context Servicer (partial re-implementation):

- Added servicer RPC methods using new metrics framework.
parent 2d5fc449
Loading
Loading
Loading
Loading
+92 −92

File changed.

Preview size limit exceeded, changes collapsed.

+56 −0
Original line number Diff line number Diff line
from common.orm.fields.IntegerField import IntegerField
from common.orm.fields.StringField import StringField
from common.orm.model.Model import Model
from common.orm.fields.ForeignKeyField import ForeignKeyField
from common.orm.fields.PrimaryKeyField import PrimaryKeyField

class ContextModel(Model):
    pk = PrimaryKeyField()

class TopologyModel(Model):
    pk = PrimaryKeyField()
    context_fk = ForeignKeyField(ContextModel)

class DeviceModel(Model):
    pk = PrimaryKeyField()
    device_type = StringField()

class TopologyDeviceModel(Model):
    pk = PrimaryKeyField()
    topology_fk = ForeignKeyField(TopologyModel)
    device_fk = ForeignKeyField(DeviceModel)

class DeviceConfigModel(Model):
    pk = PrimaryKeyField()
    device_fk = ForeignKeyField(DeviceModel)

class DeviceConfigRuleModel(Model):
    pk = PrimaryKeyField()
    device_config_fk = ForeignKeyField(DeviceConfigModel)
    position = IntegerField(min_value=0, required=True)
    key = StringField(required=True)
    value = StringField(required=True)

#message Device {
#  DeviceConfig device_config = 3;
#  DeviceOperationalStatus devive_operational_status = 4;
#  repeated DeviceDriverEnum device_drivers = 5;
#  repeated EndPoint endpoints = 6;
#}

class LinkModel(Model):
    link_uuid = PrimaryKeyField()

class TopologyLinkModel(Model):
    topology_fk = ForeignKeyField(TopologyModel)
    link_fk = ForeignKeyField(LinkModel)

class EndPointModel(Model):
    endpoint_uuid = PrimaryKeyField()

class ServiceModel(Model):
    endpoint_uuid = PrimaryKeyField()


# TODO: implement query methods to find, for instance, topologies belonging to a context
#  from Context instance, retrieve references of a specific Model type
+38 −0
Original line number Diff line number Diff line
from __future__ import annotations
from typing import List
from ..backend._Backend import _Backend
from ._Object import _Object
from .Tools import format_key

class Collection:
    def __init__(self, parent : _Object, key_pattern : str):
        if not issubclass(parent, _Object):
            str_class_path = '{}.{}'.format(_Object.__module__, _Object.__name__)
            raise AttributeError('parent must inherit from {}'.format(str_class_path))
        if (not isinstance(key_pattern, str)) or (len(key_pattern) == 0):
            raise AttributeError('key_pattern must be a non-empty instance of str')

        self._parent = parent
        self._backend : _Backend = self._parent.backend
        self._key_list = format_key(key_pattern, self._parent, container_name='_list')
        self._key_set = format_key(key_pattern, self._parent, container_name='_set')

    def add(self, object_uuid : str) -> None:
        if self._backend.set_has(self._key_set, object_uuid): return
        self._backend.set_add(self._key_set, object_uuid)
        self._backend.list_push_last(self._key_list, object_uuid)

    def get(self) -> List[str]:
        return self._backend.list_get_all(self._key_list)

    def contains(self, object_uuid : str) -> bool:
        return self._backend.set_has(self._key_set, object_uuid)

    def clear(self) -> None:
        self._backend.delete(self._key_set)
        self._backend.delete(self._key_list)

    def delete(self, object_uuid : str) -> None:
        if not self._backend.set_has(self._key_set, object_uuid): return
        self._backend.set_remove(self._key_set, object_uuid)
        self._backend.list_remove_first_occurrence(self._key_list, object_uuid)
Loading