RIC-642 related changes: REST subscription, rnib enhancements, symptomdata, rest service with healthy and config interface
Signed-off-by: Erkki Hietala <erkki.hietala@nokia.com>
Change-Id: Ibcbc85b57da571fb9c0eb3adff9ba950aec6c4c9
diff --git a/ricxappframe/entities/__init__.py b/ricxappframe/entities/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/ricxappframe/entities/__init__.py
+++ /dev/null
diff --git a/ricxappframe/entities/rnib/__init__.py b/ricxappframe/entities/rnib/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/ricxappframe/entities/rnib/__init__.py
+++ /dev/null
diff --git a/ricxappframe/entities/rnib/additional_cell_information_pb2.py b/ricxappframe/entities/rnib/additional_cell_information_pb2.py
index 64d575d..a5396b7 100644
--- a/ricxappframe/entities/rnib/additional_cell_information_pb2.py
+++ b/ricxappframe/entities/rnib/additional_cell_information_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: additional_cell_information.proto
@@ -107,11 +108,11 @@
DESCRIPTOR.message_types_by_name['AdditionalCellInformation'] = _ADDITIONALCELLINFORMATION
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-AdditionalCellInformation = _reflection.GeneratedProtocolMessageType('AdditionalCellInformation', (_message.Message,), dict(
- DESCRIPTOR = _ADDITIONALCELLINFORMATION,
- __module__ = 'additional_cell_information_pb2'
+AdditionalCellInformation = _reflection.GeneratedProtocolMessageType('AdditionalCellInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _ADDITIONALCELLINFORMATION,
+ '__module__' : 'additional_cell_information_pb2'
# @@protoc_insertion_point(class_scope:entities.AdditionalCellInformation)
- ))
+ })
_sym_db.RegisterMessage(AdditionalCellInformation)
diff --git a/ricxappframe/entities/rnib/cell_pb2.py b/ricxappframe/entities/rnib/cell_pb2.py
index bd22582..22e07b8 100644
--- a/ricxappframe/entities/rnib/cell_pb2.py
+++ b/ricxappframe/entities/rnib/cell_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: cell.proto
@@ -115,11 +116,11 @@
DESCRIPTOR.message_types_by_name['Cell'] = _CELL
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-Cell = _reflection.GeneratedProtocolMessageType('Cell', (_message.Message,), dict(
- DESCRIPTOR = _CELL,
- __module__ = 'cell_pb2'
+Cell = _reflection.GeneratedProtocolMessageType('Cell', (_message.Message,), {
+ 'DESCRIPTOR' : _CELL,
+ '__module__' : 'cell_pb2'
# @@protoc_insertion_point(class_scope:entities.Cell)
- ))
+ })
_sym_db.RegisterMessage(Cell)
diff --git a/ricxappframe/entities/rnib/cells_pb2.py b/ricxappframe/entities/rnib/cells_pb2.py
index 0d31c68..71419ca 100644
--- a/ricxappframe/entities/rnib/cells_pb2.py
+++ b/ricxappframe/entities/rnib/cells_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: cells.proto
@@ -154,25 +155,25 @@
DESCRIPTOR.message_types_by_name['ServedNRCellList'] = _SERVEDNRCELLLIST
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-Cells = _reflection.GeneratedProtocolMessageType('Cells', (_message.Message,), dict(
- DESCRIPTOR = _CELLS,
- __module__ = 'cells_pb2'
+Cells = _reflection.GeneratedProtocolMessageType('Cells', (_message.Message,), {
+ 'DESCRIPTOR' : _CELLS,
+ '__module__' : 'cells_pb2'
# @@protoc_insertion_point(class_scope:entities.Cells)
- ))
+ })
_sym_db.RegisterMessage(Cells)
-ServedCellInfoList = _reflection.GeneratedProtocolMessageType('ServedCellInfoList', (_message.Message,), dict(
- DESCRIPTOR = _SERVEDCELLINFOLIST,
- __module__ = 'cells_pb2'
+ServedCellInfoList = _reflection.GeneratedProtocolMessageType('ServedCellInfoList', (_message.Message,), {
+ 'DESCRIPTOR' : _SERVEDCELLINFOLIST,
+ '__module__' : 'cells_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedCellInfoList)
- ))
+ })
_sym_db.RegisterMessage(ServedCellInfoList)
-ServedNRCellList = _reflection.GeneratedProtocolMessageType('ServedNRCellList', (_message.Message,), dict(
- DESCRIPTOR = _SERVEDNRCELLLIST,
- __module__ = 'cells_pb2'
+ServedNRCellList = _reflection.GeneratedProtocolMessageType('ServedNRCellList', (_message.Message,), {
+ 'DESCRIPTOR' : _SERVEDNRCELLLIST,
+ '__module__' : 'cells_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedNRCellList)
- ))
+ })
_sym_db.RegisterMessage(ServedNRCellList)
diff --git a/ricxappframe/entities/rnib/e2node_component_config_pb2.py b/ricxappframe/entities/rnib/e2node_component_config_pb2.py
new file mode 100644
index 0000000..90aa556
--- /dev/null
+++ b/ricxappframe/entities/rnib/e2node_component_config_pb2.py
@@ -0,0 +1,735 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: e2node_component_config.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf.internal import enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from . import nb_types_pb2 as nb__types__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='e2node_component_config.proto',
+ package='entities',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x1d\x65\x32node_component_config.proto\x12\x08\x65ntities\x1a\x0enb_types.proto\"\xf3\x05\n\x15\x45\x32nodeComponentConfig\x12N\n\x1e\x65\x32nodeComponentInterfaceTypeNG\x18\x01 \x01(\x0b\x32$.entities.E2nodeComponentInterfaceNGH\x00\x12N\n\x1e\x65\x32nodeComponentInterfaceTypeXn\x18\x02 \x01(\x0b\x32$.entities.E2nodeComponentInterfaceXnH\x00\x12N\n\x1e\x65\x32nodeComponentInterfaceTypeE1\x18\x03 \x01(\x0b\x32$.entities.E2nodeComponentInterfaceE1H\x00\x12N\n\x1e\x65\x32nodeComponentInterfaceTypeF1\x18\x04 \x01(\x0b\x32$.entities.E2nodeComponentInterfaceF1H\x00\x12N\n\x1e\x65\x32nodeComponentInterfaceTypeW1\x18\x05 \x01(\x0b\x32$.entities.E2nodeComponentInterfaceW1H\x00\x12N\n\x1e\x65\x32nodeComponentInterfaceTypeS1\x18\x06 \x01(\x0b\x32$.entities.E2nodeComponentInterfaceS1H\x00\x12N\n\x1e\x65\x32nodeComponentInterfaceTypeX2\x18\x07 \x01(\x0b\x32$.entities.E2nodeComponentInterfaceX2H\x00\x12L\n\x1c\x65\x32nodeComponentInterfaceType\x18\x08 \x01(\x0e\x32&.entities.E2nodeComponentInterfaceType\x12\"\n\x1a\x65\x32nodeComponentRequestPart\x18\t \x01(\x0c\x12#\n\x1b\x65\x32nodeComponentResponsePart\x18\n \x01(\x0c\x42\x13\n\x11\x45\x32nodeComponentID\".\n\x1a\x45\x32nodeComponentInterfaceNG\x12\x10\n\x08\x61mf_name\x18\x0b \x01(\t\"\x99\x01\n\x1a\x45\x32nodeComponentInterfaceXn\x12\x32\n\x0fglobal_ngenb_id\x18\x0c \x01(\x0b\x32\x17.entities.GlobalNGENBIDH\x00\x12.\n\rglobal_gnb_id\x18\r \x01(\x0b\x32\x15.entities.GlobalGNBIDH\x00\x42\x17\n\x15global_ng_ran_node_id\"2\n\x1a\x45\x32nodeComponentInterfaceE1\x12\x14\n\x0cgNB_cu_cp_id\x18\x0e \x01(\x03\"/\n\x1a\x45\x32nodeComponentInterfaceF1\x12\x11\n\tgNB_du_id\x18\x0f \x01(\x03\"1\n\x1a\x45\x32nodeComponentInterfaceW1\x12\x13\n\x0bngenb_du_id\x18\x10 \x01(\x03\".\n\x1a\x45\x32nodeComponentInterfaceS1\x12\x10\n\x08mme_name\x18\x11 \x01(\t\"|\n\x1a\x45\x32nodeComponentInterfaceX2\x12,\n\rglobal_enb_id\x18\x12 \x01(\x0b\x32\x15.entities.GlobalENBID\x12\x30\n\x0fglobal_engnb_id\x18\x13 \x01(\x0b\x32\x17.entities.GlobalENGNBID\"Y\n\x0bGlobalENBID\x12\x15\n\rplmn_identity\x18\x14 \x01(\t\x12\x0e\n\x06\x65nb_id\x18\x15 \x01(\t\x12#\n\x08\x65nb_type\x18\x16 \x01(\x0e\x32\x11.entities.EnbType\"[\n\rGlobalENGNBID\x12\x15\n\rplmn_identity\x18\x17 \x01(\t\x12\x0e\n\x06gnb_id\x18\x18 \x01(\t\x12#\n\x08gnb_type\x18\x19 \x01(\x0e\x32\x11.entities.GnbType\"Y\n\x0bGlobalGNBID\x12\x15\n\rplmn_identity\x18\x1a \x01(\t\x12\x0e\n\x06gnb_id\x18\x1b \x01(\t\x12#\n\x08gnb_type\x18\x1c \x01(\x0e\x32\x11.entities.GnbType\"[\n\rGlobalNGENBID\x12\x15\n\rplmn_identity\x18\x1d \x01(\t\x12\x0e\n\x06\x65nb_id\x18\x1e \x01(\t\x12#\n\x08\x65nb_type\x18\x1f \x01(\x0e\x32\x11.entities.EnbType*V\n\x1c\x45\x32nodeComponentInterfaceType\x12\x06\n\x02ng\x10\x00\x12\x06\n\x02xn\x10\x01\x12\x06\n\x02\x65\x31\x10\x02\x12\x06\n\x02\x66\x31\x10\x03\x12\x06\n\x02w1\x10\x05\x12\x06\n\x02s1\x10\x06\x12\x06\n\x02x2\x10\x07\x62\x06proto3')
+ ,
+ dependencies=[nb__types__pb2.DESCRIPTOR,])
+
+_E2NODECOMPONENTINTERFACETYPE = _descriptor.EnumDescriptor(
+ name='E2nodeComponentInterfaceType',
+ full_name='entities.E2nodeComponentInterfaceType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='ng', index=0, number=0,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='xn', index=1, number=1,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='e1', index=2, number=2,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='f1', index=3, number=3,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='w1', index=4, number=5,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='s1', index=5, number=6,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='x2', index=6, number=7,
+ serialized_options=None,
+ type=None),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=1715,
+ serialized_end=1801,
+)
+_sym_db.RegisterEnumDescriptor(_E2NODECOMPONENTINTERFACETYPE)
+
+E2nodeComponentInterfaceType = enum_type_wrapper.EnumTypeWrapper(_E2NODECOMPONENTINTERFACETYPE)
+ng = 0
+xn = 1
+e1 = 2
+f1 = 3
+w1 = 5
+s1 = 6
+x2 = 7
+
+
+
+_E2NODECOMPONENTCONFIG = _descriptor.Descriptor(
+ name='E2nodeComponentConfig',
+ full_name='entities.E2nodeComponentConfig',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceTypeNG', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceTypeNG', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceTypeXn', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceTypeXn', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceTypeE1', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceTypeE1', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceTypeF1', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceTypeF1', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceTypeW1', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceTypeW1', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceTypeS1', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceTypeS1', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceTypeX2', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceTypeX2', index=6,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentInterfaceType', full_name='entities.E2nodeComponentConfig.e2nodeComponentInterfaceType', index=7,
+ number=8, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentRequestPart', full_name='entities.E2nodeComponentConfig.e2nodeComponentRequestPart', index=8,
+ number=9, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='e2nodeComponentResponsePart', full_name='entities.E2nodeComponentConfig.e2nodeComponentResponsePart', index=9,
+ number=10, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='E2nodeComponentID', full_name='entities.E2nodeComponentConfig.E2nodeComponentID',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=60,
+ serialized_end=815,
+)
+
+
+_E2NODECOMPONENTINTERFACENG = _descriptor.Descriptor(
+ name='E2nodeComponentInterfaceNG',
+ full_name='entities.E2nodeComponentInterfaceNG',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='amf_name', full_name='entities.E2nodeComponentInterfaceNG.amf_name', index=0,
+ number=11, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=817,
+ serialized_end=863,
+)
+
+
+_E2NODECOMPONENTINTERFACEXN = _descriptor.Descriptor(
+ name='E2nodeComponentInterfaceXn',
+ full_name='entities.E2nodeComponentInterfaceXn',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='global_ngenb_id', full_name='entities.E2nodeComponentInterfaceXn.global_ngenb_id', index=0,
+ number=12, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='global_gnb_id', full_name='entities.E2nodeComponentInterfaceXn.global_gnb_id', index=1,
+ number=13, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name='global_ng_ran_node_id', full_name='entities.E2nodeComponentInterfaceXn.global_ng_ran_node_id',
+ index=0, containing_type=None, fields=[]),
+ ],
+ serialized_start=866,
+ serialized_end=1019,
+)
+
+
+_E2NODECOMPONENTINTERFACEE1 = _descriptor.Descriptor(
+ name='E2nodeComponentInterfaceE1',
+ full_name='entities.E2nodeComponentInterfaceE1',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='gNB_cu_cp_id', full_name='entities.E2nodeComponentInterfaceE1.gNB_cu_cp_id', index=0,
+ number=14, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1021,
+ serialized_end=1071,
+)
+
+
+_E2NODECOMPONENTINTERFACEF1 = _descriptor.Descriptor(
+ name='E2nodeComponentInterfaceF1',
+ full_name='entities.E2nodeComponentInterfaceF1',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='gNB_du_id', full_name='entities.E2nodeComponentInterfaceF1.gNB_du_id', index=0,
+ number=15, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1073,
+ serialized_end=1120,
+)
+
+
+_E2NODECOMPONENTINTERFACEW1 = _descriptor.Descriptor(
+ name='E2nodeComponentInterfaceW1',
+ full_name='entities.E2nodeComponentInterfaceW1',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ngenb_du_id', full_name='entities.E2nodeComponentInterfaceW1.ngenb_du_id', index=0,
+ number=16, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1122,
+ serialized_end=1171,
+)
+
+
+_E2NODECOMPONENTINTERFACES1 = _descriptor.Descriptor(
+ name='E2nodeComponentInterfaceS1',
+ full_name='entities.E2nodeComponentInterfaceS1',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='mme_name', full_name='entities.E2nodeComponentInterfaceS1.mme_name', index=0,
+ number=17, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1173,
+ serialized_end=1219,
+)
+
+
+_E2NODECOMPONENTINTERFACEX2 = _descriptor.Descriptor(
+ name='E2nodeComponentInterfaceX2',
+ full_name='entities.E2nodeComponentInterfaceX2',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='global_enb_id', full_name='entities.E2nodeComponentInterfaceX2.global_enb_id', index=0,
+ number=18, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='global_engnb_id', full_name='entities.E2nodeComponentInterfaceX2.global_engnb_id', index=1,
+ number=19, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1221,
+ serialized_end=1345,
+)
+
+
+_GLOBALENBID = _descriptor.Descriptor(
+ name='GlobalENBID',
+ full_name='entities.GlobalENBID',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='plmn_identity', full_name='entities.GlobalENBID.plmn_identity', index=0,
+ number=20, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enb_id', full_name='entities.GlobalENBID.enb_id', index=1,
+ number=21, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enb_type', full_name='entities.GlobalENBID.enb_type', index=2,
+ number=22, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1347,
+ serialized_end=1436,
+)
+
+
+_GLOBALENGNBID = _descriptor.Descriptor(
+ name='GlobalENGNBID',
+ full_name='entities.GlobalENGNBID',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='plmn_identity', full_name='entities.GlobalENGNBID.plmn_identity', index=0,
+ number=23, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='gnb_id', full_name='entities.GlobalENGNBID.gnb_id', index=1,
+ number=24, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='gnb_type', full_name='entities.GlobalENGNBID.gnb_type', index=2,
+ number=25, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1438,
+ serialized_end=1529,
+)
+
+
+_GLOBALGNBID = _descriptor.Descriptor(
+ name='GlobalGNBID',
+ full_name='entities.GlobalGNBID',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='plmn_identity', full_name='entities.GlobalGNBID.plmn_identity', index=0,
+ number=26, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='gnb_id', full_name='entities.GlobalGNBID.gnb_id', index=1,
+ number=27, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='gnb_type', full_name='entities.GlobalGNBID.gnb_type', index=2,
+ number=28, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1531,
+ serialized_end=1620,
+)
+
+
+_GLOBALNGENBID = _descriptor.Descriptor(
+ name='GlobalNGENBID',
+ full_name='entities.GlobalNGENBID',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='plmn_identity', full_name='entities.GlobalNGENBID.plmn_identity', index=0,
+ number=29, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enb_id', full_name='entities.GlobalNGENBID.enb_id', index=1,
+ number=30, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enb_type', full_name='entities.GlobalNGENBID.enb_type', index=2,
+ number=31, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1622,
+ serialized_end=1713,
+)
+
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeNG'].message_type = _E2NODECOMPONENTINTERFACENG
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeXn'].message_type = _E2NODECOMPONENTINTERFACEXN
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeE1'].message_type = _E2NODECOMPONENTINTERFACEE1
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeF1'].message_type = _E2NODECOMPONENTINTERFACEF1
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeW1'].message_type = _E2NODECOMPONENTINTERFACEW1
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeS1'].message_type = _E2NODECOMPONENTINTERFACES1
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeX2'].message_type = _E2NODECOMPONENTINTERFACEX2
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceType'].enum_type = _E2NODECOMPONENTINTERFACETYPE
+_E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID'].fields.append(
+ _E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeNG'])
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeNG'].containing_oneof = _E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID']
+_E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID'].fields.append(
+ _E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeXn'])
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeXn'].containing_oneof = _E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID']
+_E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID'].fields.append(
+ _E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeE1'])
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeE1'].containing_oneof = _E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID']
+_E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID'].fields.append(
+ _E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeF1'])
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeF1'].containing_oneof = _E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID']
+_E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID'].fields.append(
+ _E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeW1'])
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeW1'].containing_oneof = _E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID']
+_E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID'].fields.append(
+ _E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeS1'])
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeS1'].containing_oneof = _E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID']
+_E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID'].fields.append(
+ _E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeX2'])
+_E2NODECOMPONENTCONFIG.fields_by_name['e2nodeComponentInterfaceTypeX2'].containing_oneof = _E2NODECOMPONENTCONFIG.oneofs_by_name['E2nodeComponentID']
+_E2NODECOMPONENTINTERFACEXN.fields_by_name['global_ngenb_id'].message_type = _GLOBALNGENBID
+_E2NODECOMPONENTINTERFACEXN.fields_by_name['global_gnb_id'].message_type = _GLOBALGNBID
+_E2NODECOMPONENTINTERFACEXN.oneofs_by_name['global_ng_ran_node_id'].fields.append(
+ _E2NODECOMPONENTINTERFACEXN.fields_by_name['global_ngenb_id'])
+_E2NODECOMPONENTINTERFACEXN.fields_by_name['global_ngenb_id'].containing_oneof = _E2NODECOMPONENTINTERFACEXN.oneofs_by_name['global_ng_ran_node_id']
+_E2NODECOMPONENTINTERFACEXN.oneofs_by_name['global_ng_ran_node_id'].fields.append(
+ _E2NODECOMPONENTINTERFACEXN.fields_by_name['global_gnb_id'])
+_E2NODECOMPONENTINTERFACEXN.fields_by_name['global_gnb_id'].containing_oneof = _E2NODECOMPONENTINTERFACEXN.oneofs_by_name['global_ng_ran_node_id']
+_E2NODECOMPONENTINTERFACEX2.fields_by_name['global_enb_id'].message_type = _GLOBALENBID
+_E2NODECOMPONENTINTERFACEX2.fields_by_name['global_engnb_id'].message_type = _GLOBALENGNBID
+_GLOBALENBID.fields_by_name['enb_type'].enum_type = nb__types__pb2._ENBTYPE
+_GLOBALENGNBID.fields_by_name['gnb_type'].enum_type = nb__types__pb2._GNBTYPE
+_GLOBALGNBID.fields_by_name['gnb_type'].enum_type = nb__types__pb2._GNBTYPE
+_GLOBALNGENBID.fields_by_name['enb_type'].enum_type = nb__types__pb2._ENBTYPE
+DESCRIPTOR.message_types_by_name['E2nodeComponentConfig'] = _E2NODECOMPONENTCONFIG
+DESCRIPTOR.message_types_by_name['E2nodeComponentInterfaceNG'] = _E2NODECOMPONENTINTERFACENG
+DESCRIPTOR.message_types_by_name['E2nodeComponentInterfaceXn'] = _E2NODECOMPONENTINTERFACEXN
+DESCRIPTOR.message_types_by_name['E2nodeComponentInterfaceE1'] = _E2NODECOMPONENTINTERFACEE1
+DESCRIPTOR.message_types_by_name['E2nodeComponentInterfaceF1'] = _E2NODECOMPONENTINTERFACEF1
+DESCRIPTOR.message_types_by_name['E2nodeComponentInterfaceW1'] = _E2NODECOMPONENTINTERFACEW1
+DESCRIPTOR.message_types_by_name['E2nodeComponentInterfaceS1'] = _E2NODECOMPONENTINTERFACES1
+DESCRIPTOR.message_types_by_name['E2nodeComponentInterfaceX2'] = _E2NODECOMPONENTINTERFACEX2
+DESCRIPTOR.message_types_by_name['GlobalENBID'] = _GLOBALENBID
+DESCRIPTOR.message_types_by_name['GlobalENGNBID'] = _GLOBALENGNBID
+DESCRIPTOR.message_types_by_name['GlobalGNBID'] = _GLOBALGNBID
+DESCRIPTOR.message_types_by_name['GlobalNGENBID'] = _GLOBALNGENBID
+DESCRIPTOR.enum_types_by_name['E2nodeComponentInterfaceType'] = _E2NODECOMPONENTINTERFACETYPE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+E2nodeComponentConfig = _reflection.GeneratedProtocolMessageType('E2nodeComponentConfig', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTCONFIG,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentConfig)
+ })
+_sym_db.RegisterMessage(E2nodeComponentConfig)
+
+E2nodeComponentInterfaceNG = _reflection.GeneratedProtocolMessageType('E2nodeComponentInterfaceNG', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTINTERFACENG,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentInterfaceNG)
+ })
+_sym_db.RegisterMessage(E2nodeComponentInterfaceNG)
+
+E2nodeComponentInterfaceXn = _reflection.GeneratedProtocolMessageType('E2nodeComponentInterfaceXn', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTINTERFACEXN,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentInterfaceXn)
+ })
+_sym_db.RegisterMessage(E2nodeComponentInterfaceXn)
+
+E2nodeComponentInterfaceE1 = _reflection.GeneratedProtocolMessageType('E2nodeComponentInterfaceE1', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTINTERFACEE1,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentInterfaceE1)
+ })
+_sym_db.RegisterMessage(E2nodeComponentInterfaceE1)
+
+E2nodeComponentInterfaceF1 = _reflection.GeneratedProtocolMessageType('E2nodeComponentInterfaceF1', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTINTERFACEF1,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentInterfaceF1)
+ })
+_sym_db.RegisterMessage(E2nodeComponentInterfaceF1)
+
+E2nodeComponentInterfaceW1 = _reflection.GeneratedProtocolMessageType('E2nodeComponentInterfaceW1', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTINTERFACEW1,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentInterfaceW1)
+ })
+_sym_db.RegisterMessage(E2nodeComponentInterfaceW1)
+
+E2nodeComponentInterfaceS1 = _reflection.GeneratedProtocolMessageType('E2nodeComponentInterfaceS1', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTINTERFACES1,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentInterfaceS1)
+ })
+_sym_db.RegisterMessage(E2nodeComponentInterfaceS1)
+
+E2nodeComponentInterfaceX2 = _reflection.GeneratedProtocolMessageType('E2nodeComponentInterfaceX2', (_message.Message,), {
+ 'DESCRIPTOR' : _E2NODECOMPONENTINTERFACEX2,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.E2nodeComponentInterfaceX2)
+ })
+_sym_db.RegisterMessage(E2nodeComponentInterfaceX2)
+
+GlobalENBID = _reflection.GeneratedProtocolMessageType('GlobalENBID', (_message.Message,), {
+ 'DESCRIPTOR' : _GLOBALENBID,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.GlobalENBID)
+ })
+_sym_db.RegisterMessage(GlobalENBID)
+
+GlobalENGNBID = _reflection.GeneratedProtocolMessageType('GlobalENGNBID', (_message.Message,), {
+ 'DESCRIPTOR' : _GLOBALENGNBID,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.GlobalENGNBID)
+ })
+_sym_db.RegisterMessage(GlobalENGNBID)
+
+GlobalGNBID = _reflection.GeneratedProtocolMessageType('GlobalGNBID', (_message.Message,), {
+ 'DESCRIPTOR' : _GLOBALGNBID,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.GlobalGNBID)
+ })
+_sym_db.RegisterMessage(GlobalGNBID)
+
+GlobalNGENBID = _reflection.GeneratedProtocolMessageType('GlobalNGENBID', (_message.Message,), {
+ 'DESCRIPTOR' : _GLOBALNGENBID,
+ '__module__' : 'e2node_component_config_pb2'
+ # @@protoc_insertion_point(class_scope:entities.GlobalNGENBID)
+ })
+_sym_db.RegisterMessage(GlobalNGENBID)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/ricxappframe/entities/rnib/enb_pb2.py b/ricxappframe/entities/rnib/enb_pb2.py
index 7df3324..1fb4b4e 100644
--- a/ricxappframe/entities/rnib/enb_pb2.py
+++ b/ricxappframe/entities/rnib/enb_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: enb.proto
@@ -14,6 +15,8 @@
from . import additional_cell_information_pb2 as additional__cell__information__pb2
+from . import e2node_component_config_pb2 as e2node__component__config__pb2
+from . import nb_types_pb2 as nb__types__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
@@ -21,9 +24,9 @@
package='entities',
syntax='proto3',
serialized_options=None,
- serialized_pb=_b('\n\tenb.proto\x12\x08\x65ntities\x1a!additional_cell_information.proto\"p\n\x03\x45nb\x12#\n\x08\x65nb_type\x18\x01 \x01(\x0e\x32\x11.entities.EnbType\x12.\n\x0cserved_cells\x18\x02 \x03(\x0b\x32\x18.entities.ServedCellInfo\x12\x14\n\x0cgu_group_ids\x18\x03 \x03(\t\"\xc0\x05\n\x0eServedCellInfo\x12\x0b\n\x03pci\x18\x01 \x01(\r\x12\x0f\n\x07\x63\x65ll_id\x18\x02 \x01(\t\x12\x0b\n\x03tac\x18\x03 \x01(\t\x12\x17\n\x0f\x62roadcast_plmns\x18\x04 \x03(\t\x12\x34\n\x11\x63hoice_eutra_mode\x18\x05 \x01(\x0b\x32\x19.entities.ChoiceEUTRAMode\x12(\n\neutra_mode\x18\x06 \x01(\x0e\x32\x14.entities.Eutra.Mode\x12?\n\x17number_of_antenna_ports\x18\x07 \x01(\x0e\x32\x1e.entities.NumberOfAntennaPorts\x12\x39\n\x13prach_configuration\x18\x08 \x01(\x0b\x32\x1c.entities.PrachConfiguration\x12\x35\n\x14mbsfn_subframe_infos\x18\t \x03(\x0b\x32\x17.entities.MbsfnSubframe\x12\x0e\n\x06\x63sg_id\x18\n \x01(\t\x12$\n\x1cmbms_service_area_identities\x18\x0b \x03(\t\x12\x17\n\x0fmultiband_infos\x18\x0c \x03(\r\x12I\n\x1c\x66req_band_indicator_priority\x18\r \x01(\x0e\x32#.entities.FreqBandIndicatorPriority\x12:\n\x14\x62\x61ndwidth_reduced_si\x18\x0e \x01(\x0e\x32\x1c.entities.BandwidthReducedSI\x12\x37\n\x0fneighbour_infos\x18\x0f \x03(\x0b\x32\x1e.entities.NeighbourInformation\x12H\n\x1b\x61\x64\x64itional_cell_information\x18\x10 \x01(\x0b\x32#.entities.AdditionalCellInformation\"Q\n\x0f\x43hoiceEUTRAMode\x12\x1e\n\x03\x66\x64\x64\x18\x01 \x01(\x0b\x32\x11.entities.FddInfo\x12\x1e\n\x03tdd\x18\x02 \x01(\x0b\x32\x11.entities.TddInfo\".\n\x05\x45utra\"%\n\x04Mode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x46\x44\x44\x10\x01\x12\x07\n\x03TDD\x10\x02\"O\n\x14NeighbourInformation\x12\x0c\n\x04\x65\x63gi\x18\x01 \x01(\t\x12\x0b\n\x03pci\x18\x02 \x01(\r\x12\x0f\n\x07\x65\x61r_fcn\x18\x03 \x01(\r\x12\x0b\n\x03tac\x18\x04 \x01(\t\"\xe2\x01\n\rMbsfnSubframe\x12J\n\x1cradioframe_allocation_period\x18\x01 \x01(\x0e\x32$.entities.RadioframeAllocationPeriod\x12$\n\x1cradioframe_allocation_offset\x18\x02 \x01(\r\x12\x1b\n\x13subframe_allocation\x18\x03 \x01(\t\x12\x42\n\x18subframe_allocation_type\x18\x04 \x01(\x0e\x32 .entities.SubframeAllocationType\"\xba\x01\n\x12PrachConfiguration\x12\x1b\n\x13root_sequence_index\x18\x01 \x01(\r\x12+\n#zero_correlation_zone_configuration\x18\x02 \x01(\r\x12\x17\n\x0fhigh_speed_flag\x18\x03 \x01(\x08\x12\x1e\n\x16prach_frequency_offset\x18\x04 \x01(\r\x12!\n\x19prach_configuration_index\x18\x05 \x01(\r\"\x8d\x03\n\x07TddInfo\x12\x0f\n\x07\x65\x61r_fcn\x18\x01 \x01(\r\x12?\n\x16transmission_bandwidth\x18\x02 \x01(\x0e\x32\x1f.entities.TransmissionBandwidth\x12\x39\n\x13subframe_assignment\x18\x03 \x01(\x0e\x32\x1c.entities.SubframeAssignment\x12<\n\x15special_subframe_info\x18\x04 \x01(\x0b\x32\x1d.entities.SpecialSubframeInfo\x12Q\n additional_special_subframe_info\x18\x05 \x01(\x0b\x32\'.entities.AdditionalSpecialSubframeInfo\x12\x64\n*additional_special_subframe_extension_info\x18\x06 \x01(\x0b\x32\x30.entities.AdditionalSpecialSubframeExtensionInfo\"\xfb\x01\n&AdditionalSpecialSubframeExtensionInfo\x12m\n.additional_special_subframe_patterns_extension\x18\x01 \x01(\x0e\x32\x35.entities.AdditionalSpecialSubframePatterns.Extension\x12\x30\n\x10\x63yclic_prefix_dl\x18\x02 \x01(\x0e\x32\x16.entities.CyclicPrefix\x12\x30\n\x10\x63yclic_prefix_ul\x18\x03 \x01(\x0e\x32\x16.entities.CyclicPrefix\"\xdf\x01\n\x1d\x41\x64\x64itionalSpecialSubframeInfo\x12Z\n$additional_special_subframe_patterns\x18\x01 \x01(\x0e\x32,.entities.AdditionalSpecialSubframe.Patterns\x12\x30\n\x10\x63yclic_prefix_dl\x18\x02 \x01(\x0e\x32\x16.entities.CyclicPrefix\x12\x30\n\x10\x63yclic_prefix_ul\x18\x03 \x01(\x0e\x32\x16.entities.CyclicPrefix\"\xb7\x01\n\x07\x46\x64\x64Info\x12\x11\n\tulear_fcn\x18\x01 \x01(\r\x12\x11\n\tdlear_fcn\x18\x02 \x01(\r\x12\x42\n\x19ul_transmission_bandwidth\x18\x03 \x01(\x0e\x32\x1f.entities.TransmissionBandwidth\x12\x42\n\x19\x64l_transmission_bandwidth\x18\x04 \x01(\x0e\x32\x1f.entities.TransmissionBandwidth\"\xc0\x01\n\x13SpecialSubframeInfo\x12\x45\n\x19special_subframe_patterns\x18\x01 \x01(\x0e\x32\".entities.SpecialSubframe.Patterns\x12\x30\n\x10\x63yclic_prefix_dl\x18\x02 \x01(\x0e\x32\x16.entities.CyclicPrefix\x12\x30\n\x10\x63yclic_prefix_ul\x18\x03 \x01(\x0e\x32\x16.entities.CyclicPrefix\"\x84\x01\n\x0fSpecialSubframe\"q\n\x08Patterns\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04SSP0\x10\x01\x12\x08\n\x04SSP1\x10\x02\x12\x08\n\x04SSP2\x10\x03\x12\x08\n\x04SSP3\x10\x04\x12\x08\n\x04SSP4\x10\x05\x12\x08\n\x04SSP5\x10\x06\x12\x08\n\x04SSP6\x10\x07\x12\x08\n\x04SSP7\x10\x08\x12\x08\n\x04SSP8\x10\t\"\x98\x01\n\x19\x41\x64\x64itionalSpecialSubframe\"{\n\x08Patterns\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04SSP0\x10\x01\x12\x08\n\x04SSP1\x10\x02\x12\x08\n\x04SSP2\x10\x03\x12\x08\n\x04SSP3\x10\x04\x12\x08\n\x04SSP4\x10\x05\x12\x08\n\x04SSP5\x10\x06\x12\x08\n\x04SSP6\x10\x07\x12\x08\n\x04SSP7\x10\x08\x12\x08\n\x04SSP8\x10\t\x12\x08\n\x04SSP9\x10\n\"H\n!AdditionalSpecialSubframePatterns\"#\n\tExtension\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05SSP10\x10\x01*k\n\x19\x46reqBandIndicatorPriority\x12(\n$UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY\x10\x00\x12\x13\n\x0fNOT_BROADCASTED\x10\x01\x12\x0f\n\x0b\x42ROADCASTED\x10\x02*E\n\x12\x42\x61ndwidthReducedSI\x12 \n\x1cUNKNOWN_BANDWIDTH_REDUCED_SI\x10\x00\x12\r\n\tSCHEDULED\x10\x01*]\n\x16SubframeAllocationType\x12$\n UNKNOWN_SUBFRAME_ALLOCATION_TYPE\x10\x00\x12\r\n\tONE_FRAME\x10\x01\x12\x0e\n\nFOUR_FRAME\x10\x02*x\n\x1aRadioframeAllocationPeriod\x12(\n$UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD\x10\x00\x12\x06\n\x02N1\x10\x01\x12\x06\n\x02N2\x10\x02\x12\x06\n\x02N4\x10\x03\x12\x06\n\x02N8\x10\x04\x12\x07\n\x03N16\x10\x05\x12\x07\n\x03N32\x10\x06*V\n\x14NumberOfAntennaPorts\x12#\n\x1fUNKNOWN_NUMBER_OF_ANTENNA_PORTS\x10\x00\x12\x07\n\x03\x41N1\x10\x01\x12\x07\n\x03\x41N2\x10\x02\x12\x07\n\x03\x41N4\x10\x03*\xa6\x01\n\x07\x45nbType\x12\x14\n\x10UNKNOWN_ENB_TYPE\x10\x00\x12\r\n\tMACRO_ENB\x10\x01\x12\x0c\n\x08HOME_ENB\x10\x02\x12\x13\n\x0fSHORT_MACRO_ENB\x10\x03\x12\x12\n\x0eLONG_MACRO_ENB\x10\x04\x12\x10\n\x0cMACRO_NG_ENB\x10\x05\x12\x16\n\x12SHORT_MACRO_NG_ENB\x10\x06\x12\x15\n\x11LONG_MACRO_NG_ENB\x10\x07*t\n\x12SubframeAssignment\x12\x1f\n\x1bUNKNOWN_SUBFRAME_ASSIGNMENT\x10\x00\x12\x07\n\x03SA0\x10\x01\x12\x07\n\x03SA1\x10\x02\x12\x07\n\x03SA2\x10\x03\x12\x07\n\x03SA3\x10\x04\x12\x07\n\x03SA4\x10\x05\x12\x07\n\x03SA5\x10\x06\x12\x07\n\x03SA6\x10\x07*C\n\x0c\x43yclicPrefix\x12\x19\n\x15UNKNOWN_CYCLIC_PREFIX\x10\x00\x12\n\n\x06NORMAL\x10\x01\x12\x0c\n\x08\x45XTENDED\x10\x02*\x80\x01\n\x15TransmissionBandwidth\x12\"\n\x1eUNKNOWN_TRANSMISSION_BANDWIDTH\x10\x00\x12\x07\n\x03\x42W6\x10\x01\x12\x08\n\x04\x42W15\x10\x02\x12\x08\n\x04\x42W25\x10\x03\x12\x08\n\x04\x42W50\x10\x04\x12\x08\n\x04\x42W75\x10\x05\x12\t\n\x05\x42W100\x10\x06\x12\x07\n\x03\x42W1\x10\x07\x62\x06proto3')
+ serialized_pb=_b('\n\tenb.proto\x12\x08\x65ntities\x1a!additional_cell_information.proto\x1a\x1d\x65\x32node_component_config.proto\x1a\x0enb_types.proto\"\xa7\x01\n\x03\x45nb\x12#\n\x08\x65nb_type\x18\x01 \x01(\x0e\x32\x11.entities.EnbType\x12.\n\x0cserved_cells\x18\x02 \x03(\x0b\x32\x18.entities.ServedCellInfo\x12\x14\n\x0cgu_group_ids\x18\x03 \x03(\t\x12\x35\n\x0cnode_configs\x18\x04 \x03(\x0b\x32\x1f.entities.E2nodeComponentConfig\"\xc0\x05\n\x0eServedCellInfo\x12\x0b\n\x03pci\x18\x01 \x01(\r\x12\x0f\n\x07\x63\x65ll_id\x18\x02 \x01(\t\x12\x0b\n\x03tac\x18\x03 \x01(\t\x12\x17\n\x0f\x62roadcast_plmns\x18\x04 \x03(\t\x12\x34\n\x11\x63hoice_eutra_mode\x18\x05 \x01(\x0b\x32\x19.entities.ChoiceEUTRAMode\x12(\n\neutra_mode\x18\x06 \x01(\x0e\x32\x14.entities.Eutra.Mode\x12?\n\x17number_of_antenna_ports\x18\x07 \x01(\x0e\x32\x1e.entities.NumberOfAntennaPorts\x12\x39\n\x13prach_configuration\x18\x08 \x01(\x0b\x32\x1c.entities.PrachConfiguration\x12\x35\n\x14mbsfn_subframe_infos\x18\t \x03(\x0b\x32\x17.entities.MbsfnSubframe\x12\x0e\n\x06\x63sg_id\x18\n \x01(\t\x12$\n\x1cmbms_service_area_identities\x18\x0b \x03(\t\x12\x17\n\x0fmultiband_infos\x18\x0c \x03(\r\x12I\n\x1c\x66req_band_indicator_priority\x18\r \x01(\x0e\x32#.entities.FreqBandIndicatorPriority\x12:\n\x14\x62\x61ndwidth_reduced_si\x18\x0e \x01(\x0e\x32\x1c.entities.BandwidthReducedSI\x12\x37\n\x0fneighbour_infos\x18\x0f \x03(\x0b\x32\x1e.entities.NeighbourInformation\x12H\n\x1b\x61\x64\x64itional_cell_information\x18\x10 \x01(\x0b\x32#.entities.AdditionalCellInformation\"Q\n\x0f\x43hoiceEUTRAMode\x12\x1e\n\x03\x66\x64\x64\x18\x01 \x01(\x0b\x32\x11.entities.FddInfo\x12\x1e\n\x03tdd\x18\x02 \x01(\x0b\x32\x11.entities.TddInfo\".\n\x05\x45utra\"%\n\x04Mode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x46\x44\x44\x10\x01\x12\x07\n\x03TDD\x10\x02\"O\n\x14NeighbourInformation\x12\x0c\n\x04\x65\x63gi\x18\x01 \x01(\t\x12\x0b\n\x03pci\x18\x02 \x01(\r\x12\x0f\n\x07\x65\x61r_fcn\x18\x03 \x01(\r\x12\x0b\n\x03tac\x18\x04 \x01(\t\"\xe2\x01\n\rMbsfnSubframe\x12J\n\x1cradioframe_allocation_period\x18\x01 \x01(\x0e\x32$.entities.RadioframeAllocationPeriod\x12$\n\x1cradioframe_allocation_offset\x18\x02 \x01(\r\x12\x1b\n\x13subframe_allocation\x18\x03 \x01(\t\x12\x42\n\x18subframe_allocation_type\x18\x04 \x01(\x0e\x32 .entities.SubframeAllocationType\"\xba\x01\n\x12PrachConfiguration\x12\x1b\n\x13root_sequence_index\x18\x01 \x01(\r\x12+\n#zero_correlation_zone_configuration\x18\x02 \x01(\r\x12\x17\n\x0fhigh_speed_flag\x18\x03 \x01(\x08\x12\x1e\n\x16prach_frequency_offset\x18\x04 \x01(\r\x12!\n\x19prach_configuration_index\x18\x05 \x01(\r\"\x8d\x03\n\x07TddInfo\x12\x0f\n\x07\x65\x61r_fcn\x18\x01 \x01(\r\x12?\n\x16transmission_bandwidth\x18\x02 \x01(\x0e\x32\x1f.entities.TransmissionBandwidth\x12\x39\n\x13subframe_assignment\x18\x03 \x01(\x0e\x32\x1c.entities.SubframeAssignment\x12<\n\x15special_subframe_info\x18\x04 \x01(\x0b\x32\x1d.entities.SpecialSubframeInfo\x12Q\n additional_special_subframe_info\x18\x05 \x01(\x0b\x32\'.entities.AdditionalSpecialSubframeInfo\x12\x64\n*additional_special_subframe_extension_info\x18\x06 \x01(\x0b\x32\x30.entities.AdditionalSpecialSubframeExtensionInfo\"\xfb\x01\n&AdditionalSpecialSubframeExtensionInfo\x12m\n.additional_special_subframe_patterns_extension\x18\x01 \x01(\x0e\x32\x35.entities.AdditionalSpecialSubframePatterns.Extension\x12\x30\n\x10\x63yclic_prefix_dl\x18\x02 \x01(\x0e\x32\x16.entities.CyclicPrefix\x12\x30\n\x10\x63yclic_prefix_ul\x18\x03 \x01(\x0e\x32\x16.entities.CyclicPrefix\"\xdf\x01\n\x1d\x41\x64\x64itionalSpecialSubframeInfo\x12Z\n$additional_special_subframe_patterns\x18\x01 \x01(\x0e\x32,.entities.AdditionalSpecialSubframe.Patterns\x12\x30\n\x10\x63yclic_prefix_dl\x18\x02 \x01(\x0e\x32\x16.entities.CyclicPrefix\x12\x30\n\x10\x63yclic_prefix_ul\x18\x03 \x01(\x0e\x32\x16.entities.CyclicPrefix\"\xb7\x01\n\x07\x46\x64\x64Info\x12\x11\n\tulear_fcn\x18\x01 \x01(\r\x12\x11\n\tdlear_fcn\x18\x02 \x01(\r\x12\x42\n\x19ul_transmission_bandwidth\x18\x03 \x01(\x0e\x32\x1f.entities.TransmissionBandwidth\x12\x42\n\x19\x64l_transmission_bandwidth\x18\x04 \x01(\x0e\x32\x1f.entities.TransmissionBandwidth\"\xc0\x01\n\x13SpecialSubframeInfo\x12\x45\n\x19special_subframe_patterns\x18\x01 \x01(\x0e\x32\".entities.SpecialSubframe.Patterns\x12\x30\n\x10\x63yclic_prefix_dl\x18\x02 \x01(\x0e\x32\x16.entities.CyclicPrefix\x12\x30\n\x10\x63yclic_prefix_ul\x18\x03 \x01(\x0e\x32\x16.entities.CyclicPrefix\"\x84\x01\n\x0fSpecialSubframe\"q\n\x08Patterns\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04SSP0\x10\x01\x12\x08\n\x04SSP1\x10\x02\x12\x08\n\x04SSP2\x10\x03\x12\x08\n\x04SSP3\x10\x04\x12\x08\n\x04SSP4\x10\x05\x12\x08\n\x04SSP5\x10\x06\x12\x08\n\x04SSP6\x10\x07\x12\x08\n\x04SSP7\x10\x08\x12\x08\n\x04SSP8\x10\t\"\x98\x01\n\x19\x41\x64\x64itionalSpecialSubframe\"{\n\x08Patterns\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04SSP0\x10\x01\x12\x08\n\x04SSP1\x10\x02\x12\x08\n\x04SSP2\x10\x03\x12\x08\n\x04SSP3\x10\x04\x12\x08\n\x04SSP4\x10\x05\x12\x08\n\x04SSP5\x10\x06\x12\x08\n\x04SSP6\x10\x07\x12\x08\n\x04SSP7\x10\x08\x12\x08\n\x04SSP8\x10\t\x12\x08\n\x04SSP9\x10\n\"H\n!AdditionalSpecialSubframePatterns\"#\n\tExtension\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05SSP10\x10\x01*k\n\x19\x46reqBandIndicatorPriority\x12(\n$UNKNOWN_FREQ_BAND_INDICATOR_PRIORITY\x10\x00\x12\x13\n\x0fNOT_BROADCASTED\x10\x01\x12\x0f\n\x0b\x42ROADCASTED\x10\x02*E\n\x12\x42\x61ndwidthReducedSI\x12 \n\x1cUNKNOWN_BANDWIDTH_REDUCED_SI\x10\x00\x12\r\n\tSCHEDULED\x10\x01*]\n\x16SubframeAllocationType\x12$\n UNKNOWN_SUBFRAME_ALLOCATION_TYPE\x10\x00\x12\r\n\tONE_FRAME\x10\x01\x12\x0e\n\nFOUR_FRAME\x10\x02*x\n\x1aRadioframeAllocationPeriod\x12(\n$UNKNOWN_RADIOFRAME_ALLOCATION_PERIOD\x10\x00\x12\x06\n\x02N1\x10\x01\x12\x06\n\x02N2\x10\x02\x12\x06\n\x02N4\x10\x03\x12\x06\n\x02N8\x10\x04\x12\x07\n\x03N16\x10\x05\x12\x07\n\x03N32\x10\x06*V\n\x14NumberOfAntennaPorts\x12#\n\x1fUNKNOWN_NUMBER_OF_ANTENNA_PORTS\x10\x00\x12\x07\n\x03\x41N1\x10\x01\x12\x07\n\x03\x41N2\x10\x02\x12\x07\n\x03\x41N4\x10\x03*t\n\x12SubframeAssignment\x12\x1f\n\x1bUNKNOWN_SUBFRAME_ASSIGNMENT\x10\x00\x12\x07\n\x03SA0\x10\x01\x12\x07\n\x03SA1\x10\x02\x12\x07\n\x03SA2\x10\x03\x12\x07\n\x03SA3\x10\x04\x12\x07\n\x03SA4\x10\x05\x12\x07\n\x03SA5\x10\x06\x12\x07\n\x03SA6\x10\x07*C\n\x0c\x43yclicPrefix\x12\x19\n\x15UNKNOWN_CYCLIC_PREFIX\x10\x00\x12\n\n\x06NORMAL\x10\x01\x12\x0c\n\x08\x45XTENDED\x10\x02*\x80\x01\n\x15TransmissionBandwidth\x12\"\n\x1eUNKNOWN_TRANSMISSION_BANDWIDTH\x10\x00\x12\x07\n\x03\x42W6\x10\x01\x12\x08\n\x04\x42W15\x10\x02\x12\x08\n\x04\x42W25\x10\x03\x12\x08\n\x04\x42W50\x10\x04\x12\x08\n\x04\x42W75\x10\x05\x12\t\n\x05\x42W100\x10\x06\x12\x07\n\x03\x42W1\x10\x07\x62\x06proto3')
,
- dependencies=[additional__cell__information__pb2.DESCRIPTOR,])
+ dependencies=[additional__cell__information__pb2.DESCRIPTOR,e2node__component__config__pb2.DESCRIPTOR,nb__types__pb2.DESCRIPTOR,])
_FREQBANDINDICATORPRIORITY = _descriptor.EnumDescriptor(
name='FreqBandIndicatorPriority',
@@ -46,8 +49,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3134,
- serialized_end=3241,
+ serialized_start=3237,
+ serialized_end=3344,
)
_sym_db.RegisterEnumDescriptor(_FREQBANDINDICATORPRIORITY)
@@ -69,8 +72,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3243,
- serialized_end=3312,
+ serialized_start=3346,
+ serialized_end=3415,
)
_sym_db.RegisterEnumDescriptor(_BANDWIDTHREDUCEDSI)
@@ -96,8 +99,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3314,
- serialized_end=3407,
+ serialized_start=3417,
+ serialized_end=3510,
)
_sym_db.RegisterEnumDescriptor(_SUBFRAMEALLOCATIONTYPE)
@@ -139,8 +142,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3409,
- serialized_end=3529,
+ serialized_start=3512,
+ serialized_end=3632,
)
_sym_db.RegisterEnumDescriptor(_RADIOFRAMEALLOCATIONPERIOD)
@@ -170,59 +173,12 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3531,
- serialized_end=3617,
+ serialized_start=3634,
+ serialized_end=3720,
)
_sym_db.RegisterEnumDescriptor(_NUMBEROFANTENNAPORTS)
NumberOfAntennaPorts = enum_type_wrapper.EnumTypeWrapper(_NUMBEROFANTENNAPORTS)
-_ENBTYPE = _descriptor.EnumDescriptor(
- name='EnbType',
- full_name='entities.EnbType',
- filename=None,
- file=DESCRIPTOR,
- values=[
- _descriptor.EnumValueDescriptor(
- name='UNKNOWN_ENB_TYPE', index=0, number=0,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='MACRO_ENB', index=1, number=1,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='HOME_ENB', index=2, number=2,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='SHORT_MACRO_ENB', index=3, number=3,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='LONG_MACRO_ENB', index=4, number=4,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='MACRO_NG_ENB', index=5, number=5,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='SHORT_MACRO_NG_ENB', index=6, number=6,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='LONG_MACRO_NG_ENB', index=7, number=7,
- serialized_options=None,
- type=None),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=3620,
- serialized_end=3786,
-)
-_sym_db.RegisterEnumDescriptor(_ENBTYPE)
-
-EnbType = enum_type_wrapper.EnumTypeWrapper(_ENBTYPE)
_SUBFRAMEASSIGNMENT = _descriptor.EnumDescriptor(
name='SubframeAssignment',
full_name='entities.SubframeAssignment',
@@ -264,8 +220,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3788,
- serialized_end=3904,
+ serialized_start=3722,
+ serialized_end=3838,
)
_sym_db.RegisterEnumDescriptor(_SUBFRAMEASSIGNMENT)
@@ -291,8 +247,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3906,
- serialized_end=3973,
+ serialized_start=3840,
+ serialized_end=3907,
)
_sym_db.RegisterEnumDescriptor(_CYCLICPREFIX)
@@ -338,8 +294,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3976,
- serialized_end=4104,
+ serialized_start=3910,
+ serialized_end=4038,
)
_sym_db.RegisterEnumDescriptor(_TRANSMISSIONBANDWIDTH)
@@ -363,14 +319,6 @@
AN1 = 1
AN2 = 2
AN4 = 3
-UNKNOWN_ENB_TYPE = 0
-MACRO_ENB = 1
-HOME_ENB = 2
-SHORT_MACRO_ENB = 3
-LONG_MACRO_ENB = 4
-MACRO_NG_ENB = 5
-SHORT_MACRO_NG_ENB = 6
-LONG_MACRO_NG_ENB = 7
UNKNOWN_SUBFRAME_ASSIGNMENT = 0
SA0 = 1
SA1 = 2
@@ -413,8 +361,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=971,
- serialized_end=1008,
+ serialized_start=1074,
+ serialized_end=1111,
)
_sym_db.RegisterEnumDescriptor(_EUTRA_MODE)
@@ -467,8 +415,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=2790,
- serialized_end=2903,
+ serialized_start=2893,
+ serialized_end=3006,
)
_sym_db.RegisterEnumDescriptor(_SPECIALSUBFRAME_PATTERNS)
@@ -525,8 +473,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=2935,
- serialized_end=3058,
+ serialized_start=3038,
+ serialized_end=3161,
)
_sym_db.RegisterEnumDescriptor(_ADDITIONALSPECIALSUBFRAME_PATTERNS)
@@ -547,8 +495,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=3097,
- serialized_end=3132,
+ serialized_start=3200,
+ serialized_end=3235,
)
_sym_db.RegisterEnumDescriptor(_ADDITIONALSPECIALSUBFRAMEPATTERNS_EXTENSION)
@@ -581,6 +529,13 @@
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='node_configs', full_name='entities.Enb.node_configs', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -593,8 +548,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=58,
- serialized_end=170,
+ serialized_start=106,
+ serialized_end=273,
)
@@ -729,8 +684,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=173,
- serialized_end=877,
+ serialized_start=276,
+ serialized_end=980,
)
@@ -767,8 +722,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=879,
- serialized_end=960,
+ serialized_start=982,
+ serialized_end=1063,
)
@@ -792,8 +747,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=962,
- serialized_end=1008,
+ serialized_start=1065,
+ serialized_end=1111,
)
@@ -844,8 +799,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1010,
- serialized_end=1089,
+ serialized_start=1113,
+ serialized_end=1192,
)
@@ -896,8 +851,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1092,
- serialized_end=1318,
+ serialized_start=1195,
+ serialized_end=1421,
)
@@ -955,8 +910,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1321,
- serialized_end=1507,
+ serialized_start=1424,
+ serialized_end=1610,
)
@@ -1021,8 +976,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1510,
- serialized_end=1907,
+ serialized_start=1613,
+ serialized_end=2010,
)
@@ -1066,8 +1021,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1910,
- serialized_end=2161,
+ serialized_start=2013,
+ serialized_end=2264,
)
@@ -1111,8 +1066,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2164,
- serialized_end=2387,
+ serialized_start=2267,
+ serialized_end=2490,
)
@@ -1163,8 +1118,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2390,
- serialized_end=2573,
+ serialized_start=2493,
+ serialized_end=2676,
)
@@ -1208,8 +1163,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2576,
- serialized_end=2768,
+ serialized_start=2679,
+ serialized_end=2871,
)
@@ -1233,8 +1188,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2771,
- serialized_end=2903,
+ serialized_start=2874,
+ serialized_end=3006,
)
@@ -1258,8 +1213,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2906,
- serialized_end=3058,
+ serialized_start=3009,
+ serialized_end=3161,
)
@@ -1283,12 +1238,13 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=3060,
- serialized_end=3132,
+ serialized_start=3163,
+ serialized_end=3235,
)
-_ENB.fields_by_name['enb_type'].enum_type = _ENBTYPE
+_ENB.fields_by_name['enb_type'].enum_type = nb__types__pb2._ENBTYPE
_ENB.fields_by_name['served_cells'].message_type = _SERVEDCELLINFO
+_ENB.fields_by_name['node_configs'].message_type = e2node__component__config__pb2._E2NODECOMPONENTCONFIG
_SERVEDCELLINFO.fields_by_name['choice_eutra_mode'].message_type = _CHOICEEUTRAMODE
_SERVEDCELLINFO.fields_by_name['eutra_mode'].enum_type = _EUTRA_MODE
_SERVEDCELLINFO.fields_by_name['number_of_antenna_ports'].enum_type = _NUMBEROFANTENNAPORTS
@@ -1342,115 +1298,114 @@
DESCRIPTOR.enum_types_by_name['SubframeAllocationType'] = _SUBFRAMEALLOCATIONTYPE
DESCRIPTOR.enum_types_by_name['RadioframeAllocationPeriod'] = _RADIOFRAMEALLOCATIONPERIOD
DESCRIPTOR.enum_types_by_name['NumberOfAntennaPorts'] = _NUMBEROFANTENNAPORTS
-DESCRIPTOR.enum_types_by_name['EnbType'] = _ENBTYPE
DESCRIPTOR.enum_types_by_name['SubframeAssignment'] = _SUBFRAMEASSIGNMENT
DESCRIPTOR.enum_types_by_name['CyclicPrefix'] = _CYCLICPREFIX
DESCRIPTOR.enum_types_by_name['TransmissionBandwidth'] = _TRANSMISSIONBANDWIDTH
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-Enb = _reflection.GeneratedProtocolMessageType('Enb', (_message.Message,), dict(
- DESCRIPTOR = _ENB,
- __module__ = 'enb_pb2'
+Enb = _reflection.GeneratedProtocolMessageType('Enb', (_message.Message,), {
+ 'DESCRIPTOR' : _ENB,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.Enb)
- ))
+ })
_sym_db.RegisterMessage(Enb)
-ServedCellInfo = _reflection.GeneratedProtocolMessageType('ServedCellInfo', (_message.Message,), dict(
- DESCRIPTOR = _SERVEDCELLINFO,
- __module__ = 'enb_pb2'
+ServedCellInfo = _reflection.GeneratedProtocolMessageType('ServedCellInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _SERVEDCELLINFO,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedCellInfo)
- ))
+ })
_sym_db.RegisterMessage(ServedCellInfo)
-ChoiceEUTRAMode = _reflection.GeneratedProtocolMessageType('ChoiceEUTRAMode', (_message.Message,), dict(
- DESCRIPTOR = _CHOICEEUTRAMODE,
- __module__ = 'enb_pb2'
+ChoiceEUTRAMode = _reflection.GeneratedProtocolMessageType('ChoiceEUTRAMode', (_message.Message,), {
+ 'DESCRIPTOR' : _CHOICEEUTRAMODE,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.ChoiceEUTRAMode)
- ))
+ })
_sym_db.RegisterMessage(ChoiceEUTRAMode)
-Eutra = _reflection.GeneratedProtocolMessageType('Eutra', (_message.Message,), dict(
- DESCRIPTOR = _EUTRA,
- __module__ = 'enb_pb2'
+Eutra = _reflection.GeneratedProtocolMessageType('Eutra', (_message.Message,), {
+ 'DESCRIPTOR' : _EUTRA,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.Eutra)
- ))
+ })
_sym_db.RegisterMessage(Eutra)
-NeighbourInformation = _reflection.GeneratedProtocolMessageType('NeighbourInformation', (_message.Message,), dict(
- DESCRIPTOR = _NEIGHBOURINFORMATION,
- __module__ = 'enb_pb2'
+NeighbourInformation = _reflection.GeneratedProtocolMessageType('NeighbourInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _NEIGHBOURINFORMATION,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.NeighbourInformation)
- ))
+ })
_sym_db.RegisterMessage(NeighbourInformation)
-MbsfnSubframe = _reflection.GeneratedProtocolMessageType('MbsfnSubframe', (_message.Message,), dict(
- DESCRIPTOR = _MBSFNSUBFRAME,
- __module__ = 'enb_pb2'
+MbsfnSubframe = _reflection.GeneratedProtocolMessageType('MbsfnSubframe', (_message.Message,), {
+ 'DESCRIPTOR' : _MBSFNSUBFRAME,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.MbsfnSubframe)
- ))
+ })
_sym_db.RegisterMessage(MbsfnSubframe)
-PrachConfiguration = _reflection.GeneratedProtocolMessageType('PrachConfiguration', (_message.Message,), dict(
- DESCRIPTOR = _PRACHCONFIGURATION,
- __module__ = 'enb_pb2'
+PrachConfiguration = _reflection.GeneratedProtocolMessageType('PrachConfiguration', (_message.Message,), {
+ 'DESCRIPTOR' : _PRACHCONFIGURATION,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.PrachConfiguration)
- ))
+ })
_sym_db.RegisterMessage(PrachConfiguration)
-TddInfo = _reflection.GeneratedProtocolMessageType('TddInfo', (_message.Message,), dict(
- DESCRIPTOR = _TDDINFO,
- __module__ = 'enb_pb2'
+TddInfo = _reflection.GeneratedProtocolMessageType('TddInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _TDDINFO,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.TddInfo)
- ))
+ })
_sym_db.RegisterMessage(TddInfo)
-AdditionalSpecialSubframeExtensionInfo = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframeExtensionInfo', (_message.Message,), dict(
- DESCRIPTOR = _ADDITIONALSPECIALSUBFRAMEEXTENSIONINFO,
- __module__ = 'enb_pb2'
+AdditionalSpecialSubframeExtensionInfo = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframeExtensionInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _ADDITIONALSPECIALSUBFRAMEEXTENSIONINFO,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.AdditionalSpecialSubframeExtensionInfo)
- ))
+ })
_sym_db.RegisterMessage(AdditionalSpecialSubframeExtensionInfo)
-AdditionalSpecialSubframeInfo = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframeInfo', (_message.Message,), dict(
- DESCRIPTOR = _ADDITIONALSPECIALSUBFRAMEINFO,
- __module__ = 'enb_pb2'
+AdditionalSpecialSubframeInfo = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframeInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _ADDITIONALSPECIALSUBFRAMEINFO,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.AdditionalSpecialSubframeInfo)
- ))
+ })
_sym_db.RegisterMessage(AdditionalSpecialSubframeInfo)
-FddInfo = _reflection.GeneratedProtocolMessageType('FddInfo', (_message.Message,), dict(
- DESCRIPTOR = _FDDINFO,
- __module__ = 'enb_pb2'
+FddInfo = _reflection.GeneratedProtocolMessageType('FddInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _FDDINFO,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.FddInfo)
- ))
+ })
_sym_db.RegisterMessage(FddInfo)
-SpecialSubframeInfo = _reflection.GeneratedProtocolMessageType('SpecialSubframeInfo', (_message.Message,), dict(
- DESCRIPTOR = _SPECIALSUBFRAMEINFO,
- __module__ = 'enb_pb2'
+SpecialSubframeInfo = _reflection.GeneratedProtocolMessageType('SpecialSubframeInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _SPECIALSUBFRAMEINFO,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.SpecialSubframeInfo)
- ))
+ })
_sym_db.RegisterMessage(SpecialSubframeInfo)
-SpecialSubframe = _reflection.GeneratedProtocolMessageType('SpecialSubframe', (_message.Message,), dict(
- DESCRIPTOR = _SPECIALSUBFRAME,
- __module__ = 'enb_pb2'
+SpecialSubframe = _reflection.GeneratedProtocolMessageType('SpecialSubframe', (_message.Message,), {
+ 'DESCRIPTOR' : _SPECIALSUBFRAME,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.SpecialSubframe)
- ))
+ })
_sym_db.RegisterMessage(SpecialSubframe)
-AdditionalSpecialSubframe = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframe', (_message.Message,), dict(
- DESCRIPTOR = _ADDITIONALSPECIALSUBFRAME,
- __module__ = 'enb_pb2'
+AdditionalSpecialSubframe = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframe', (_message.Message,), {
+ 'DESCRIPTOR' : _ADDITIONALSPECIALSUBFRAME,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.AdditionalSpecialSubframe)
- ))
+ })
_sym_db.RegisterMessage(AdditionalSpecialSubframe)
-AdditionalSpecialSubframePatterns = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframePatterns', (_message.Message,), dict(
- DESCRIPTOR = _ADDITIONALSPECIALSUBFRAMEPATTERNS,
- __module__ = 'enb_pb2'
+AdditionalSpecialSubframePatterns = _reflection.GeneratedProtocolMessageType('AdditionalSpecialSubframePatterns', (_message.Message,), {
+ 'DESCRIPTOR' : _ADDITIONALSPECIALSUBFRAMEPATTERNS,
+ '__module__' : 'enb_pb2'
# @@protoc_insertion_point(class_scope:entities.AdditionalSpecialSubframePatterns)
- ))
+ })
_sym_db.RegisterMessage(AdditionalSpecialSubframePatterns)
diff --git a/ricxappframe/entities/rnib/gnb_pb2.py b/ricxappframe/entities/rnib/gnb_pb2.py
index 8e0bce4..7dbcdf7 100644
--- a/ricxappframe/entities/rnib/gnb_pb2.py
+++ b/ricxappframe/entities/rnib/gnb_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: gnb.proto
@@ -14,7 +15,9 @@
from . import ran_function_pb2 as ran__function__pb2
+from . import e2node_component_config_pb2 as e2node__component__config__pb2
from . import additional_cell_information_pb2 as additional__cell__information__pb2
+from . import nb_types_pb2 as nb__types__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
@@ -22,9 +25,9 @@
package='entities',
syntax='proto3',
serialized_options=None,
- serialized_pb=_b('\n\tgnb.proto\x12\x08\x65ntities\x1a\x12ran_function.proto\x1a!additional_cell_information.proto\"\x89\x01\n\x03Gnb\x12/\n\x0fserved_nr_cells\x18\x01 \x03(\x0b\x32\x16.entities.ServedNRCell\x12,\n\rran_functions\x18\x02 \x03(\x0b\x32\x15.entities.RanFunction\x12#\n\x08gnb_type\x18\x03 \x01(\x0e\x32\x11.entities.GnbType\"\x93\x01\n\x0cServedNRCell\x12\x45\n\x1aserved_nr_cell_information\x18\x01 \x01(\x0b\x32!.entities.ServedNRCellInformation\x12<\n\x12nr_neighbour_infos\x18\x02 \x03(\x0b\x32 .entities.NrNeighbourInformation\"\xc3\x06\n\x17ServedNRCellInformation\x12\x0e\n\x06nr_pci\x18\x01 \x01(\r\x12\x0f\n\x07\x63\x65ll_id\x18\x02 \x01(\t\x12\x0e\n\x06stac5g\x18\x03 \x01(\t\x12\x17\n\x0f\x63onfigured_stac\x18\x04 \x01(\t\x12\x14\n\x0cserved_plmns\x18\x05 \x03(\t\x12\"\n\x07nr_mode\x18\x06 \x01(\x0e\x32\x11.entities.Nr.Mode\x12\x46\n\x0e\x63hoice_nr_mode\x18\x07 \x01(\x0b\x32..entities.ServedNRCellInformation.ChoiceNRMode\x12H\n\x1b\x61\x64\x64itional_cell_information\x18\x08 \x01(\x0b\x32#.entities.AdditionalCellInformation\x1a\x91\x04\n\x0c\x43hoiceNRMode\x12\x43\n\x03\x66\x64\x64\x18\x01 \x01(\x0b\x32\x36.entities.ServedNRCellInformation.ChoiceNRMode.FddInfo\x12\x43\n\x03tdd\x18\x02 \x01(\x0b\x32\x36.entities.ServedNRCellInformation.ChoiceNRMode.TddInfo\x1a\xf7\x01\n\x07\x46\x64\x64Info\x12/\n\x0cul_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12/\n\x0c\x64l_freq_info\x18\x02 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12\x44\n\x19ul_transmission_bandwidth\x18\x03 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\x12\x44\n\x19\x64l_transmission_bandwidth\x18\x04 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\x1a}\n\x07TddInfo\x12/\n\x0cnr_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12\x41\n\x16transmission_bandwidth\x18\x02 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\"+\n\x02Nr\"%\n\x04Mode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x46\x44\x44\x10\x01\x12\x07\n\x03TDD\x10\x02\"\x89\x02\n\x0fNrFrequencyInfo\x12\x11\n\tnr_ar_fcn\x18\x01 \x01(\x04\x12@\n\x0esulInformation\x18\x03 \x01(\x0b\x32(.entities.NrFrequencyInfo.SulInformation\x12\x34\n\x0f\x66requency_bands\x18\x04 \x03(\x0b\x32\x1b.entities.FrequencyBandItem\x1ak\n\x0eSulInformation\x12\x12\n\nsul_ar_fcn\x18\x01 \x01(\x04\x12\x45\n\x1asul_transmission_bandwidth\x18\x02 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\"K\n\x11\x46requencyBandItem\x12\x19\n\x11nr_frequency_band\x18\x01 \x01(\r\x12\x1b\n\x13supported_sul_bands\x18\x02 \x03(\r\"Y\n\x17NrTransmissionBandwidth\x12\x1e\n\x05nrscs\x18\x01 \x01(\x0e\x32\x0f.entities.Nrscs\x12\x1e\n\x05ncnrb\x18\x02 \x01(\x0e\x32\x0f.entities.Ncnrb\"\xa1\x04\n\x16NrNeighbourInformation\x12\x0e\n\x06nr_pci\x18\x01 \x01(\r\x12\x0e\n\x06nr_cgi\x18\x02 \x01(\t\x12\"\n\x07nr_mode\x18\x03 \x01(\x0e\x32\x11.entities.Nr.Mode\x12\x45\n\x0e\x63hoice_nr_mode\x18\x04 \x01(\x0b\x32-.entities.NrNeighbourInformation.ChoiceNRMode\x12\x0e\n\x06stac5g\x18\x05 \x01(\t\x12\x17\n\x0f\x63onfigured_stac\x18\x06 \x01(\t\x1a\xd2\x02\n\x0c\x43hoiceNRMode\x12\x42\n\x03\x66\x64\x64\x18\x01 \x01(\x0b\x32\x35.entities.NrNeighbourInformation.ChoiceNRMode.FddInfo\x12\x42\n\x03tdd\x18\x02 \x01(\x0b\x32\x35.entities.NrNeighbourInformation.ChoiceNRMode.TddInfo\x1aw\n\x07\x46\x64\x64Info\x12\x35\n\x12ular_fcn_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12\x35\n\x12\x64lar_fcn_freq_info\x18\x02 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x1a\x41\n\x07TddInfo\x12\x36\n\x13\x61r_fcn_nr_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo*G\n\x05Nrscs\x12\x11\n\rUNKNOWN_NRSCS\x10\x00\x12\t\n\x05SCS15\x10\x01\x12\t\n\x05SCS30\x10\x02\x12\t\n\x05SCS60\x10\x03\x12\n\n\x06SCS120\x10\x04*\xe8\x02\n\x05Ncnrb\x12\x11\n\rUNKNOWN_NCNRB\x10\x00\x12\t\n\x05NRB11\x10\x01\x12\t\n\x05NRB18\x10\x02\x12\t\n\x05NRB24\x10\x03\x12\t\n\x05NRB25\x10\x04\x12\t\n\x05NRB31\x10\x05\x12\t\n\x05NRB32\x10\x06\x12\t\n\x05NRB38\x10\x07\x12\t\n\x05NRB51\x10\x08\x12\t\n\x05NRB52\x10\t\x12\t\n\x05NRB65\x10\n\x12\t\n\x05NRB66\x10\x0b\x12\t\n\x05NRB78\x10\x0c\x12\t\n\x05NRB79\x10\r\x12\t\n\x05NRB93\x10\x0e\x12\n\n\x06NRB106\x10\x0f\x12\n\n\x06NRB107\x10\x10\x12\n\n\x06NRB121\x10\x11\x12\n\n\x06NRB132\x10\x12\x12\n\n\x06NRB133\x10\x13\x12\n\n\x06NRB135\x10\x14\x12\n\n\x06NRB160\x10\x15\x12\n\n\x06NRB162\x10\x16\x12\n\n\x06NRB189\x10\x17\x12\n\n\x06NRB216\x10\x18\x12\n\n\x06NRB217\x10\x19\x12\n\n\x06NRB245\x10\x1a\x12\n\n\x06NRB264\x10\x1b\x12\n\n\x06NRB270\x10\x1c\x12\n\n\x06NRB273\x10\x1d*4\n\x07GnbType\x12\x14\n\x10UNKNOWN_GNB_TYPE\x10\x00\x12\x07\n\x03GNB\x10\x01\x12\n\n\x06\x45N_GNB\x10\x02\x62\x06proto3')
+ serialized_pb=_b('\n\tgnb.proto\x12\x08\x65ntities\x1a\x12ran_function.proto\x1a\x1d\x65\x32node_component_config.proto\x1a!additional_cell_information.proto\x1a\x0enb_types.proto\"\xc0\x01\n\x03Gnb\x12/\n\x0fserved_nr_cells\x18\x01 \x03(\x0b\x32\x16.entities.ServedNRCell\x12,\n\rran_functions\x18\x02 \x03(\x0b\x32\x15.entities.RanFunction\x12#\n\x08gnb_type\x18\x03 \x01(\x0e\x32\x11.entities.GnbType\x12\x35\n\x0cnode_configs\x18\x04 \x03(\x0b\x32\x1f.entities.E2nodeComponentConfig\"\x93\x01\n\x0cServedNRCell\x12\x45\n\x1aserved_nr_cell_information\x18\x01 \x01(\x0b\x32!.entities.ServedNRCellInformation\x12<\n\x12nr_neighbour_infos\x18\x02 \x03(\x0b\x32 .entities.NrNeighbourInformation\"\xc3\x06\n\x17ServedNRCellInformation\x12\x0e\n\x06nr_pci\x18\x01 \x01(\r\x12\x0f\n\x07\x63\x65ll_id\x18\x02 \x01(\t\x12\x0e\n\x06stac5g\x18\x03 \x01(\t\x12\x17\n\x0f\x63onfigured_stac\x18\x04 \x01(\t\x12\x14\n\x0cserved_plmns\x18\x05 \x03(\t\x12\"\n\x07nr_mode\x18\x06 \x01(\x0e\x32\x11.entities.Nr.Mode\x12\x46\n\x0e\x63hoice_nr_mode\x18\x07 \x01(\x0b\x32..entities.ServedNRCellInformation.ChoiceNRMode\x12H\n\x1b\x61\x64\x64itional_cell_information\x18\x08 \x01(\x0b\x32#.entities.AdditionalCellInformation\x1a\x91\x04\n\x0c\x43hoiceNRMode\x12\x43\n\x03\x66\x64\x64\x18\x01 \x01(\x0b\x32\x36.entities.ServedNRCellInformation.ChoiceNRMode.FddInfo\x12\x43\n\x03tdd\x18\x02 \x01(\x0b\x32\x36.entities.ServedNRCellInformation.ChoiceNRMode.TddInfo\x1a\xf7\x01\n\x07\x46\x64\x64Info\x12/\n\x0cul_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12/\n\x0c\x64l_freq_info\x18\x02 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12\x44\n\x19ul_transmission_bandwidth\x18\x03 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\x12\x44\n\x19\x64l_transmission_bandwidth\x18\x04 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\x1a}\n\x07TddInfo\x12/\n\x0cnr_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12\x41\n\x16transmission_bandwidth\x18\x02 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\"+\n\x02Nr\"%\n\x04Mode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x46\x44\x44\x10\x01\x12\x07\n\x03TDD\x10\x02\"\x89\x02\n\x0fNrFrequencyInfo\x12\x11\n\tnr_ar_fcn\x18\x01 \x01(\x04\x12@\n\x0esulInformation\x18\x03 \x01(\x0b\x32(.entities.NrFrequencyInfo.SulInformation\x12\x34\n\x0f\x66requency_bands\x18\x04 \x03(\x0b\x32\x1b.entities.FrequencyBandItem\x1ak\n\x0eSulInformation\x12\x12\n\nsul_ar_fcn\x18\x01 \x01(\x04\x12\x45\n\x1asul_transmission_bandwidth\x18\x02 \x01(\x0b\x32!.entities.NrTransmissionBandwidth\"K\n\x11\x46requencyBandItem\x12\x19\n\x11nr_frequency_band\x18\x01 \x01(\r\x12\x1b\n\x13supported_sul_bands\x18\x02 \x03(\r\"Y\n\x17NrTransmissionBandwidth\x12\x1e\n\x05nrscs\x18\x01 \x01(\x0e\x32\x0f.entities.Nrscs\x12\x1e\n\x05ncnrb\x18\x02 \x01(\x0e\x32\x0f.entities.Ncnrb\"\xa1\x04\n\x16NrNeighbourInformation\x12\x0e\n\x06nr_pci\x18\x01 \x01(\r\x12\x0e\n\x06nr_cgi\x18\x02 \x01(\t\x12\"\n\x07nr_mode\x18\x03 \x01(\x0e\x32\x11.entities.Nr.Mode\x12\x45\n\x0e\x63hoice_nr_mode\x18\x04 \x01(\x0b\x32-.entities.NrNeighbourInformation.ChoiceNRMode\x12\x0e\n\x06stac5g\x18\x05 \x01(\t\x12\x17\n\x0f\x63onfigured_stac\x18\x06 \x01(\t\x1a\xd2\x02\n\x0c\x43hoiceNRMode\x12\x42\n\x03\x66\x64\x64\x18\x01 \x01(\x0b\x32\x35.entities.NrNeighbourInformation.ChoiceNRMode.FddInfo\x12\x42\n\x03tdd\x18\x02 \x01(\x0b\x32\x35.entities.NrNeighbourInformation.ChoiceNRMode.TddInfo\x1aw\n\x07\x46\x64\x64Info\x12\x35\n\x12ular_fcn_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x12\x35\n\x12\x64lar_fcn_freq_info\x18\x02 \x01(\x0b\x32\x19.entities.NrFrequencyInfo\x1a\x41\n\x07TddInfo\x12\x36\n\x13\x61r_fcn_nr_freq_info\x18\x01 \x01(\x0b\x32\x19.entities.NrFrequencyInfo*G\n\x05Nrscs\x12\x11\n\rUNKNOWN_NRSCS\x10\x00\x12\t\n\x05SCS15\x10\x01\x12\t\n\x05SCS30\x10\x02\x12\t\n\x05SCS60\x10\x03\x12\n\n\x06SCS120\x10\x04*\xe8\x02\n\x05Ncnrb\x12\x11\n\rUNKNOWN_NCNRB\x10\x00\x12\t\n\x05NRB11\x10\x01\x12\t\n\x05NRB18\x10\x02\x12\t\n\x05NRB24\x10\x03\x12\t\n\x05NRB25\x10\x04\x12\t\n\x05NRB31\x10\x05\x12\t\n\x05NRB32\x10\x06\x12\t\n\x05NRB38\x10\x07\x12\t\n\x05NRB51\x10\x08\x12\t\n\x05NRB52\x10\t\x12\t\n\x05NRB65\x10\n\x12\t\n\x05NRB66\x10\x0b\x12\t\n\x05NRB78\x10\x0c\x12\t\n\x05NRB79\x10\r\x12\t\n\x05NRB93\x10\x0e\x12\n\n\x06NRB106\x10\x0f\x12\n\n\x06NRB107\x10\x10\x12\n\n\x06NRB121\x10\x11\x12\n\n\x06NRB132\x10\x12\x12\n\n\x06NRB133\x10\x13\x12\n\n\x06NRB135\x10\x14\x12\n\n\x06NRB160\x10\x15\x12\n\n\x06NRB162\x10\x16\x12\n\n\x06NRB189\x10\x17\x12\n\n\x06NRB216\x10\x18\x12\n\n\x06NRB217\x10\x19\x12\n\n\x06NRB245\x10\x1a\x12\n\n\x06NRB264\x10\x1b\x12\n\n\x06NRB270\x10\x1c\x12\n\n\x06NRB273\x10\x1d\x62\x06proto3')
,
- dependencies=[ran__function__pb2.DESCRIPTOR,additional__cell__information__pb2.DESCRIPTOR,])
+ dependencies=[ran__function__pb2.DESCRIPTOR,e2node__component__config__pb2.DESCRIPTOR,additional__cell__information__pb2.DESCRIPTOR,nb__types__pb2.DESCRIPTOR,])
_NRSCS = _descriptor.EnumDescriptor(
name='Nrscs',
@@ -55,8 +58,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=2235,
- serialized_end=2306,
+ serialized_start=2337,
+ serialized_end=2408,
)
_sym_db.RegisterEnumDescriptor(_NRSCS)
@@ -190,39 +193,12 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=2309,
- serialized_end=2669,
+ serialized_start=2411,
+ serialized_end=2771,
)
_sym_db.RegisterEnumDescriptor(_NCNRB)
Ncnrb = enum_type_wrapper.EnumTypeWrapper(_NCNRB)
-_GNBTYPE = _descriptor.EnumDescriptor(
- name='GnbType',
- full_name='entities.GnbType',
- filename=None,
- file=DESCRIPTOR,
- values=[
- _descriptor.EnumValueDescriptor(
- name='UNKNOWN_GNB_TYPE', index=0, number=0,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='GNB', index=1, number=1,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='EN_GNB', index=2, number=2,
- serialized_options=None,
- type=None),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=2671,
- serialized_end=2723,
-)
-_sym_db.RegisterEnumDescriptor(_GNBTYPE)
-
-GnbType = enum_type_wrapper.EnumTypeWrapper(_GNBTYPE)
UNKNOWN_NRSCS = 0
SCS15 = 1
SCS30 = 2
@@ -258,9 +234,6 @@
NRB264 = 27
NRB270 = 28
NRB273 = 29
-UNKNOWN_GNB_TYPE = 0
-GNB = 1
-EN_GNB = 2
_NR_MODE = _descriptor.EnumDescriptor(
@@ -284,8 +257,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=1212,
- serialized_end=1249,
+ serialized_start=1314,
+ serialized_end=1351,
)
_sym_db.RegisterEnumDescriptor(_NR_MODE)
@@ -318,6 +291,13 @@
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='node_configs', full_name='entities.Gnb.node_configs', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -330,8 +310,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=79,
- serialized_end=216,
+ serialized_start=126,
+ serialized_end=318,
)
@@ -368,8 +348,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=219,
- serialized_end=366,
+ serialized_start=321,
+ serialized_end=468,
)
@@ -420,8 +400,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=830,
- serialized_end=1077,
+ serialized_start=932,
+ serialized_end=1179,
)
_SERVEDNRCELLINFORMATION_CHOICENRMODE_TDDINFO = _descriptor.Descriptor(
@@ -457,8 +437,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1079,
- serialized_end=1204,
+ serialized_start=1181,
+ serialized_end=1306,
)
_SERVEDNRCELLINFORMATION_CHOICENRMODE = _descriptor.Descriptor(
@@ -494,8 +474,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=675,
- serialized_end=1204,
+ serialized_start=777,
+ serialized_end=1306,
)
_SERVEDNRCELLINFORMATION = _descriptor.Descriptor(
@@ -573,8 +553,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=369,
- serialized_end=1204,
+ serialized_start=471,
+ serialized_end=1306,
)
@@ -598,8 +578,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1206,
- serialized_end=1249,
+ serialized_start=1308,
+ serialized_end=1351,
)
@@ -636,8 +616,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1410,
- serialized_end=1517,
+ serialized_start=1512,
+ serialized_end=1619,
)
_NRFREQUENCYINFO = _descriptor.Descriptor(
@@ -680,8 +660,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1252,
- serialized_end=1517,
+ serialized_start=1354,
+ serialized_end=1619,
)
@@ -718,8 +698,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1519,
- serialized_end=1594,
+ serialized_start=1621,
+ serialized_end=1696,
)
@@ -756,8 +736,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1596,
- serialized_end=1685,
+ serialized_start=1698,
+ serialized_end=1787,
)
@@ -794,8 +774,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2047,
- serialized_end=2166,
+ serialized_start=2149,
+ serialized_end=2268,
)
_NRNEIGHBOURINFORMATION_CHOICENRMODE_TDDINFO = _descriptor.Descriptor(
@@ -824,8 +804,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2168,
- serialized_end=2233,
+ serialized_start=2270,
+ serialized_end=2335,
)
_NRNEIGHBOURINFORMATION_CHOICENRMODE = _descriptor.Descriptor(
@@ -861,8 +841,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1895,
- serialized_end=2233,
+ serialized_start=1997,
+ serialized_end=2335,
)
_NRNEIGHBOURINFORMATION = _descriptor.Descriptor(
@@ -926,13 +906,14 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1688,
- serialized_end=2233,
+ serialized_start=1790,
+ serialized_end=2335,
)
_GNB.fields_by_name['served_nr_cells'].message_type = _SERVEDNRCELL
_GNB.fields_by_name['ran_functions'].message_type = ran__function__pb2._RANFUNCTION
-_GNB.fields_by_name['gnb_type'].enum_type = _GNBTYPE
+_GNB.fields_by_name['gnb_type'].enum_type = nb__types__pb2._GNBTYPE
+_GNB.fields_by_name['node_configs'].message_type = e2node__component__config__pb2._E2NODECOMPONENTCONFIG
_SERVEDNRCELL.fields_by_name['served_nr_cell_information'].message_type = _SERVEDNRCELLINFORMATION
_SERVEDNRCELL.fields_by_name['nr_neighbour_infos'].message_type = _NRNEIGHBOURINFORMATION
_SERVEDNRCELLINFORMATION_CHOICENRMODE_FDDINFO.fields_by_name['ul_freq_info'].message_type = _NRFREQUENCYINFO
@@ -976,116 +957,115 @@
DESCRIPTOR.message_types_by_name['NrNeighbourInformation'] = _NRNEIGHBOURINFORMATION
DESCRIPTOR.enum_types_by_name['Nrscs'] = _NRSCS
DESCRIPTOR.enum_types_by_name['Ncnrb'] = _NCNRB
-DESCRIPTOR.enum_types_by_name['GnbType'] = _GNBTYPE
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-Gnb = _reflection.GeneratedProtocolMessageType('Gnb', (_message.Message,), dict(
- DESCRIPTOR = _GNB,
- __module__ = 'gnb_pb2'
+Gnb = _reflection.GeneratedProtocolMessageType('Gnb', (_message.Message,), {
+ 'DESCRIPTOR' : _GNB,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.Gnb)
- ))
+ })
_sym_db.RegisterMessage(Gnb)
-ServedNRCell = _reflection.GeneratedProtocolMessageType('ServedNRCell', (_message.Message,), dict(
- DESCRIPTOR = _SERVEDNRCELL,
- __module__ = 'gnb_pb2'
+ServedNRCell = _reflection.GeneratedProtocolMessageType('ServedNRCell', (_message.Message,), {
+ 'DESCRIPTOR' : _SERVEDNRCELL,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedNRCell)
- ))
+ })
_sym_db.RegisterMessage(ServedNRCell)
-ServedNRCellInformation = _reflection.GeneratedProtocolMessageType('ServedNRCellInformation', (_message.Message,), dict(
+ServedNRCellInformation = _reflection.GeneratedProtocolMessageType('ServedNRCellInformation', (_message.Message,), {
- ChoiceNRMode = _reflection.GeneratedProtocolMessageType('ChoiceNRMode', (_message.Message,), dict(
+ 'ChoiceNRMode' : _reflection.GeneratedProtocolMessageType('ChoiceNRMode', (_message.Message,), {
- FddInfo = _reflection.GeneratedProtocolMessageType('FddInfo', (_message.Message,), dict(
- DESCRIPTOR = _SERVEDNRCELLINFORMATION_CHOICENRMODE_FDDINFO,
- __module__ = 'gnb_pb2'
+ 'FddInfo' : _reflection.GeneratedProtocolMessageType('FddInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _SERVEDNRCELLINFORMATION_CHOICENRMODE_FDDINFO,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedNRCellInformation.ChoiceNRMode.FddInfo)
- ))
+ })
,
- TddInfo = _reflection.GeneratedProtocolMessageType('TddInfo', (_message.Message,), dict(
- DESCRIPTOR = _SERVEDNRCELLINFORMATION_CHOICENRMODE_TDDINFO,
- __module__ = 'gnb_pb2'
+ 'TddInfo' : _reflection.GeneratedProtocolMessageType('TddInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _SERVEDNRCELLINFORMATION_CHOICENRMODE_TDDINFO,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedNRCellInformation.ChoiceNRMode.TddInfo)
- ))
+ })
,
- DESCRIPTOR = _SERVEDNRCELLINFORMATION_CHOICENRMODE,
- __module__ = 'gnb_pb2'
+ 'DESCRIPTOR' : _SERVEDNRCELLINFORMATION_CHOICENRMODE,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedNRCellInformation.ChoiceNRMode)
- ))
+ })
,
- DESCRIPTOR = _SERVEDNRCELLINFORMATION,
- __module__ = 'gnb_pb2'
+ 'DESCRIPTOR' : _SERVEDNRCELLINFORMATION,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.ServedNRCellInformation)
- ))
+ })
_sym_db.RegisterMessage(ServedNRCellInformation)
_sym_db.RegisterMessage(ServedNRCellInformation.ChoiceNRMode)
_sym_db.RegisterMessage(ServedNRCellInformation.ChoiceNRMode.FddInfo)
_sym_db.RegisterMessage(ServedNRCellInformation.ChoiceNRMode.TddInfo)
-Nr = _reflection.GeneratedProtocolMessageType('Nr', (_message.Message,), dict(
- DESCRIPTOR = _NR,
- __module__ = 'gnb_pb2'
+Nr = _reflection.GeneratedProtocolMessageType('Nr', (_message.Message,), {
+ 'DESCRIPTOR' : _NR,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.Nr)
- ))
+ })
_sym_db.RegisterMessage(Nr)
-NrFrequencyInfo = _reflection.GeneratedProtocolMessageType('NrFrequencyInfo', (_message.Message,), dict(
+NrFrequencyInfo = _reflection.GeneratedProtocolMessageType('NrFrequencyInfo', (_message.Message,), {
- SulInformation = _reflection.GeneratedProtocolMessageType('SulInformation', (_message.Message,), dict(
- DESCRIPTOR = _NRFREQUENCYINFO_SULINFORMATION,
- __module__ = 'gnb_pb2'
+ 'SulInformation' : _reflection.GeneratedProtocolMessageType('SulInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _NRFREQUENCYINFO_SULINFORMATION,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.NrFrequencyInfo.SulInformation)
- ))
+ })
,
- DESCRIPTOR = _NRFREQUENCYINFO,
- __module__ = 'gnb_pb2'
+ 'DESCRIPTOR' : _NRFREQUENCYINFO,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.NrFrequencyInfo)
- ))
+ })
_sym_db.RegisterMessage(NrFrequencyInfo)
_sym_db.RegisterMessage(NrFrequencyInfo.SulInformation)
-FrequencyBandItem = _reflection.GeneratedProtocolMessageType('FrequencyBandItem', (_message.Message,), dict(
- DESCRIPTOR = _FREQUENCYBANDITEM,
- __module__ = 'gnb_pb2'
+FrequencyBandItem = _reflection.GeneratedProtocolMessageType('FrequencyBandItem', (_message.Message,), {
+ 'DESCRIPTOR' : _FREQUENCYBANDITEM,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.FrequencyBandItem)
- ))
+ })
_sym_db.RegisterMessage(FrequencyBandItem)
-NrTransmissionBandwidth = _reflection.GeneratedProtocolMessageType('NrTransmissionBandwidth', (_message.Message,), dict(
- DESCRIPTOR = _NRTRANSMISSIONBANDWIDTH,
- __module__ = 'gnb_pb2'
+NrTransmissionBandwidth = _reflection.GeneratedProtocolMessageType('NrTransmissionBandwidth', (_message.Message,), {
+ 'DESCRIPTOR' : _NRTRANSMISSIONBANDWIDTH,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.NrTransmissionBandwidth)
- ))
+ })
_sym_db.RegisterMessage(NrTransmissionBandwidth)
-NrNeighbourInformation = _reflection.GeneratedProtocolMessageType('NrNeighbourInformation', (_message.Message,), dict(
+NrNeighbourInformation = _reflection.GeneratedProtocolMessageType('NrNeighbourInformation', (_message.Message,), {
- ChoiceNRMode = _reflection.GeneratedProtocolMessageType('ChoiceNRMode', (_message.Message,), dict(
+ 'ChoiceNRMode' : _reflection.GeneratedProtocolMessageType('ChoiceNRMode', (_message.Message,), {
- FddInfo = _reflection.GeneratedProtocolMessageType('FddInfo', (_message.Message,), dict(
- DESCRIPTOR = _NRNEIGHBOURINFORMATION_CHOICENRMODE_FDDINFO,
- __module__ = 'gnb_pb2'
+ 'FddInfo' : _reflection.GeneratedProtocolMessageType('FddInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _NRNEIGHBOURINFORMATION_CHOICENRMODE_FDDINFO,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.NrNeighbourInformation.ChoiceNRMode.FddInfo)
- ))
+ })
,
- TddInfo = _reflection.GeneratedProtocolMessageType('TddInfo', (_message.Message,), dict(
- DESCRIPTOR = _NRNEIGHBOURINFORMATION_CHOICENRMODE_TDDINFO,
- __module__ = 'gnb_pb2'
+ 'TddInfo' : _reflection.GeneratedProtocolMessageType('TddInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _NRNEIGHBOURINFORMATION_CHOICENRMODE_TDDINFO,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.NrNeighbourInformation.ChoiceNRMode.TddInfo)
- ))
+ })
,
- DESCRIPTOR = _NRNEIGHBOURINFORMATION_CHOICENRMODE,
- __module__ = 'gnb_pb2'
+ 'DESCRIPTOR' : _NRNEIGHBOURINFORMATION_CHOICENRMODE,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.NrNeighbourInformation.ChoiceNRMode)
- ))
+ })
,
- DESCRIPTOR = _NRNEIGHBOURINFORMATION,
- __module__ = 'gnb_pb2'
+ 'DESCRIPTOR' : _NRNEIGHBOURINFORMATION,
+ '__module__' : 'gnb_pb2'
# @@protoc_insertion_point(class_scope:entities.NrNeighbourInformation)
- ))
+ })
_sym_db.RegisterMessage(NrNeighbourInformation)
_sym_db.RegisterMessage(NrNeighbourInformation.ChoiceNRMode)
_sym_db.RegisterMessage(NrNeighbourInformation.ChoiceNRMode.FddInfo)
diff --git a/ricxappframe/entities/rnib/nb_identity_pb2.py b/ricxappframe/entities/rnib/nb_identity_pb2.py
index 42c2227..d768082 100644
--- a/ricxappframe/entities/rnib/nb_identity_pb2.py
+++ b/ricxappframe/entities/rnib/nb_identity_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: nb_identity.proto
@@ -179,18 +180,18 @@
DESCRIPTOR.enum_types_by_name['ConnectionStatus'] = _CONNECTIONSTATUS
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-GlobalNbId = _reflection.GeneratedProtocolMessageType('GlobalNbId', (_message.Message,), dict(
- DESCRIPTOR = _GLOBALNBID,
- __module__ = 'nb_identity_pb2'
+GlobalNbId = _reflection.GeneratedProtocolMessageType('GlobalNbId', (_message.Message,), {
+ 'DESCRIPTOR' : _GLOBALNBID,
+ '__module__' : 'nb_identity_pb2'
# @@protoc_insertion_point(class_scope:entities.GlobalNbId)
- ))
+ })
_sym_db.RegisterMessage(GlobalNbId)
-NbIdentity = _reflection.GeneratedProtocolMessageType('NbIdentity', (_message.Message,), dict(
- DESCRIPTOR = _NBIDENTITY,
- __module__ = 'nb_identity_pb2'
+NbIdentity = _reflection.GeneratedProtocolMessageType('NbIdentity', (_message.Message,), {
+ 'DESCRIPTOR' : _NBIDENTITY,
+ '__module__' : 'nb_identity_pb2'
# @@protoc_insertion_point(class_scope:entities.NbIdentity)
- ))
+ })
_sym_db.RegisterMessage(NbIdentity)
diff --git a/ricxappframe/entities/rnib/nb_types_pb2.py b/ricxappframe/entities/rnib/nb_types_pb2.py
new file mode 100644
index 0000000..034d006
--- /dev/null
+++ b/ricxappframe/entities/rnib/nb_types_pb2.py
@@ -0,0 +1,119 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: nb_types.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf.internal import enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='nb_types.proto',
+ package='entities',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x0enb_types.proto\x12\x08\x65ntities*\xa6\x01\n\x07\x45nbType\x12\x14\n\x10UNKNOWN_ENB_TYPE\x10\x00\x12\r\n\tMACRO_ENB\x10\x01\x12\x0c\n\x08HOME_ENB\x10\x02\x12\x13\n\x0fSHORT_MACRO_ENB\x10\x03\x12\x12\n\x0eLONG_MACRO_ENB\x10\x04\x12\x10\n\x0cMACRO_NG_ENB\x10\x05\x12\x16\n\x12SHORT_MACRO_NG_ENB\x10\x06\x12\x15\n\x11LONG_MACRO_NG_ENB\x10\x07*4\n\x07GnbType\x12\x14\n\x10UNKNOWN_GNB_TYPE\x10\x00\x12\x07\n\x03GNB\x10\x01\x12\n\n\x06\x45N_GNB\x10\x02\x62\x06proto3')
+)
+
+_ENBTYPE = _descriptor.EnumDescriptor(
+ name='EnbType',
+ full_name='entities.EnbType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN_ENB_TYPE', index=0, number=0,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MACRO_ENB', index=1, number=1,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HOME_ENB', index=2, number=2,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SHORT_MACRO_ENB', index=3, number=3,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LONG_MACRO_ENB', index=4, number=4,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='MACRO_NG_ENB', index=5, number=5,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SHORT_MACRO_NG_ENB', index=6, number=6,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LONG_MACRO_NG_ENB', index=7, number=7,
+ serialized_options=None,
+ type=None),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=29,
+ serialized_end=195,
+)
+_sym_db.RegisterEnumDescriptor(_ENBTYPE)
+
+EnbType = enum_type_wrapper.EnumTypeWrapper(_ENBTYPE)
+_GNBTYPE = _descriptor.EnumDescriptor(
+ name='GnbType',
+ full_name='entities.GnbType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNKNOWN_GNB_TYPE', index=0, number=0,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='GNB', index=1, number=1,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='EN_GNB', index=2, number=2,
+ serialized_options=None,
+ type=None),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=197,
+ serialized_end=249,
+)
+_sym_db.RegisterEnumDescriptor(_GNBTYPE)
+
+GnbType = enum_type_wrapper.EnumTypeWrapper(_GNBTYPE)
+UNKNOWN_ENB_TYPE = 0
+MACRO_ENB = 1
+HOME_ENB = 2
+SHORT_MACRO_ENB = 3
+LONG_MACRO_ENB = 4
+MACRO_NG_ENB = 5
+SHORT_MACRO_NG_ENB = 6
+LONG_MACRO_NG_ENB = 7
+UNKNOWN_GNB_TYPE = 0
+GNB = 1
+EN_GNB = 2
+
+
+DESCRIPTOR.enum_types_by_name['EnbType'] = _ENBTYPE
+DESCRIPTOR.enum_types_by_name['GnbType'] = _GNBTYPE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/ricxappframe/entities/rnib/nodeb_info_pb2.py b/ricxappframe/entities/rnib/nodeb_info_pb2.py
index 24865e4..89216d9 100644
--- a/ricxappframe/entities/rnib/nodeb_info_pb2.py
+++ b/ricxappframe/entities/rnib/nodeb_info_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: nodeb_info.proto
@@ -302,25 +303,25 @@
DESCRIPTOR.enum_types_by_name['E2ApplicationProtocol'] = _E2APPLICATIONPROTOCOL
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-NodebInfo = _reflection.GeneratedProtocolMessageType('NodebInfo', (_message.Message,), dict(
- DESCRIPTOR = _NODEBINFO,
- __module__ = 'nodeb_info_pb2'
+NodebInfo = _reflection.GeneratedProtocolMessageType('NodebInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _NODEBINFO,
+ '__module__' : 'nodeb_info_pb2'
# @@protoc_insertion_point(class_scope:entities.NodebInfo)
- ))
+ })
_sym_db.RegisterMessage(NodebInfo)
-Node = _reflection.GeneratedProtocolMessageType('Node', (_message.Message,), dict(
- DESCRIPTOR = _NODE,
- __module__ = 'nodeb_info_pb2'
+Node = _reflection.GeneratedProtocolMessageType('Node', (_message.Message,), {
+ 'DESCRIPTOR' : _NODE,
+ '__module__' : 'nodeb_info_pb2'
# @@protoc_insertion_point(class_scope:entities.Node)
- ))
+ })
_sym_db.RegisterMessage(Node)
-Failure = _reflection.GeneratedProtocolMessageType('Failure', (_message.Message,), dict(
- DESCRIPTOR = _FAILURE,
- __module__ = 'nodeb_info_pb2'
+Failure = _reflection.GeneratedProtocolMessageType('Failure', (_message.Message,), {
+ 'DESCRIPTOR' : _FAILURE,
+ '__module__' : 'nodeb_info_pb2'
# @@protoc_insertion_point(class_scope:entities.Failure)
- ))
+ })
_sym_db.RegisterMessage(Failure)
diff --git a/ricxappframe/entities/rnib/ran_function_pb2.py b/ricxappframe/entities/rnib/ran_function_pb2.py
index fd48767..6f31065 100644
--- a/ricxappframe/entities/rnib/ran_function_pb2.py
+++ b/ricxappframe/entities/rnib/ran_function_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: ran_function.proto
@@ -19,7 +20,7 @@
package='entities',
syntax='proto3',
serialized_options=None,
- serialized_pb=_b('\n\x12ran_function.proto\x12\x08\x65ntities\"f\n\x0bRanFunction\x12\x17\n\x0fran_function_id\x18\x01 \x01(\r\x12\x1f\n\x17ran_function_definition\x18\x02 \x01(\t\x12\x1d\n\x15ran_function_revision\x18\x03 \x01(\rb\x06proto3')
+ serialized_pb=_b('\n\x12ran_function.proto\x12\x08\x65ntities\"\x80\x01\n\x0bRanFunction\x12\x17\n\x0fran_function_id\x18\x01 \x01(\r\x12\x1f\n\x17ran_function_definition\x18\x02 \x01(\t\x12\x1d\n\x15ran_function_revision\x18\x03 \x01(\r\x12\x18\n\x10ran_function_oid\x18\x04 \x01(\tb\x06proto3')
)
@@ -53,6 +54,13 @@
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ran_function_oid', full_name='entities.RanFunction.ran_function_oid', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -65,18 +73,18 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=32,
- serialized_end=134,
+ serialized_start=33,
+ serialized_end=161,
)
DESCRIPTOR.message_types_by_name['RanFunction'] = _RANFUNCTION
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-RanFunction = _reflection.GeneratedProtocolMessageType('RanFunction', (_message.Message,), dict(
- DESCRIPTOR = _RANFUNCTION,
- __module__ = 'ran_function_pb2'
+RanFunction = _reflection.GeneratedProtocolMessageType('RanFunction', (_message.Message,), {
+ 'DESCRIPTOR' : _RANFUNCTION,
+ '__module__' : 'ran_function_pb2'
# @@protoc_insertion_point(class_scope:entities.RanFunction)
- ))
+ })
_sym_db.RegisterMessage(RanFunction)
diff --git a/ricxappframe/entities/rnib/ran_load_information_pb2.py b/ricxappframe/entities/rnib/ran_load_information_pb2.py
index 1238cea..74b92e6 100644
--- a/ricxappframe/entities/rnib/ran_load_information_pb2.py
+++ b/ricxappframe/entities/rnib/ran_load_information_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: ran_load_information.proto
@@ -976,88 +977,88 @@
DESCRIPTOR.enum_types_by_name['PA'] = _PA
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-RanLoadInformation = _reflection.GeneratedProtocolMessageType('RanLoadInformation', (_message.Message,), dict(
- DESCRIPTOR = _RANLOADINFORMATION,
- __module__ = 'ran_load_information_pb2'
+RanLoadInformation = _reflection.GeneratedProtocolMessageType('RanLoadInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _RANLOADINFORMATION,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.RanLoadInformation)
- ))
+ })
_sym_db.RegisterMessage(RanLoadInformation)
-CellLoadInformation = _reflection.GeneratedProtocolMessageType('CellLoadInformation', (_message.Message,), dict(
- DESCRIPTOR = _CELLLOADINFORMATION,
- __module__ = 'ran_load_information_pb2'
+CellLoadInformation = _reflection.GeneratedProtocolMessageType('CellLoadInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _CELLLOADINFORMATION,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.CellLoadInformation)
- ))
+ })
_sym_db.RegisterMessage(CellLoadInformation)
-UlHighInterferenceInformation = _reflection.GeneratedProtocolMessageType('UlHighInterferenceInformation', (_message.Message,), dict(
- DESCRIPTOR = _ULHIGHINTERFERENCEINFORMATION,
- __module__ = 'ran_load_information_pb2'
+UlHighInterferenceInformation = _reflection.GeneratedProtocolMessageType('UlHighInterferenceInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _ULHIGHINTERFERENCEINFORMATION,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.UlHighInterferenceInformation)
- ))
+ })
_sym_db.RegisterMessage(UlHighInterferenceInformation)
-RelativeNarrowbandTxPower = _reflection.GeneratedProtocolMessageType('RelativeNarrowbandTxPower', (_message.Message,), dict(
- DESCRIPTOR = _RELATIVENARROWBANDTXPOWER,
- __module__ = 'ran_load_information_pb2'
+RelativeNarrowbandTxPower = _reflection.GeneratedProtocolMessageType('RelativeNarrowbandTxPower', (_message.Message,), {
+ 'DESCRIPTOR' : _RELATIVENARROWBANDTXPOWER,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.RelativeNarrowbandTxPower)
- ))
+ })
_sym_db.RegisterMessage(RelativeNarrowbandTxPower)
-EnhancedRntp = _reflection.GeneratedProtocolMessageType('EnhancedRntp', (_message.Message,), dict(
- DESCRIPTOR = _ENHANCEDRNTP,
- __module__ = 'ran_load_information_pb2'
+EnhancedRntp = _reflection.GeneratedProtocolMessageType('EnhancedRntp', (_message.Message,), {
+ 'DESCRIPTOR' : _ENHANCEDRNTP,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.EnhancedRntp)
- ))
+ })
_sym_db.RegisterMessage(EnhancedRntp)
-StartTime = _reflection.GeneratedProtocolMessageType('StartTime', (_message.Message,), dict(
- DESCRIPTOR = _STARTTIME,
- __module__ = 'ran_load_information_pb2'
+StartTime = _reflection.GeneratedProtocolMessageType('StartTime', (_message.Message,), {
+ 'DESCRIPTOR' : _STARTTIME,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.StartTime)
- ))
+ })
_sym_db.RegisterMessage(StartTime)
-AbsInformation = _reflection.GeneratedProtocolMessageType('AbsInformation', (_message.Message,), dict(
- DESCRIPTOR = _ABSINFORMATION,
- __module__ = 'ran_load_information_pb2'
+AbsInformation = _reflection.GeneratedProtocolMessageType('AbsInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _ABSINFORMATION,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.AbsInformation)
- ))
+ })
_sym_db.RegisterMessage(AbsInformation)
-ExtendedUlInterferenceOverloadInfo = _reflection.GeneratedProtocolMessageType('ExtendedUlInterferenceOverloadInfo', (_message.Message,), dict(
- DESCRIPTOR = _EXTENDEDULINTERFERENCEOVERLOADINFO,
- __module__ = 'ran_load_information_pb2'
+ExtendedUlInterferenceOverloadInfo = _reflection.GeneratedProtocolMessageType('ExtendedUlInterferenceOverloadInfo', (_message.Message,), {
+ 'DESCRIPTOR' : _EXTENDEDULINTERFERENCEOVERLOADINFO,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.ExtendedUlInterferenceOverloadInfo)
- ))
+ })
_sym_db.RegisterMessage(ExtendedUlInterferenceOverloadInfo)
-CompInformation = _reflection.GeneratedProtocolMessageType('CompInformation', (_message.Message,), dict(
- DESCRIPTOR = _COMPINFORMATION,
- __module__ = 'ran_load_information_pb2'
+CompInformation = _reflection.GeneratedProtocolMessageType('CompInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _COMPINFORMATION,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.CompInformation)
- ))
+ })
_sym_db.RegisterMessage(CompInformation)
-CompInformationItem = _reflection.GeneratedProtocolMessageType('CompInformationItem', (_message.Message,), dict(
- DESCRIPTOR = _COMPINFORMATIONITEM,
- __module__ = 'ran_load_information_pb2'
+CompInformationItem = _reflection.GeneratedProtocolMessageType('CompInformationItem', (_message.Message,), {
+ 'DESCRIPTOR' : _COMPINFORMATIONITEM,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.CompInformationItem)
- ))
+ })
_sym_db.RegisterMessage(CompInformationItem)
-CompHypothesisSet = _reflection.GeneratedProtocolMessageType('CompHypothesisSet', (_message.Message,), dict(
- DESCRIPTOR = _COMPHYPOTHESISSET,
- __module__ = 'ran_load_information_pb2'
+CompHypothesisSet = _reflection.GeneratedProtocolMessageType('CompHypothesisSet', (_message.Message,), {
+ 'DESCRIPTOR' : _COMPHYPOTHESISSET,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.CompHypothesisSet)
- ))
+ })
_sym_db.RegisterMessage(CompHypothesisSet)
-DynamicDlTransmissionInformation = _reflection.GeneratedProtocolMessageType('DynamicDlTransmissionInformation', (_message.Message,), dict(
- DESCRIPTOR = _DYNAMICDLTRANSMISSIONINFORMATION,
- __module__ = 'ran_load_information_pb2'
+DynamicDlTransmissionInformation = _reflection.GeneratedProtocolMessageType('DynamicDlTransmissionInformation', (_message.Message,), {
+ 'DESCRIPTOR' : _DYNAMICDLTRANSMISSIONINFORMATION,
+ '__module__' : 'ran_load_information_pb2'
# @@protoc_insertion_point(class_scope:entities.DynamicDlTransmissionInformation)
- ))
+ })
_sym_db.RegisterMessage(DynamicDlTransmissionInformation)
diff --git a/ricxappframe/entities/rnib/x2_setup_failure_response_pb2.py b/ricxappframe/entities/rnib/x2_setup_failure_response_pb2.py
index d234394..12e706a 100644
--- a/ricxappframe/entities/rnib/x2_setup_failure_response_pb2.py
+++ b/ricxappframe/entities/rnib/x2_setup_failure_response_pb2.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: x2_setup_failure_response.proto
@@ -813,53 +814,53 @@
DESCRIPTOR.enum_types_by_name['Criticality'] = _CRITICALITY
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-SetupFailure = _reflection.GeneratedProtocolMessageType('SetupFailure', (_message.Message,), dict(
- DESCRIPTOR = _SETUPFAILURE,
- __module__ = 'x2_setup_failure_response_pb2'
+SetupFailure = _reflection.GeneratedProtocolMessageType('SetupFailure', (_message.Message,), {
+ 'DESCRIPTOR' : _SETUPFAILURE,
+ '__module__' : 'x2_setup_failure_response_pb2'
# @@protoc_insertion_point(class_scope:entities.SetupFailure)
- ))
+ })
_sym_db.RegisterMessage(SetupFailure)
-RadioNetworkLayer = _reflection.GeneratedProtocolMessageType('RadioNetworkLayer', (_message.Message,), dict(
- DESCRIPTOR = _RADIONETWORKLAYER,
- __module__ = 'x2_setup_failure_response_pb2'
+RadioNetworkLayer = _reflection.GeneratedProtocolMessageType('RadioNetworkLayer', (_message.Message,), {
+ 'DESCRIPTOR' : _RADIONETWORKLAYER,
+ '__module__' : 'x2_setup_failure_response_pb2'
# @@protoc_insertion_point(class_scope:entities.RadioNetworkLayer)
- ))
+ })
_sym_db.RegisterMessage(RadioNetworkLayer)
-TransportLayer = _reflection.GeneratedProtocolMessageType('TransportLayer', (_message.Message,), dict(
- DESCRIPTOR = _TRANSPORTLAYER,
- __module__ = 'x2_setup_failure_response_pb2'
+TransportLayer = _reflection.GeneratedProtocolMessageType('TransportLayer', (_message.Message,), {
+ 'DESCRIPTOR' : _TRANSPORTLAYER,
+ '__module__' : 'x2_setup_failure_response_pb2'
# @@protoc_insertion_point(class_scope:entities.TransportLayer)
- ))
+ })
_sym_db.RegisterMessage(TransportLayer)
-Protocol = _reflection.GeneratedProtocolMessageType('Protocol', (_message.Message,), dict(
- DESCRIPTOR = _PROTOCOL,
- __module__ = 'x2_setup_failure_response_pb2'
+Protocol = _reflection.GeneratedProtocolMessageType('Protocol', (_message.Message,), {
+ 'DESCRIPTOR' : _PROTOCOL,
+ '__module__' : 'x2_setup_failure_response_pb2'
# @@protoc_insertion_point(class_scope:entities.Protocol)
- ))
+ })
_sym_db.RegisterMessage(Protocol)
-Miscellaneous = _reflection.GeneratedProtocolMessageType('Miscellaneous', (_message.Message,), dict(
- DESCRIPTOR = _MISCELLANEOUS,
- __module__ = 'x2_setup_failure_response_pb2'
+Miscellaneous = _reflection.GeneratedProtocolMessageType('Miscellaneous', (_message.Message,), {
+ 'DESCRIPTOR' : _MISCELLANEOUS,
+ '__module__' : 'x2_setup_failure_response_pb2'
# @@protoc_insertion_point(class_scope:entities.Miscellaneous)
- ))
+ })
_sym_db.RegisterMessage(Miscellaneous)
-CriticalityDiagnostics = _reflection.GeneratedProtocolMessageType('CriticalityDiagnostics', (_message.Message,), dict(
- DESCRIPTOR = _CRITICALITYDIAGNOSTICS,
- __module__ = 'x2_setup_failure_response_pb2'
+CriticalityDiagnostics = _reflection.GeneratedProtocolMessageType('CriticalityDiagnostics', (_message.Message,), {
+ 'DESCRIPTOR' : _CRITICALITYDIAGNOSTICS,
+ '__module__' : 'x2_setup_failure_response_pb2'
# @@protoc_insertion_point(class_scope:entities.CriticalityDiagnostics)
- ))
+ })
_sym_db.RegisterMessage(CriticalityDiagnostics)
-InformationElementCriticalityDiagnostic = _reflection.GeneratedProtocolMessageType('InformationElementCriticalityDiagnostic', (_message.Message,), dict(
- DESCRIPTOR = _INFORMATIONELEMENTCRITICALITYDIAGNOSTIC,
- __module__ = 'x2_setup_failure_response_pb2'
+InformationElementCriticalityDiagnostic = _reflection.GeneratedProtocolMessageType('InformationElementCriticalityDiagnostic', (_message.Message,), {
+ 'DESCRIPTOR' : _INFORMATIONELEMENTCRITICALITYDIAGNOSTIC,
+ '__module__' : 'x2_setup_failure_response_pb2'
# @@protoc_insertion_point(class_scope:entities.InformationElementCriticalityDiagnostic)
- ))
+ })
_sym_db.RegisterMessage(InformationElementCriticalityDiagnostic)
diff --git a/ricxappframe/subsclient/__init__.py b/ricxappframe/subsclient/__init__.py
new file mode 100644
index 0000000..3e852a6
--- /dev/null
+++ b/ricxappframe/subsclient/__init__.py
@@ -0,0 +1,42 @@
+# coding: utf-8
+
+# flake8: noqa
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+from __future__ import absolute_import
+
+# import apis into sdk package
+from ricxappframe.subsclient.api.common_api import CommonApi
+from ricxappframe.subsclient.api.xapp_api import XappApi
+
+# import ApiClient
+from ricxappframe.subsclient.api_client import ApiClient
+from ricxappframe.subsclient.configuration import Configuration
+# import models into sdk package
+from ricxappframe.subsclient.models.action_definition import ActionDefinition
+from ricxappframe.subsclient.models.action_to_be_setup import ActionToBeSetup
+from ricxappframe.subsclient.models.actions_to_be_setup import ActionsToBeSetup
+from ricxappframe.subsclient.models.config_metadata import ConfigMetadata
+from ricxappframe.subsclient.models.event_trigger_definition import EventTriggerDefinition
+from ricxappframe.subsclient.models.subscription_data import SubscriptionData
+from ricxappframe.subsclient.models.subscription_detail import SubscriptionDetail
+from ricxappframe.subsclient.models.subscription_details_list import SubscriptionDetailsList
+from ricxappframe.subsclient.models.subscription_instance import SubscriptionInstance
+from ricxappframe.subsclient.models.subscription_list import SubscriptionList
+from ricxappframe.subsclient.models.subscription_params import SubscriptionParams
+from ricxappframe.subsclient.models.subscription_params_client_endpoint import SubscriptionParamsClientEndpoint
+from ricxappframe.subsclient.models.subscription_params_e2_subscription_directives import SubscriptionParamsE2SubscriptionDirectives
+from ricxappframe.subsclient.models.subscription_response import SubscriptionResponse
+from ricxappframe.subsclient.models.subsequent_action import SubsequentAction
+from ricxappframe.subsclient.models.x_app_config import XAppConfig
+from ricxappframe.subsclient.models.xapp_config_list import XappConfigList
diff --git a/ricxappframe/subsclient/api/__init__.py b/ricxappframe/subsclient/api/__init__.py
new file mode 100644
index 0000000..b05b68f
--- /dev/null
+++ b/ricxappframe/subsclient/api/__init__.py
@@ -0,0 +1,7 @@
+from __future__ import absolute_import
+
+# flake8: noqa
+
+# import apis into api package
+from ricxappframe.subsclient.api.common_api import CommonApi
+from ricxappframe.subsclient.api.xapp_api import XappApi
diff --git a/ricxappframe/subsclient/api/common_api.py b/ricxappframe/subsclient/api/common_api.py
new file mode 100644
index 0000000..8890463
--- /dev/null
+++ b/ricxappframe/subsclient/api/common_api.py
@@ -0,0 +1,309 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from ricxappframe.subsclient.api_client import ApiClient
+
+
+class CommonApi(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ Ref: https://github.com/swagger-api/swagger-codegen
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def get_all_subscriptions(self, **kwargs): # noqa: E501
+ """Returns list of subscriptions # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_all_subscriptions(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :return: SubscriptionList
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+ kwargs['_return_http_data_only'] = True
+ if kwargs.get('async_req'):
+ return self.get_all_subscriptions_with_http_info(**kwargs) # noqa: E501
+ else:
+ (data) = self.get_all_subscriptions_with_http_info(**kwargs) # noqa: E501
+ return data
+
+ def get_all_subscriptions_with_http_info(self, **kwargs): # noqa: E501
+ """Returns list of subscriptions # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_all_subscriptions_with_http_info(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :return: SubscriptionList
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+
+ all_params = [] # noqa: E501
+ all_params.append('async_req')
+ all_params.append('_return_http_data_only')
+ all_params.append('_preload_content')
+ all_params.append('_request_timeout')
+
+ params = locals()
+ for key, val in six.iteritems(params['kwargs']):
+ if key not in all_params:
+ raise TypeError(
+ "Got an unexpected keyword argument '%s'"
+ " to method get_all_subscriptions" % key
+ )
+ params[key] = val
+ del params['kwargs']
+
+ collection_formats = {}
+
+ path_params = {}
+
+ query_params = []
+
+ header_params = {}
+
+ form_params = []
+ local_var_files = {}
+
+ body_params = None
+ # HTTP header `Accept`
+ header_params['Accept'] = self.api_client.select_header_accept(
+ ['application/json']) # noqa: E501
+
+ # Authentication setting
+ auth_settings = [] # noqa: E501
+
+ return self.api_client.call_api(
+ '/subscriptions', 'GET',
+ path_params,
+ query_params,
+ header_params,
+ body=body_params,
+ post_params=form_params,
+ files=local_var_files,
+ response_type='SubscriptionList', # noqa: E501
+ auth_settings=auth_settings,
+ async_req=params.get('async_req'),
+ _return_http_data_only=params.get('_return_http_data_only'),
+ _preload_content=params.get('_preload_content', True),
+ _request_timeout=params.get('_request_timeout'),
+ collection_formats=collection_formats)
+
+ def subscribe(self, **kwargs): # noqa: E501
+ """Subscribe a list of X2AP event triggers to receive messages sent by RAN # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.subscribe(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :param SubscriptionParams subscription_params: Subscription parameters
+ :return: SubscriptionResponse
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+ kwargs['_return_http_data_only'] = True
+ if kwargs.get('async_req'):
+ return self.subscribe_with_http_info(**kwargs) # noqa: E501
+ else:
+ (data) = self.subscribe_with_http_info(**kwargs) # noqa: E501
+ return data
+
+ def subscribe_with_http_info(self, **kwargs): # noqa: E501
+ """Subscribe a list of X2AP event triggers to receive messages sent by RAN # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.subscribe_with_http_info(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :param SubscriptionParams subscription_params: Subscription parameters
+ :return: SubscriptionResponse
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+
+ all_params = ['subscription_params'] # noqa: E501
+ all_params.append('async_req')
+ all_params.append('_return_http_data_only')
+ all_params.append('_preload_content')
+ all_params.append('_request_timeout')
+
+ params = locals()
+ for key, val in six.iteritems(params['kwargs']):
+ if key not in all_params:
+ raise TypeError(
+ "Got an unexpected keyword argument '%s'"
+ " to method subscribe" % key
+ )
+ params[key] = val
+ del params['kwargs']
+
+ collection_formats = {}
+
+ path_params = {}
+
+ query_params = []
+
+ header_params = {}
+
+ form_params = []
+ local_var_files = {}
+
+ body_params = None
+ if 'subscription_params' in params:
+ body_params = params['subscription_params']
+ # HTTP header `Accept`
+ header_params['Accept'] = self.api_client.select_header_accept(
+ ['application/json']) # noqa: E501
+
+ # HTTP header `Content-Type`
+ header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501
+ ['application/json']) # noqa: E501
+
+ # Authentication setting
+ auth_settings = [] # noqa: E501
+
+ return self.api_client.call_api(
+ '/subscriptions', 'POST',
+ path_params,
+ query_params,
+ header_params,
+ body=body_params,
+ post_params=form_params,
+ files=local_var_files,
+ response_type='SubscriptionResponse', # noqa: E501
+ auth_settings=auth_settings,
+ async_req=params.get('async_req'),
+ _return_http_data_only=params.get('_return_http_data_only'),
+ _preload_content=params.get('_preload_content', True),
+ _request_timeout=params.get('_request_timeout'),
+ collection_formats=collection_formats)
+
+ def unsubscribe(self, subscription_id, **kwargs): # noqa: E501
+ """Unsubscribe X2AP events from Subscription Manager # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.unsubscribe(subscription_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :param str subscription_id: The subscriptionId received in the Subscription Response (required)
+ :return: None
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+ kwargs['_return_http_data_only'] = True
+ if kwargs.get('async_req'):
+ return self.unsubscribe_with_http_info(subscription_id, **kwargs) # noqa: E501
+ else:
+ (data) = self.unsubscribe_with_http_info(subscription_id, **kwargs) # noqa: E501
+ return data
+
+ def unsubscribe_with_http_info(self, subscription_id, **kwargs): # noqa: E501
+ """Unsubscribe X2AP events from Subscription Manager # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.unsubscribe_with_http_info(subscription_id, async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :param str subscription_id: The subscriptionId received in the Subscription Response (required)
+ :return: None
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+
+ all_params = ['subscription_id'] # noqa: E501
+ all_params.append('async_req')
+ all_params.append('_return_http_data_only')
+ all_params.append('_preload_content')
+ all_params.append('_request_timeout')
+
+ params = locals()
+ for key, val in six.iteritems(params['kwargs']):
+ if key not in all_params:
+ raise TypeError(
+ "Got an unexpected keyword argument '%s'"
+ " to method unsubscribe" % key
+ )
+ params[key] = val
+ del params['kwargs']
+ # verify the required parameter 'subscription_id' is set
+ if self.api_client.client_side_validation and ('subscription_id' not in params or
+ params['subscription_id'] is None): # noqa: E501
+ raise ValueError("Missing the required parameter `subscription_id` when calling `unsubscribe`") # noqa: E501
+
+ collection_formats = {}
+
+ path_params = {}
+ if 'subscription_id' in params:
+ path_params['subscriptionId'] = params['subscription_id'] # noqa: E501
+
+ query_params = []
+
+ header_params = {}
+
+ form_params = []
+ local_var_files = {}
+
+ body_params = None
+ # HTTP header `Accept`
+ header_params['Accept'] = self.api_client.select_header_accept(
+ ['application/json']) # noqa: E501
+
+ # HTTP header `Content-Type`
+ header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501
+ ['application/json']) # noqa: E501
+
+ # Authentication setting
+ auth_settings = [] # noqa: E501
+
+ return self.api_client.call_api(
+ '/subscriptions/{subscriptionId}', 'DELETE',
+ path_params,
+ query_params,
+ header_params,
+ body=body_params,
+ post_params=form_params,
+ files=local_var_files,
+ response_type=None, # noqa: E501
+ auth_settings=auth_settings,
+ async_req=params.get('async_req'),
+ _return_http_data_only=params.get('_return_http_data_only'),
+ _preload_content=params.get('_preload_content', True),
+ _request_timeout=params.get('_request_timeout'),
+ collection_formats=collection_formats)
diff --git a/ricxappframe/subsclient/api/xapp_api.py b/ricxappframe/subsclient/api/xapp_api.py
new file mode 100644
index 0000000..cdef33f
--- /dev/null
+++ b/ricxappframe/subsclient/api/xapp_api.py
@@ -0,0 +1,119 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+from __future__ import absolute_import
+
+import re # noqa: F401
+
+# python 2 and python 3 compatibility library
+import six
+
+from ricxappframe.subsclient.api_client import ApiClient
+
+
+class XappApi(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ Ref: https://github.com/swagger-api/swagger-codegen
+ """
+
+ def __init__(self, api_client=None):
+ if api_client is None:
+ api_client = ApiClient()
+ self.api_client = api_client
+
+ def get_xapp_config_list(self, **kwargs): # noqa: E501
+ """Returns the configuration of all xapps # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_xapp_config_list(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :return: XappConfigList
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+ kwargs['_return_http_data_only'] = True
+ if kwargs.get('async_req'):
+ return self.get_xapp_config_list_with_http_info(**kwargs) # noqa: E501
+ else:
+ (data) = self.get_xapp_config_list_with_http_info(**kwargs) # noqa: E501
+ return data
+
+ def get_xapp_config_list_with_http_info(self, **kwargs): # noqa: E501
+ """Returns the configuration of all xapps # noqa: E501
+
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+ >>> thread = api.get_xapp_config_list_with_http_info(async_req=True)
+ >>> result = thread.get()
+
+ :param async_req bool
+ :return: XappConfigList
+ If the method is called asynchronously,
+ returns the request thread.
+ """
+
+ all_params = [] # noqa: E501
+ all_params.append('async_req')
+ all_params.append('_return_http_data_only')
+ all_params.append('_preload_content')
+ all_params.append('_request_timeout')
+
+ params = locals()
+ for key, val in six.iteritems(params['kwargs']):
+ if key not in all_params:
+ raise TypeError(
+ "Got an unexpected keyword argument '%s'"
+ " to method get_xapp_config_list" % key
+ )
+ params[key] = val
+ del params['kwargs']
+
+ collection_formats = {}
+
+ path_params = {}
+
+ query_params = []
+
+ header_params = {}
+
+ form_params = []
+ local_var_files = {}
+
+ body_params = None
+ # HTTP header `Accept`
+ header_params['Accept'] = self.api_client.select_header_accept(
+ ['application/json', 'application/xml']) # noqa: E501
+
+ # Authentication setting
+ auth_settings = [] # noqa: E501
+
+ return self.api_client.call_api(
+ '/config', 'GET',
+ path_params,
+ query_params,
+ header_params,
+ body=body_params,
+ post_params=form_params,
+ files=local_var_files,
+ response_type='XappConfigList', # noqa: E501
+ auth_settings=auth_settings,
+ async_req=params.get('async_req'),
+ _return_http_data_only=params.get('_return_http_data_only'),
+ _preload_content=params.get('_preload_content', True),
+ _request_timeout=params.get('_request_timeout'),
+ collection_formats=collection_formats)
diff --git a/ricxappframe/subsclient/api_client.py b/ricxappframe/subsclient/api_client.py
new file mode 100644
index 0000000..49172d5
--- /dev/null
+++ b/ricxappframe/subsclient/api_client.py
@@ -0,0 +1,639 @@
+# coding: utf-8
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+from __future__ import absolute_import
+
+import datetime
+import json
+import mimetypes
+from multiprocessing.pool import ThreadPool
+import os
+import re
+import tempfile
+
+# python 2 and python 3 compatibility library
+import six
+from six.moves.urllib.parse import quote
+
+from ricxappframe.subsclient.configuration import Configuration
+import ricxappframe.subsclient.models
+from ricxappframe.subsclient import rest
+
+
+class ApiClient(object):
+ """Generic API client for Swagger client library builds.
+
+ Swagger generic API client. This client handles the client-
+ server communication, and is invariant across implementations. Specifics of
+ the methods and models for each application are generated from the Swagger
+ templates.
+
+ NOTE: This class is auto generated by the swagger code generator program.
+ Ref: https://github.com/swagger-api/swagger-codegen
+ Do not edit the class manually.
+
+ :param configuration: .Configuration object for this client
+ :param header_name: a header to pass when making calls to the API.
+ :param header_value: a header value to pass when making calls to
+ the API.
+ :param cookie: a cookie to include in the header when making calls
+ to the API
+ """
+
+ PRIMITIVE_TYPES = (float, bool, bytes, six.text_type) + six.integer_types
+ NATIVE_TYPES_MAPPING = {
+ 'int': int,
+ 'long': int if six.PY3 else long, # noqa: F821
+ 'float': float,
+ 'str': str,
+ 'bool': bool,
+ 'date': datetime.date,
+ 'datetime': datetime.datetime,
+ 'object': object,
+ }
+
+ def __init__(self, configuration=None, header_name=None, header_value=None,
+ cookie=None):
+ if configuration is None:
+ configuration = Configuration()
+ self.configuration = configuration
+
+ # Use the pool property to lazily initialize the ThreadPool.
+ self._pool = None
+ self.rest_client = rest.RESTClientObject(configuration)
+ self.default_headers = {}
+ if header_name is not None:
+ self.default_headers[header_name] = header_value
+ self.cookie = cookie
+ # Set default User-Agent.
+ self.user_agent = 'Swagger-Codegen/1.0.0/python'
+ self.client_side_validation = configuration.client_side_validation
+
+ def __del__(self):
+ if self._pool is not None:
+ self._pool.close()
+ self._pool.join()
+
+ @property
+ def pool(self):
+ if self._pool is None:
+ self._pool = ThreadPool()
+ return self._pool
+
+ @property
+ def user_agent(self):
+ """User agent for this API client"""
+ return self.default_headers['User-Agent']
+
+ @user_agent.setter
+ def user_agent(self, value):
+ self.default_headers['User-Agent'] = value
+
+ def set_default_header(self, header_name, header_value):
+ self.default_headers[header_name] = header_value
+
+ def __call_api(
+ self, resource_path, method, path_params=None,
+ query_params=None, header_params=None, body=None, post_params=None,
+ files=None, response_type=None, auth_settings=None,
+ _return_http_data_only=None, collection_formats=None,
+ _preload_content=True, _request_timeout=None):
+
+ config = self.configuration
+
+ # header parameters
+ header_params = header_params or {}
+ header_params.update(self.default_headers)
+ if self.cookie:
+ header_params['Cookie'] = self.cookie
+ if header_params:
+ header_params = self.sanitize_for_serialization(header_params)
+ header_params = dict(self.parameters_to_tuples(header_params,
+ collection_formats))
+
+ # path parameters
+ if path_params:
+ path_params = self.sanitize_for_serialization(path_params)
+ path_params = self.parameters_to_tuples(path_params,
+ collection_formats)
+ for k, v in path_params:
+ # specified safe chars, encode everything
+ resource_path = resource_path.replace(
+ '{%s}' % k,
+ quote(str(v), safe=config.safe_chars_for_path_param)
+ )
+
+ # query parameters
+ if query_params:
+ query_params = self.sanitize_for_serialization(query_params)
+ query_params = self.parameters_to_tuples(query_params,
+ collection_formats)
+
+ # post parameters
+ if post_params or files:
+ post_params = self.prepare_post_parameters(post_params, files)
+ post_params = self.sanitize_for_serialization(post_params)
+ post_params = self.parameters_to_tuples(post_params,
+ collection_formats)
+
+ # auth setting
+ self.update_params_for_auth(header_params, query_params, auth_settings)
+
+ # body
+ if body:
+ body = self.sanitize_for_serialization(body)
+
+ # request url
+ url = self.configuration.host + resource_path
+
+ # perform request and return response
+ response_data = self.request(
+ method, url, query_params=query_params, headers=header_params,
+ post_params=post_params, body=body,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout)
+
+ self.last_response = response_data
+
+ return_data = response_data
+ if _preload_content:
+ # deserialize response data
+ if response_type:
+ return_data = self.deserialize(response_data, response_type)
+ else:
+ return_data = None
+
+ if _return_http_data_only:
+ return (return_data)
+ else:
+ return (return_data, response_data.status,
+ response_data.getheaders())
+
+ def sanitize_for_serialization(self, obj):
+ """Builds a JSON POST object.
+
+ If obj is None, return None.
+ If obj is str, int, long, float, bool, return directly.
+ If obj is datetime.datetime, datetime.date
+ convert to string in iso8601 format.
+ If obj is list, sanitize each element in the list.
+ If obj is dict, return the dict.
+ If obj is swagger model, return the properties dict.
+
+ :param obj: The data to serialize.
+ :return: The serialized form of data.
+ """
+ if obj is None:
+ return None
+ elif isinstance(obj, self.PRIMITIVE_TYPES):
+ return obj
+ elif isinstance(obj, list):
+ return [self.sanitize_for_serialization(sub_obj)
+ for sub_obj in obj]
+ elif isinstance(obj, tuple):
+ return tuple(self.sanitize_for_serialization(sub_obj)
+ for sub_obj in obj)
+ elif isinstance(obj, (datetime.datetime, datetime.date)):
+ return obj.isoformat()
+
+ if isinstance(obj, dict):
+ obj_dict = obj
+ else:
+ # Convert model obj to dict except
+ # attributes `swagger_types`, `attribute_map`
+ # and attributes which value is not None.
+ # Convert attribute name to json key in
+ # model definition for request.
+ obj_dict = {obj.attribute_map[attr]: getattr(obj, attr)
+ for attr, _ in six.iteritems(obj.swagger_types)
+ if getattr(obj, attr) is not None}
+
+ return {key: self.sanitize_for_serialization(val)
+ for key, val in six.iteritems(obj_dict)}
+
+ def deserialize(self, response, response_type):
+ """Deserializes response into an object.
+
+ :param response: RESTResponse object to be deserialized.
+ :param response_type: class literal for
+ deserialized object, or string of class name.
+
+ :return: deserialized object.
+ """
+ # handle file downloading
+ # save response body into a tmp file and return the instance
+ if response_type == "file":
+ return self.__deserialize_file(response)
+
+ # fetch data from response object
+ try:
+ data = json.loads(response.data)
+ except ValueError:
+ data = response.data
+
+ return self.__deserialize(data, response_type)
+
+ def __deserialize(self, data, klass):
+ """Deserializes dict, list, str into an object.
+
+ :param data: dict, list or str.
+ :param klass: class literal, or string of class name.
+
+ :return: object.
+ """
+ if data is None:
+ return None
+
+ if type(klass) == str:
+ if klass.startswith('list['):
+ sub_kls = re.match(r'list\[(.*)\]', klass).group(1)
+ return [self.__deserialize(sub_data, sub_kls)
+ for sub_data in data]
+
+ if klass.startswith('dict('):
+ sub_kls = re.match(r'dict\(([^,]*), (.*)\)', klass).group(2)
+ return {k: self.__deserialize(v, sub_kls)
+ for k, v in six.iteritems(data)}
+
+ # convert str to class
+ if klass in self.NATIVE_TYPES_MAPPING:
+ klass = self.NATIVE_TYPES_MAPPING[klass]
+ else:
+ klass = getattr(ricxappframe.subsclient.models, klass)
+
+ if klass in self.PRIMITIVE_TYPES:
+ return self.__deserialize_primitive(data, klass)
+ elif klass == object:
+ return self.__deserialize_object(data)
+ elif klass == datetime.date:
+ return self.__deserialize_date(data)
+ elif klass == datetime.datetime:
+ return self.__deserialize_datatime(data)
+ else:
+ return self.__deserialize_model(data, klass)
+
+ def call_api(self, resource_path, method,
+ path_params=None, query_params=None, header_params=None,
+ body=None, post_params=None, files=None,
+ response_type=None, auth_settings=None, async_req=None,
+ _return_http_data_only=None, collection_formats=None,
+ _preload_content=True, _request_timeout=None):
+ """Makes the HTTP request (synchronous) and returns deserialized data.
+
+ To make an async request, set the async_req parameter.
+
+ :param resource_path: Path to method endpoint.
+ :param method: Method to call.
+ :param path_params: Path parameters in the url.
+ :param query_params: Query parameters in the url.
+ :param header_params: Header parameters to be
+ placed in the request header.
+ :param body: Request body.
+ :param post_params dict: Request post form parameters,
+ for `application/x-www-form-urlencoded`, `multipart/form-data`.
+ :param auth_settings list: Auth Settings names for the request.
+ :param response: Response data type.
+ :param files dict: key -> filename, value -> filepath,
+ for `multipart/form-data`.
+ :param async_req bool: execute request asynchronously
+ :param _return_http_data_only: response data without head status code
+ and headers
+ :param collection_formats: dict of collection formats for path, query,
+ header, and post parameters.
+ :param _preload_content: if False, the urllib3.HTTPResponse object will
+ be returned without reading/decoding response
+ data. Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ :return:
+ If async_req parameter is True,
+ the request will be called asynchronously.
+ The method will return the request thread.
+ If parameter async_req is False or missing,
+ then the method will return the response directly.
+ """
+ if not async_req:
+ return self.__call_api(resource_path, method,
+ path_params, query_params, header_params,
+ body, post_params, files,
+ response_type, auth_settings,
+ _return_http_data_only, collection_formats,
+ _preload_content, _request_timeout)
+ else:
+ thread = self.pool.apply_async(self.__call_api, (resource_path,
+ method, path_params, query_params,
+ header_params, body,
+ post_params, files,
+ response_type, auth_settings,
+ _return_http_data_only,
+ collection_formats,
+ _preload_content, _request_timeout))
+ return thread
+
+ def request(self, method, url, query_params=None, headers=None,
+ post_params=None, body=None, _preload_content=True,
+ _request_timeout=None):
+ """Makes the HTTP request using RESTClient."""
+ if method == "GET":
+ return self.rest_client.GET(url,
+ query_params=query_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ headers=headers)
+ elif method == "HEAD":
+ return self.rest_client.HEAD(url,
+ query_params=query_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ headers=headers)
+ elif method == "OPTIONS":
+ return self.rest_client.OPTIONS(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "POST":
+ return self.rest_client.POST(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "PUT":
+ return self.rest_client.PUT(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "PATCH":
+ return self.rest_client.PATCH(url,
+ query_params=query_params,
+ headers=headers,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ elif method == "DELETE":
+ return self.rest_client.DELETE(url,
+ query_params=query_params,
+ headers=headers,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+ else:
+ raise ValueError(
+ "http method must be `GET`, `HEAD`, `OPTIONS`,"
+ " `POST`, `PATCH`, `PUT` or `DELETE`."
+ )
+
+ def parameters_to_tuples(self, params, collection_formats):
+ """Get parameters as list of tuples, formatting collections.
+
+ :param params: Parameters as dict or list of two-tuples
+ :param dict collection_formats: Parameter collection formats
+ :return: Parameters as list of tuples, collections formatted
+ """
+ new_params = []
+ if collection_formats is None:
+ collection_formats = {}
+ for k, v in six.iteritems(params) if isinstance(params, dict) else params: # noqa: E501
+ if k in collection_formats:
+ collection_format = collection_formats[k]
+ if collection_format == 'multi':
+ new_params.extend((k, value) for value in v)
+ else:
+ if collection_format == 'ssv':
+ delimiter = ' '
+ elif collection_format == 'tsv':
+ delimiter = '\t'
+ elif collection_format == 'pipes':
+ delimiter = '|'
+ else: # csv is the default
+ delimiter = ','
+ new_params.append(
+ (k, delimiter.join(str(value) for value in v)))
+ else:
+ new_params.append((k, v))
+ return new_params
+
+ def prepare_post_parameters(self, post_params=None, files=None):
+ """Builds form parameters.
+
+ :param post_params: Normal form parameters.
+ :param files: File parameters.
+ :return: Form parameters with files.
+ """
+ params = []
+
+ if post_params:
+ params = post_params
+
+ if files:
+ for k, v in six.iteritems(files):
+ if not v:
+ continue
+ file_names = v if type(v) is list else [v]
+ for n in file_names:
+ with open(n, 'rb') as f:
+ filename = os.path.basename(f.name)
+ filedata = f.read()
+ mimetype = (mimetypes.guess_type(filename)[0] or
+ 'application/octet-stream')
+ params.append(
+ tuple([k, tuple([filename, filedata, mimetype])]))
+
+ return params
+
+ def select_header_accept(self, accepts):
+ """Returns `Accept` based on an array of accepts provided.
+
+ :param accepts: List of headers.
+ :return: Accept (e.g. application/json).
+ """
+ if not accepts:
+ return
+
+ accepts = [x.lower() for x in accepts]
+
+ if 'application/json' in accepts:
+ return 'application/json'
+ else:
+ return ', '.join(accepts)
+
+ def select_header_content_type(self, content_types):
+ """Returns `Content-Type` based on an array of content_types provided.
+
+ :param content_types: List of content-types.
+ :return: Content-Type (e.g. application/json).
+ """
+ if not content_types:
+ return 'application/json'
+
+ content_types = [x.lower() for x in content_types]
+
+ if 'application/json' in content_types or '*/*' in content_types:
+ return 'application/json'
+ else:
+ return content_types[0]
+
+ def update_params_for_auth(self, headers, querys, auth_settings):
+ """Updates header and query params based on authentication setting.
+
+ :param headers: Header parameters dict to be updated.
+ :param querys: Query parameters tuple list to be updated.
+ :param auth_settings: Authentication setting identifiers list.
+ """
+ if not auth_settings:
+ return
+
+ for auth in auth_settings:
+ auth_setting = self.configuration.auth_settings().get(auth)
+ if auth_setting:
+ if not auth_setting['value']:
+ continue
+ elif auth_setting['in'] == 'header':
+ headers[auth_setting['key']] = auth_setting['value']
+ elif auth_setting['in'] == 'query':
+ querys.append((auth_setting['key'], auth_setting['value']))
+ else:
+ raise ValueError(
+ 'Authentication token must be in `query` or `header`'
+ )
+
+ def __deserialize_file(self, response):
+ """Deserializes body to file
+
+ Saves response body into a file in a temporary folder,
+ using the filename from the `Content-Disposition` header if provided.
+
+ :param response: RESTResponse.
+ :return: file path.
+ """
+ fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path)
+ os.close(fd)
+ os.remove(path)
+
+ content_disposition = response.getheader("Content-Disposition")
+ if content_disposition:
+ filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?',
+ content_disposition).group(1)
+ path = os.path.join(os.path.dirname(path), filename)
+
+ with open(path, "w") as f:
+ f.write(response.data)
+
+ return path
+
+ def __deserialize_primitive(self, data, klass):
+ """Deserializes string to primitive type.
+
+ :param data: str.
+ :param klass: class literal.
+
+ :return: int, long, float, str, bool.
+ """
+ try:
+ return klass(data)
+ except UnicodeEncodeError:
+ return six.text_type(data)
+ except TypeError:
+ return data
+
+ def __deserialize_object(self, value):
+ """Return a original value.
+
+ :return: object.
+ """
+ return value
+
+ def __deserialize_date(self, string):
+ """Deserializes string to date.
+
+ :param string: str.
+ :return: date.
+ """
+ try:
+ from dateutil.parser import parse
+ return parse(string).date()
+ except ImportError:
+ return string
+ except ValueError:
+ raise rest.ApiException(
+ status=0,
+ reason="Failed to parse `{0}` as date object".format(string)
+ )
+
+ def __deserialize_datatime(self, string):
+ """Deserializes string to datetime.
+
+ The string should be in iso8601 datetime format.
+
+ :param string: str.
+ :return: datetime.
+ """
+ try:
+ from dateutil.parser import parse
+ return parse(string)
+ except ImportError:
+ return string
+ except ValueError:
+ raise rest.ApiException(
+ status=0,
+ reason=(
+ "Failed to parse `{0}` as datetime object"
+ .format(string)
+ )
+ )
+
+ def __hasattr(self, object, name):
+ return name in object.__class__.__dict__
+
+ def __deserialize_model(self, data, klass):
+ """Deserializes list or dict to model.
+
+ :param data: dict, list.
+ :param klass: class literal.
+ :return: model object.
+ """
+
+ if (not klass.swagger_types and
+ not self.__hasattr(klass, 'get_real_child_model')):
+ return data
+
+ kwargs = {}
+ if klass.swagger_types is not None:
+ for attr, attr_type in six.iteritems(klass.swagger_types):
+ if (data is not None and
+ klass.attribute_map[attr] in data and
+ isinstance(data, (list, dict))):
+ value = data[klass.attribute_map[attr]]
+ kwargs[attr] = self.__deserialize(value, attr_type)
+
+ instance = klass(**kwargs)
+
+ if (isinstance(instance, dict) and
+ klass.swagger_types is not None and
+ isinstance(data, dict)):
+ for key, value in data.items():
+ if key not in klass.swagger_types:
+ instance[key] = value
+ if self.__hasattr(instance, 'get_real_child_model'):
+ klass_name = instance.get_real_child_model(data)
+ if klass_name:
+ instance = self.__deserialize(data, klass_name)
+ return instance
diff --git a/ricxappframe/subsclient/configuration.py b/ricxappframe/subsclient/configuration.py
new file mode 100644
index 0000000..1c4f6bf
--- /dev/null
+++ b/ricxappframe/subsclient/configuration.py
@@ -0,0 +1,248 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+from __future__ import absolute_import
+
+import copy
+import logging
+import multiprocessing
+import sys
+import urllib3
+
+import six
+from six.moves import http_client as httplib
+
+
+class Configuration(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Ref: https://github.com/swagger-api/swagger-codegen
+ Do not edit the class manually.
+ """
+
+ _default = None
+
+ def __init__(self):
+ """Constructor"""
+ if self._default:
+ for key in self._default.__dict__.keys():
+ self.__dict__[key] = copy.copy(self._default.__dict__[key])
+ return
+
+ # Default Base url
+ self.host = "http://hostname/ric/v1"
+ # Temp file folder for downloading files
+ self.temp_folder_path = None
+
+ # Authentication Settings
+ # dict to store API key(s)
+ self.api_key = {}
+ # dict to store API prefix (e.g. Bearer)
+ self.api_key_prefix = {}
+ # function to refresh API key if expired
+ self.refresh_api_key_hook = None
+ # Username for HTTP basic authentication
+ self.username = ""
+ # Password for HTTP basic authentication
+ self.password = ""
+
+ # Logging Settings
+ self.logger = {}
+ self.logger["package_logger"] = logging.getLogger("ricxappframe.subsclient")
+ self.logger["urllib3_logger"] = logging.getLogger("urllib3")
+ # Log format
+ self.logger_format = '%(asctime)s %(levelname)s %(message)s'
+ # Log stream handler
+ self.logger_stream_handler = None
+ # Log file handler
+ self.logger_file_handler = None
+ # Debug file location
+ self.logger_file = None
+ # Debug switch
+ self.debug = False
+
+ # SSL/TLS verification
+ # Set this to false to skip verifying SSL certificate when calling API
+ # from https server.
+ self.verify_ssl = True
+ # Set this to customize the certificate file to verify the peer.
+ self.ssl_ca_cert = None
+ # client certificate file
+ self.cert_file = None
+ # client key file
+ self.key_file = None
+ # Set this to True/False to enable/disable SSL hostname verification.
+ self.assert_hostname = None
+
+ # urllib3 connection pool's maximum number of connections saved
+ # per pool. urllib3 uses 1 connection as default value, but this is
+ # not the best value when you are making a lot of possibly parallel
+ # requests to the same host, which is often the case here.
+ # cpu_count * 5 is used as default value to increase performance.
+ self.connection_pool_maxsize = multiprocessing.cpu_count() * 5
+
+ # Proxy URL
+ self.proxy = None
+ # Safe chars for path_param
+ self.safe_chars_for_path_param = ''
+
+ # Disable client side validation
+ self.client_side_validation = True
+
+ @classmethod
+ def set_default(cls, default):
+ cls._default = default
+
+ @property
+ def logger_file(self):
+ """The logger file.
+
+ If the logger_file is None, then add stream handler and remove file
+ handler. Otherwise, add file handler and remove stream handler.
+
+ :param value: The logger_file path.
+ :type: str
+ """
+ return self.__logger_file
+
+ @logger_file.setter
+ def logger_file(self, value):
+ """The logger file.
+
+ If the logger_file is None, then add stream handler and remove file
+ handler. Otherwise, add file handler and remove stream handler.
+
+ :param value: The logger_file path.
+ :type: str
+ """
+ self.__logger_file = value
+ if self.__logger_file:
+ # If set logging file,
+ # then add file handler and remove stream handler.
+ self.logger_file_handler = logging.FileHandler(self.__logger_file)
+ self.logger_file_handler.setFormatter(self.logger_formatter)
+ for _, logger in six.iteritems(self.logger):
+ logger.addHandler(self.logger_file_handler)
+ if self.logger_stream_handler:
+ logger.removeHandler(self.logger_stream_handler)
+ else:
+ # If not set logging file,
+ # then add stream handler and remove file handler.
+ self.logger_stream_handler = logging.StreamHandler()
+ self.logger_stream_handler.setFormatter(self.logger_formatter)
+ for _, logger in six.iteritems(self.logger):
+ logger.addHandler(self.logger_stream_handler)
+ if self.logger_file_handler:
+ logger.removeHandler(self.logger_file_handler)
+
+ @property
+ def debug(self):
+ """Debug status
+
+ :param value: The debug status, True or False.
+ :type: bool
+ """
+ return self.__debug
+
+ @debug.setter
+ def debug(self, value):
+ """Debug status
+
+ :param value: The debug status, True or False.
+ :type: bool
+ """
+ self.__debug = value
+ if self.__debug:
+ # if debug status is True, turn on debug logging
+ for _, logger in six.iteritems(self.logger):
+ logger.setLevel(logging.DEBUG)
+ # turn on httplib debug
+ httplib.HTTPConnection.debuglevel = 1
+ else:
+ # if debug status is False, turn off debug logging,
+ # setting log level to default `logging.WARNING`
+ for _, logger in six.iteritems(self.logger):
+ logger.setLevel(logging.WARNING)
+ # turn off httplib debug
+ httplib.HTTPConnection.debuglevel = 0
+
+ @property
+ def logger_format(self):
+ """The logger format.
+
+ The logger_formatter will be updated when sets logger_format.
+
+ :param value: The format string.
+ :type: str
+ """
+ return self.__logger_format
+
+ @logger_format.setter
+ def logger_format(self, value):
+ """The logger format.
+
+ The logger_formatter will be updated when sets logger_format.
+
+ :param value: The format string.
+ :type: str
+ """
+ self.__logger_format = value
+ self.logger_formatter = logging.Formatter(self.__logger_format)
+
+ def get_api_key_with_prefix(self, identifier):
+ """Gets API key (with prefix if set).
+
+ :param identifier: The identifier of apiKey.
+ :return: The token for api key authentication.
+ """
+
+ if self.refresh_api_key_hook:
+ self.refresh_api_key_hook(self)
+
+ key = self.api_key.get(identifier)
+ if key:
+ prefix = self.api_key_prefix.get(identifier)
+ if prefix:
+ return "%s %s" % (prefix, key)
+ else:
+ return key
+
+ def get_basic_auth_token(self):
+ """Gets HTTP basic authentication header (string).
+
+ :return: The token for basic HTTP authentication.
+ """
+ return urllib3.util.make_headers(
+ basic_auth=self.username + ':' + self.password
+ ).get('authorization')
+
+ def auth_settings(self):
+ """Gets Auth Settings dict for api client.
+
+ :return: The Auth Settings information dict.
+ """
+ return {
+
+ }
+
+ def to_debug_report(self):
+ """Gets the essential information for debugging.
+
+ :return: The report for debugging.
+ """
+ return "Python SDK Debug Report:\n"\
+ "OS: {env}\n"\
+ "Python Version: {pyversion}\n"\
+ "Version of the API: 0.0.4\n"\
+ "SDK Package Version: 1.0.0".\
+ format(env=sys.platform, pyversion=sys.version)
diff --git a/ricxappframe/subsclient/models/__init__.py b/ricxappframe/subsclient/models/__init__.py
new file mode 100644
index 0000000..82505c6
--- /dev/null
+++ b/ricxappframe/subsclient/models/__init__.py
@@ -0,0 +1,34 @@
+# coding: utf-8
+
+# flake8: noqa
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+from __future__ import absolute_import
+
+# import models into model package
+from ricxappframe.subsclient.models.action_definition import ActionDefinition
+from ricxappframe.subsclient.models.action_to_be_setup import ActionToBeSetup
+from ricxappframe.subsclient.models.actions_to_be_setup import ActionsToBeSetup
+from ricxappframe.subsclient.models.config_metadata import ConfigMetadata
+from ricxappframe.subsclient.models.event_trigger_definition import EventTriggerDefinition
+from ricxappframe.subsclient.models.subscription_data import SubscriptionData
+from ricxappframe.subsclient.models.subscription_detail import SubscriptionDetail
+from ricxappframe.subsclient.models.subscription_details_list import SubscriptionDetailsList
+from ricxappframe.subsclient.models.subscription_instance import SubscriptionInstance
+from ricxappframe.subsclient.models.subscription_list import SubscriptionList
+from ricxappframe.subsclient.models.subscription_params import SubscriptionParams
+from ricxappframe.subsclient.models.subscription_params_client_endpoint import SubscriptionParamsClientEndpoint
+from ricxappframe.subsclient.models.subscription_params_e2_subscription_directives import SubscriptionParamsE2SubscriptionDirectives
+from ricxappframe.subsclient.models.subscription_response import SubscriptionResponse
+from ricxappframe.subsclient.models.subsequent_action import SubsequentAction
+from ricxappframe.subsclient.models.x_app_config import XAppConfig
+from ricxappframe.subsclient.models.xapp_config_list import XappConfigList
diff --git a/ricxappframe/subsclient/models/action_definition.py b/ricxappframe/subsclient/models/action_definition.py
new file mode 100644
index 0000000..b13f316
--- /dev/null
+++ b/ricxappframe/subsclient/models/action_definition.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class ActionDefinition(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ }
+
+ attribute_map = {
+ }
+
+ def __init__(self, _configuration=None): # noqa: E501
+ """ActionDefinition - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+ self.discriminator = None
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(ActionDefinition, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, ActionDefinition):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, ActionDefinition):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/action_to_be_setup.py b/ricxappframe/subsclient/models/action_to_be_setup.py
new file mode 100644
index 0000000..ba96c49
--- /dev/null
+++ b/ricxappframe/subsclient/models/action_to_be_setup.py
@@ -0,0 +1,216 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class ActionToBeSetup(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'action_id': 'int',
+ 'action_type': 'str',
+ 'action_definition': 'ActionDefinition',
+ 'subsequent_action': 'SubsequentAction'
+ }
+
+ attribute_map = {
+ 'action_id': 'ActionID',
+ 'action_type': 'ActionType',
+ 'action_definition': 'ActionDefinition',
+ 'subsequent_action': 'SubsequentAction'
+ }
+
+ def __init__(self, action_id=None, action_type=None, action_definition=None, subsequent_action=None, _configuration=None): # noqa: E501
+ """ActionToBeSetup - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._action_id = None
+ self._action_type = None
+ self._action_definition = None
+ self._subsequent_action = None
+ self.discriminator = None
+
+ self.action_id = action_id
+ self.action_type = action_type
+ if action_definition is not None:
+ self.action_definition = action_definition
+ if subsequent_action is not None:
+ self.subsequent_action = subsequent_action
+
+ @property
+ def action_id(self):
+ """Gets the action_id of this ActionToBeSetup. # noqa: E501
+
+
+ :return: The action_id of this ActionToBeSetup. # noqa: E501
+ :rtype: int
+ """
+ return self._action_id
+
+ @action_id.setter
+ def action_id(self, action_id):
+ """Sets the action_id of this ActionToBeSetup.
+
+
+ :param action_id: The action_id of this ActionToBeSetup. # noqa: E501
+ :type: int
+ """
+ if self._configuration.client_side_validation and action_id is None:
+ raise ValueError("Invalid value for `action_id`, must not be `None`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ action_id is not None and action_id > 255): # noqa: E501
+ raise ValueError("Invalid value for `action_id`, must be a value less than or equal to `255`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ action_id is not None and action_id < 0): # noqa: E501
+ raise ValueError("Invalid value for `action_id`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._action_id = action_id
+
+ @property
+ def action_type(self):
+ """Gets the action_type of this ActionToBeSetup. # noqa: E501
+
+
+ :return: The action_type of this ActionToBeSetup. # noqa: E501
+ :rtype: str
+ """
+ return self._action_type
+
+ @action_type.setter
+ def action_type(self, action_type):
+ """Sets the action_type of this ActionToBeSetup.
+
+
+ :param action_type: The action_type of this ActionToBeSetup. # noqa: E501
+ :type: str
+ """
+ if self._configuration.client_side_validation and action_type is None:
+ raise ValueError("Invalid value for `action_type`, must not be `None`") # noqa: E501
+ allowed_values = ["insert", "policy", "report"] # noqa: E501
+ if (self._configuration.client_side_validation and
+ action_type not in allowed_values):
+ raise ValueError(
+ "Invalid value for `action_type` ({0}), must be one of {1}" # noqa: E501
+ .format(action_type, allowed_values)
+ )
+
+ self._action_type = action_type
+
+ @property
+ def action_definition(self):
+ """Gets the action_definition of this ActionToBeSetup. # noqa: E501
+
+
+ :return: The action_definition of this ActionToBeSetup. # noqa: E501
+ :rtype: ActionDefinition
+ """
+ return self._action_definition
+
+ @action_definition.setter
+ def action_definition(self, action_definition):
+ """Sets the action_definition of this ActionToBeSetup.
+
+
+ :param action_definition: The action_definition of this ActionToBeSetup. # noqa: E501
+ :type: ActionDefinition
+ """
+
+ self._action_definition = action_definition
+
+ @property
+ def subsequent_action(self):
+ """Gets the subsequent_action of this ActionToBeSetup. # noqa: E501
+
+
+ :return: The subsequent_action of this ActionToBeSetup. # noqa: E501
+ :rtype: SubsequentAction
+ """
+ return self._subsequent_action
+
+ @subsequent_action.setter
+ def subsequent_action(self, subsequent_action):
+ """Sets the subsequent_action of this ActionToBeSetup.
+
+
+ :param subsequent_action: The subsequent_action of this ActionToBeSetup. # noqa: E501
+ :type: SubsequentAction
+ """
+
+ self._subsequent_action = subsequent_action
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(ActionToBeSetup, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, ActionToBeSetup):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, ActionToBeSetup):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/actions_to_be_setup.py b/ricxappframe/subsclient/models/actions_to_be_setup.py
new file mode 100644
index 0000000..8116915
--- /dev/null
+++ b/ricxappframe/subsclient/models/actions_to_be_setup.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class ActionsToBeSetup(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ }
+
+ attribute_map = {
+ }
+
+ def __init__(self, _configuration=None): # noqa: E501
+ """ActionsToBeSetup - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+ self.discriminator = None
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(ActionsToBeSetup, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, ActionsToBeSetup):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, ActionsToBeSetup):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/config_metadata.py b/ricxappframe/subsclient/models/config_metadata.py
new file mode 100644
index 0000000..df0925f
--- /dev/null
+++ b/ricxappframe/subsclient/models/config_metadata.py
@@ -0,0 +1,162 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class ConfigMetadata(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'xapp_name': 'str',
+ 'config_type': 'str'
+ }
+
+ attribute_map = {
+ 'xapp_name': 'xappName',
+ 'config_type': 'configType'
+ }
+
+ def __init__(self, xapp_name=None, config_type=None, _configuration=None): # noqa: E501
+ """ConfigMetadata - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._xapp_name = None
+ self._config_type = None
+ self.discriminator = None
+
+ self.xapp_name = xapp_name
+ self.config_type = config_type
+
+ @property
+ def xapp_name(self):
+ """Gets the xapp_name of this ConfigMetadata. # noqa: E501
+
+ Name of the xApp # noqa: E501
+
+ :return: The xapp_name of this ConfigMetadata. # noqa: E501
+ :rtype: str
+ """
+ return self._xapp_name
+
+ @xapp_name.setter
+ def xapp_name(self, xapp_name):
+ """Sets the xapp_name of this ConfigMetadata.
+
+ Name of the xApp # noqa: E501
+
+ :param xapp_name: The xapp_name of this ConfigMetadata. # noqa: E501
+ :type: str
+ """
+ if self._configuration.client_side_validation and xapp_name is None:
+ raise ValueError("Invalid value for `xapp_name`, must not be `None`") # noqa: E501
+
+ self._xapp_name = xapp_name
+
+ @property
+ def config_type(self):
+ """Gets the config_type of this ConfigMetadata. # noqa: E501
+
+ The type of the content # noqa: E501
+
+ :return: The config_type of this ConfigMetadata. # noqa: E501
+ :rtype: str
+ """
+ return self._config_type
+
+ @config_type.setter
+ def config_type(self, config_type):
+ """Sets the config_type of this ConfigMetadata.
+
+ The type of the content # noqa: E501
+
+ :param config_type: The config_type of this ConfigMetadata. # noqa: E501
+ :type: str
+ """
+ if self._configuration.client_side_validation and config_type is None:
+ raise ValueError("Invalid value for `config_type`, must not be `None`") # noqa: E501
+ allowed_values = ["json", "xml", "other"] # noqa: E501
+ if (self._configuration.client_side_validation and
+ config_type not in allowed_values):
+ raise ValueError(
+ "Invalid value for `config_type` ({0}), must be one of {1}" # noqa: E501
+ .format(config_type, allowed_values)
+ )
+
+ self._config_type = config_type
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(ConfigMetadata, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, ConfigMetadata):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, ConfigMetadata):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/event_trigger_definition.py b/ricxappframe/subsclient/models/event_trigger_definition.py
new file mode 100644
index 0000000..5f71a65
--- /dev/null
+++ b/ricxappframe/subsclient/models/event_trigger_definition.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class EventTriggerDefinition(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ }
+
+ attribute_map = {
+ }
+
+ def __init__(self, _configuration=None): # noqa: E501
+ """EventTriggerDefinition - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+ self.discriminator = None
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(EventTriggerDefinition, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, EventTriggerDefinition):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, EventTriggerDefinition):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_data.py b/ricxappframe/subsclient/models/subscription_data.py
new file mode 100644
index 0000000..3fdb085
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_data.py
@@ -0,0 +1,201 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionData(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'subscription_id': 'int',
+ 'meid': 'str',
+ 'client_endpoint': 'list[str]',
+ 'subscription_instances': 'list[SubscriptionInstance]'
+ }
+
+ attribute_map = {
+ 'subscription_id': 'SubscriptionId',
+ 'meid': 'Meid',
+ 'client_endpoint': 'ClientEndpoint',
+ 'subscription_instances': 'SubscriptionInstances'
+ }
+
+ def __init__(self, subscription_id=None, meid=None, client_endpoint=None, subscription_instances=None, _configuration=None): # noqa: E501
+ """SubscriptionData - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._subscription_id = None
+ self._meid = None
+ self._client_endpoint = None
+ self._subscription_instances = None
+ self.discriminator = None
+
+ if subscription_id is not None:
+ self.subscription_id = subscription_id
+ if meid is not None:
+ self.meid = meid
+ if client_endpoint is not None:
+ self.client_endpoint = client_endpoint
+ if subscription_instances is not None:
+ self.subscription_instances = subscription_instances
+
+ @property
+ def subscription_id(self):
+ """Gets the subscription_id of this SubscriptionData. # noqa: E501
+
+
+ :return: The subscription_id of this SubscriptionData. # noqa: E501
+ :rtype: int
+ """
+ return self._subscription_id
+
+ @subscription_id.setter
+ def subscription_id(self, subscription_id):
+ """Sets the subscription_id of this SubscriptionData.
+
+
+ :param subscription_id: The subscription_id of this SubscriptionData. # noqa: E501
+ :type: int
+ """
+
+ self._subscription_id = subscription_id
+
+ @property
+ def meid(self):
+ """Gets the meid of this SubscriptionData. # noqa: E501
+
+
+ :return: The meid of this SubscriptionData. # noqa: E501
+ :rtype: str
+ """
+ return self._meid
+
+ @meid.setter
+ def meid(self, meid):
+ """Sets the meid of this SubscriptionData.
+
+
+ :param meid: The meid of this SubscriptionData. # noqa: E501
+ :type: str
+ """
+
+ self._meid = meid
+
+ @property
+ def client_endpoint(self):
+ """Gets the client_endpoint of this SubscriptionData. # noqa: E501
+
+
+ :return: The client_endpoint of this SubscriptionData. # noqa: E501
+ :rtype: list[str]
+ """
+ return self._client_endpoint
+
+ @client_endpoint.setter
+ def client_endpoint(self, client_endpoint):
+ """Sets the client_endpoint of this SubscriptionData.
+
+
+ :param client_endpoint: The client_endpoint of this SubscriptionData. # noqa: E501
+ :type: list[str]
+ """
+
+ self._client_endpoint = client_endpoint
+
+ @property
+ def subscription_instances(self):
+ """Gets the subscription_instances of this SubscriptionData. # noqa: E501
+
+
+ :return: The subscription_instances of this SubscriptionData. # noqa: E501
+ :rtype: list[SubscriptionInstance]
+ """
+ return self._subscription_instances
+
+ @subscription_instances.setter
+ def subscription_instances(self, subscription_instances):
+ """Sets the subscription_instances of this SubscriptionData.
+
+
+ :param subscription_instances: The subscription_instances of this SubscriptionData. # noqa: E501
+ :type: list[SubscriptionInstance]
+ """
+
+ self._subscription_instances = subscription_instances
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionData, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionData):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionData):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_detail.py b/ricxappframe/subsclient/models/subscription_detail.py
new file mode 100644
index 0000000..2657cdb
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_detail.py
@@ -0,0 +1,184 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionDetail(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'xapp_event_instance_id': 'int',
+ 'event_triggers': 'EventTriggerDefinition',
+ 'action_to_be_setup_list': 'ActionsToBeSetup'
+ }
+
+ attribute_map = {
+ 'xapp_event_instance_id': 'XappEventInstanceId',
+ 'event_triggers': 'EventTriggers',
+ 'action_to_be_setup_list': 'ActionToBeSetupList'
+ }
+
+ def __init__(self, xapp_event_instance_id=None, event_triggers=None, action_to_be_setup_list=None, _configuration=None): # noqa: E501
+ """SubscriptionDetail - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._xapp_event_instance_id = None
+ self._event_triggers = None
+ self._action_to_be_setup_list = None
+ self.discriminator = None
+
+ self.xapp_event_instance_id = xapp_event_instance_id
+ self.event_triggers = event_triggers
+ self.action_to_be_setup_list = action_to_be_setup_list
+
+ @property
+ def xapp_event_instance_id(self):
+ """Gets the xapp_event_instance_id of this SubscriptionDetail. # noqa: E501
+
+
+ :return: The xapp_event_instance_id of this SubscriptionDetail. # noqa: E501
+ :rtype: int
+ """
+ return self._xapp_event_instance_id
+
+ @xapp_event_instance_id.setter
+ def xapp_event_instance_id(self, xapp_event_instance_id):
+ """Sets the xapp_event_instance_id of this SubscriptionDetail.
+
+
+ :param xapp_event_instance_id: The xapp_event_instance_id of this SubscriptionDetail. # noqa: E501
+ :type: int
+ """
+ if self._configuration.client_side_validation and xapp_event_instance_id is None:
+ raise ValueError("Invalid value for `xapp_event_instance_id`, must not be `None`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ xapp_event_instance_id is not None and xapp_event_instance_id > 65535): # noqa: E501
+ raise ValueError("Invalid value for `xapp_event_instance_id`, must be a value less than or equal to `65535`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ xapp_event_instance_id is not None and xapp_event_instance_id < 0): # noqa: E501
+ raise ValueError("Invalid value for `xapp_event_instance_id`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._xapp_event_instance_id = xapp_event_instance_id
+
+ @property
+ def event_triggers(self):
+ """Gets the event_triggers of this SubscriptionDetail. # noqa: E501
+
+
+ :return: The event_triggers of this SubscriptionDetail. # noqa: E501
+ :rtype: EventTriggerDefinition
+ """
+ return self._event_triggers
+
+ @event_triggers.setter
+ def event_triggers(self, event_triggers):
+ """Sets the event_triggers of this SubscriptionDetail.
+
+
+ :param event_triggers: The event_triggers of this SubscriptionDetail. # noqa: E501
+ :type: EventTriggerDefinition
+ """
+ if self._configuration.client_side_validation and event_triggers is None:
+ raise ValueError("Invalid value for `event_triggers`, must not be `None`") # noqa: E501
+
+ self._event_triggers = event_triggers
+
+ @property
+ def action_to_be_setup_list(self):
+ """Gets the action_to_be_setup_list of this SubscriptionDetail. # noqa: E501
+
+
+ :return: The action_to_be_setup_list of this SubscriptionDetail. # noqa: E501
+ :rtype: ActionsToBeSetup
+ """
+ return self._action_to_be_setup_list
+
+ @action_to_be_setup_list.setter
+ def action_to_be_setup_list(self, action_to_be_setup_list):
+ """Sets the action_to_be_setup_list of this SubscriptionDetail.
+
+
+ :param action_to_be_setup_list: The action_to_be_setup_list of this SubscriptionDetail. # noqa: E501
+ :type: ActionsToBeSetup
+ """
+ if self._configuration.client_side_validation and action_to_be_setup_list is None:
+ raise ValueError("Invalid value for `action_to_be_setup_list`, must not be `None`") # noqa: E501
+
+ self._action_to_be_setup_list = action_to_be_setup_list
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionDetail, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionDetail):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionDetail):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_details_list.py b/ricxappframe/subsclient/models/subscription_details_list.py
new file mode 100644
index 0000000..eb0c237
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_details_list.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionDetailsList(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ }
+
+ attribute_map = {
+ }
+
+ def __init__(self, _configuration=None): # noqa: E501
+ """SubscriptionDetailsList - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+ self.discriminator = None
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionDetailsList, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionDetailsList):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionDetailsList):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_instance.py b/ricxappframe/subsclient/models/subscription_instance.py
new file mode 100644
index 0000000..df8d00f
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_instance.py
@@ -0,0 +1,261 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionInstance(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'xapp_event_instance_id': 'int',
+ 'e2_event_instance_id': 'int',
+ 'error_cause': 'str',
+ 'error_source': 'str',
+ 'timeout_type': 'str'
+ }
+
+ attribute_map = {
+ 'xapp_event_instance_id': 'XappEventInstanceId',
+ 'e2_event_instance_id': 'E2EventInstanceId',
+ 'error_cause': 'ErrorCause',
+ 'error_source': 'ErrorSource',
+ 'timeout_type': 'TimeoutType'
+ }
+
+ def __init__(self, xapp_event_instance_id=None, e2_event_instance_id=None, error_cause=None, error_source=None, timeout_type=None, _configuration=None): # noqa: E501
+ """SubscriptionInstance - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._xapp_event_instance_id = None
+ self._e2_event_instance_id = None
+ self._error_cause = None
+ self._error_source = None
+ self._timeout_type = None
+ self.discriminator = None
+
+ self.xapp_event_instance_id = xapp_event_instance_id
+ self.e2_event_instance_id = e2_event_instance_id
+ if error_cause is not None:
+ self.error_cause = error_cause
+ if error_source is not None:
+ self.error_source = error_source
+ if timeout_type is not None:
+ self.timeout_type = timeout_type
+
+ @property
+ def xapp_event_instance_id(self):
+ """Gets the xapp_event_instance_id of this SubscriptionInstance. # noqa: E501
+
+
+ :return: The xapp_event_instance_id of this SubscriptionInstance. # noqa: E501
+ :rtype: int
+ """
+ return self._xapp_event_instance_id
+
+ @xapp_event_instance_id.setter
+ def xapp_event_instance_id(self, xapp_event_instance_id):
+ """Sets the xapp_event_instance_id of this SubscriptionInstance.
+
+
+ :param xapp_event_instance_id: The xapp_event_instance_id of this SubscriptionInstance. # noqa: E501
+ :type: int
+ """
+ if self._configuration.client_side_validation and xapp_event_instance_id is None:
+ raise ValueError("Invalid value for `xapp_event_instance_id`, must not be `None`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ xapp_event_instance_id is not None and xapp_event_instance_id > 65535): # noqa: E501
+ raise ValueError("Invalid value for `xapp_event_instance_id`, must be a value less than or equal to `65535`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ xapp_event_instance_id is not None and xapp_event_instance_id < 0): # noqa: E501
+ raise ValueError("Invalid value for `xapp_event_instance_id`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._xapp_event_instance_id = xapp_event_instance_id
+
+ @property
+ def e2_event_instance_id(self):
+ """Gets the e2_event_instance_id of this SubscriptionInstance. # noqa: E501
+
+
+ :return: The e2_event_instance_id of this SubscriptionInstance. # noqa: E501
+ :rtype: int
+ """
+ return self._e2_event_instance_id
+
+ @e2_event_instance_id.setter
+ def e2_event_instance_id(self, e2_event_instance_id):
+ """Sets the e2_event_instance_id of this SubscriptionInstance.
+
+
+ :param e2_event_instance_id: The e2_event_instance_id of this SubscriptionInstance. # noqa: E501
+ :type: int
+ """
+ if self._configuration.client_side_validation and e2_event_instance_id is None:
+ raise ValueError("Invalid value for `e2_event_instance_id`, must not be `None`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ e2_event_instance_id is not None and e2_event_instance_id > 65535): # noqa: E501
+ raise ValueError("Invalid value for `e2_event_instance_id`, must be a value less than or equal to `65535`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ e2_event_instance_id is not None and e2_event_instance_id < 0): # noqa: E501
+ raise ValueError("Invalid value for `e2_event_instance_id`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._e2_event_instance_id = e2_event_instance_id
+
+ @property
+ def error_cause(self):
+ """Gets the error_cause of this SubscriptionInstance. # noqa: E501
+
+ Descriptive error cause. Empty string when no error. # noqa: E501
+
+ :return: The error_cause of this SubscriptionInstance. # noqa: E501
+ :rtype: str
+ """
+ return self._error_cause
+
+ @error_cause.setter
+ def error_cause(self, error_cause):
+ """Sets the error_cause of this SubscriptionInstance.
+
+ Descriptive error cause. Empty string when no error. # noqa: E501
+
+ :param error_cause: The error_cause of this SubscriptionInstance. # noqa: E501
+ :type: str
+ """
+
+ self._error_cause = error_cause
+
+ @property
+ def error_source(self):
+ """Gets the error_source of this SubscriptionInstance. # noqa: E501
+
+ Source of error cause. # noqa: E501
+
+ :return: The error_source of this SubscriptionInstance. # noqa: E501
+ :rtype: str
+ """
+ return self._error_source
+
+ @error_source.setter
+ def error_source(self, error_source):
+ """Sets the error_source of this SubscriptionInstance.
+
+ Source of error cause. # noqa: E501
+
+ :param error_source: The error_source of this SubscriptionInstance. # noqa: E501
+ :type: str
+ """
+ allowed_values = ["SUBMGR", "RTMGR", "DBAAS", "ASN1", "E2Node"] # noqa: E501
+ if (self._configuration.client_side_validation and
+ error_source not in allowed_values):
+ raise ValueError(
+ "Invalid value for `error_source` ({0}), must be one of {1}" # noqa: E501
+ .format(error_source, allowed_values)
+ )
+
+ self._error_source = error_source
+
+ @property
+ def timeout_type(self):
+ """Gets the timeout_type of this SubscriptionInstance. # noqa: E501
+
+ Type timeout. xApp should retry if timeout occurs. # noqa: E501
+
+ :return: The timeout_type of this SubscriptionInstance. # noqa: E501
+ :rtype: str
+ """
+ return self._timeout_type
+
+ @timeout_type.setter
+ def timeout_type(self, timeout_type):
+ """Sets the timeout_type of this SubscriptionInstance.
+
+ Type timeout. xApp should retry if timeout occurs. # noqa: E501
+
+ :param timeout_type: The timeout_type of this SubscriptionInstance. # noqa: E501
+ :type: str
+ """
+ allowed_values = ["E2-Timeout", "RTMGR-Timeout", "DBAAS-Timeout"] # noqa: E501
+ if (self._configuration.client_side_validation and
+ timeout_type not in allowed_values):
+ raise ValueError(
+ "Invalid value for `timeout_type` ({0}), must be one of {1}" # noqa: E501
+ .format(timeout_type, allowed_values)
+ )
+
+ self._timeout_type = timeout_type
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionInstance, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionInstance):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionInstance):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_list.py b/ricxappframe/subsclient/models/subscription_list.py
new file mode 100644
index 0000000..f4fba1b
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_list.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionList(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ }
+
+ attribute_map = {
+ }
+
+ def __init__(self, _configuration=None): # noqa: E501
+ """SubscriptionList - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+ self.discriminator = None
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionList, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionList):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionList):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_params.py b/ricxappframe/subsclient/models/subscription_params.py
new file mode 100644
index 0000000..18b89ca
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_params.py
@@ -0,0 +1,265 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionParams(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'subscription_id': 'str',
+ 'client_endpoint': 'SubscriptionParamsClientEndpoint',
+ 'meid': 'str',
+ 'ran_function_id': 'int',
+ 'e2_subscription_directives': 'SubscriptionParamsE2SubscriptionDirectives',
+ 'subscription_details': 'SubscriptionDetailsList'
+ }
+
+ attribute_map = {
+ 'subscription_id': 'SubscriptionId',
+ 'client_endpoint': 'ClientEndpoint',
+ 'meid': 'Meid',
+ 'ran_function_id': 'RANFunctionID',
+ 'e2_subscription_directives': 'E2SubscriptionDirectives',
+ 'subscription_details': 'SubscriptionDetails'
+ }
+
+ def __init__(self, subscription_id=None, client_endpoint=None, meid=None, ran_function_id=None, e2_subscription_directives=None, subscription_details=None, _configuration=None): # noqa: E501
+ """SubscriptionParams - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._subscription_id = None
+ self._client_endpoint = None
+ self._meid = None
+ self._ran_function_id = None
+ self._e2_subscription_directives = None
+ self._subscription_details = None
+ self.discriminator = None
+
+ if subscription_id is not None:
+ self.subscription_id = subscription_id
+ self.client_endpoint = client_endpoint
+ self.meid = meid
+ self.ran_function_id = ran_function_id
+ if e2_subscription_directives is not None:
+ self.e2_subscription_directives = e2_subscription_directives
+ self.subscription_details = subscription_details
+
+ @property
+ def subscription_id(self):
+ """Gets the subscription_id of this SubscriptionParams. # noqa: E501
+
+ Optional subscription ID (Submgr allocates if not given) # noqa: E501
+
+ :return: The subscription_id of this SubscriptionParams. # noqa: E501
+ :rtype: str
+ """
+ return self._subscription_id
+
+ @subscription_id.setter
+ def subscription_id(self, subscription_id):
+ """Sets the subscription_id of this SubscriptionParams.
+
+ Optional subscription ID (Submgr allocates if not given) # noqa: E501
+
+ :param subscription_id: The subscription_id of this SubscriptionParams. # noqa: E501
+ :type: str
+ """
+
+ self._subscription_id = subscription_id
+
+ @property
+ def client_endpoint(self):
+ """Gets the client_endpoint of this SubscriptionParams. # noqa: E501
+
+
+ :return: The client_endpoint of this SubscriptionParams. # noqa: E501
+ :rtype: SubscriptionParamsClientEndpoint
+ """
+ return self._client_endpoint
+
+ @client_endpoint.setter
+ def client_endpoint(self, client_endpoint):
+ """Sets the client_endpoint of this SubscriptionParams.
+
+
+ :param client_endpoint: The client_endpoint of this SubscriptionParams. # noqa: E501
+ :type: SubscriptionParamsClientEndpoint
+ """
+ if self._configuration.client_side_validation and client_endpoint is None:
+ raise ValueError("Invalid value for `client_endpoint`, must not be `None`") # noqa: E501
+
+ self._client_endpoint = client_endpoint
+
+ @property
+ def meid(self):
+ """Gets the meid of this SubscriptionParams. # noqa: E501
+
+
+ :return: The meid of this SubscriptionParams. # noqa: E501
+ :rtype: str
+ """
+ return self._meid
+
+ @meid.setter
+ def meid(self, meid):
+ """Sets the meid of this SubscriptionParams.
+
+
+ :param meid: The meid of this SubscriptionParams. # noqa: E501
+ :type: str
+ """
+ if self._configuration.client_side_validation and meid is None:
+ raise ValueError("Invalid value for `meid`, must not be `None`") # noqa: E501
+
+ self._meid = meid
+
+ @property
+ def ran_function_id(self):
+ """Gets the ran_function_id of this SubscriptionParams. # noqa: E501
+
+
+ :return: The ran_function_id of this SubscriptionParams. # noqa: E501
+ :rtype: int
+ """
+ return self._ran_function_id
+
+ @ran_function_id.setter
+ def ran_function_id(self, ran_function_id):
+ """Sets the ran_function_id of this SubscriptionParams.
+
+
+ :param ran_function_id: The ran_function_id of this SubscriptionParams. # noqa: E501
+ :type: int
+ """
+ if self._configuration.client_side_validation and ran_function_id is None:
+ raise ValueError("Invalid value for `ran_function_id`, must not be `None`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ ran_function_id is not None and ran_function_id > 4095): # noqa: E501
+ raise ValueError("Invalid value for `ran_function_id`, must be a value less than or equal to `4095`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ ran_function_id is not None and ran_function_id < 0): # noqa: E501
+ raise ValueError("Invalid value for `ran_function_id`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._ran_function_id = ran_function_id
+
+ @property
+ def e2_subscription_directives(self):
+ """Gets the e2_subscription_directives of this SubscriptionParams. # noqa: E501
+
+
+ :return: The e2_subscription_directives of this SubscriptionParams. # noqa: E501
+ :rtype: SubscriptionParamsE2SubscriptionDirectives
+ """
+ return self._e2_subscription_directives
+
+ @e2_subscription_directives.setter
+ def e2_subscription_directives(self, e2_subscription_directives):
+ """Sets the e2_subscription_directives of this SubscriptionParams.
+
+
+ :param e2_subscription_directives: The e2_subscription_directives of this SubscriptionParams. # noqa: E501
+ :type: SubscriptionParamsE2SubscriptionDirectives
+ """
+
+ self._e2_subscription_directives = e2_subscription_directives
+
+ @property
+ def subscription_details(self):
+ """Gets the subscription_details of this SubscriptionParams. # noqa: E501
+
+
+ :return: The subscription_details of this SubscriptionParams. # noqa: E501
+ :rtype: SubscriptionDetailsList
+ """
+ return self._subscription_details
+
+ @subscription_details.setter
+ def subscription_details(self, subscription_details):
+ """Sets the subscription_details of this SubscriptionParams.
+
+
+ :param subscription_details: The subscription_details of this SubscriptionParams. # noqa: E501
+ :type: SubscriptionDetailsList
+ """
+ if self._configuration.client_side_validation and subscription_details is None:
+ raise ValueError("Invalid value for `subscription_details`, must not be `None`") # noqa: E501
+
+ self._subscription_details = subscription_details
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionParams, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionParams):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionParams):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_params_client_endpoint.py b/ricxappframe/subsclient/models/subscription_params_client_endpoint.py
new file mode 100644
index 0000000..4521653
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_params_client_endpoint.py
@@ -0,0 +1,193 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionParamsClientEndpoint(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'host': 'str',
+ 'http_port': 'int',
+ 'rmr_port': 'int'
+ }
+
+ attribute_map = {
+ 'host': 'Host',
+ 'http_port': 'HTTPPort',
+ 'rmr_port': 'RMRPort'
+ }
+
+ def __init__(self, host=None, http_port=None, rmr_port=None, _configuration=None): # noqa: E501
+ """SubscriptionParamsClientEndpoint - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._host = None
+ self._http_port = None
+ self._rmr_port = None
+ self.discriminator = None
+
+ if host is not None:
+ self.host = host
+ if http_port is not None:
+ self.http_port = http_port
+ if rmr_port is not None:
+ self.rmr_port = rmr_port
+
+ @property
+ def host(self):
+ """Gets the host of this SubscriptionParamsClientEndpoint. # noqa: E501
+
+ xApp service address name like 'service-ricxapp-xappname-http.ricxapp' # noqa: E501
+
+ :return: The host of this SubscriptionParamsClientEndpoint. # noqa: E501
+ :rtype: str
+ """
+ return self._host
+
+ @host.setter
+ def host(self, host):
+ """Sets the host of this SubscriptionParamsClientEndpoint.
+
+ xApp service address name like 'service-ricxapp-xappname-http.ricxapp' # noqa: E501
+
+ :param host: The host of this SubscriptionParamsClientEndpoint. # noqa: E501
+ :type: str
+ """
+
+ self._host = host
+
+ @property
+ def http_port(self):
+ """Gets the http_port of this SubscriptionParamsClientEndpoint. # noqa: E501
+
+ xApp HTTP service address port # noqa: E501
+
+ :return: The http_port of this SubscriptionParamsClientEndpoint. # noqa: E501
+ :rtype: int
+ """
+ return self._http_port
+
+ @http_port.setter
+ def http_port(self, http_port):
+ """Sets the http_port of this SubscriptionParamsClientEndpoint.
+
+ xApp HTTP service address port # noqa: E501
+
+ :param http_port: The http_port of this SubscriptionParamsClientEndpoint. # noqa: E501
+ :type: int
+ """
+ if (self._configuration.client_side_validation and
+ http_port is not None and http_port > 65535): # noqa: E501
+ raise ValueError("Invalid value for `http_port`, must be a value less than or equal to `65535`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ http_port is not None and http_port < 0): # noqa: E501
+ raise ValueError("Invalid value for `http_port`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._http_port = http_port
+
+ @property
+ def rmr_port(self):
+ """Gets the rmr_port of this SubscriptionParamsClientEndpoint. # noqa: E501
+
+ xApp RMR service address port # noqa: E501
+
+ :return: The rmr_port of this SubscriptionParamsClientEndpoint. # noqa: E501
+ :rtype: int
+ """
+ return self._rmr_port
+
+ @rmr_port.setter
+ def rmr_port(self, rmr_port):
+ """Sets the rmr_port of this SubscriptionParamsClientEndpoint.
+
+ xApp RMR service address port # noqa: E501
+
+ :param rmr_port: The rmr_port of this SubscriptionParamsClientEndpoint. # noqa: E501
+ :type: int
+ """
+ if (self._configuration.client_side_validation and
+ rmr_port is not None and rmr_port > 65535): # noqa: E501
+ raise ValueError("Invalid value for `rmr_port`, must be a value less than or equal to `65535`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ rmr_port is not None and rmr_port < 0): # noqa: E501
+ raise ValueError("Invalid value for `rmr_port`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._rmr_port = rmr_port
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionParamsClientEndpoint, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionParamsClientEndpoint):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionParamsClientEndpoint):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_params_e2_subscription_directives.py b/ricxappframe/subsclient/models/subscription_params_e2_subscription_directives.py
new file mode 100644
index 0000000..74cf43c
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_params_e2_subscription_directives.py
@@ -0,0 +1,193 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionParamsE2SubscriptionDirectives(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'e2_timeout_timer_value': 'int',
+ 'e2_retry_count': 'int',
+ 'rmr_routing_needed': 'bool'
+ }
+
+ attribute_map = {
+ 'e2_timeout_timer_value': 'E2TimeoutTimerValue',
+ 'e2_retry_count': 'E2RetryCount',
+ 'rmr_routing_needed': 'RMRRoutingNeeded'
+ }
+
+ def __init__(self, e2_timeout_timer_value=None, e2_retry_count=None, rmr_routing_needed=None, _configuration=None): # noqa: E501
+ """SubscriptionParamsE2SubscriptionDirectives - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._e2_timeout_timer_value = None
+ self._e2_retry_count = None
+ self._rmr_routing_needed = None
+ self.discriminator = None
+
+ if e2_timeout_timer_value is not None:
+ self.e2_timeout_timer_value = e2_timeout_timer_value
+ if e2_retry_count is not None:
+ self.e2_retry_count = e2_retry_count
+ if rmr_routing_needed is not None:
+ self.rmr_routing_needed = rmr_routing_needed
+
+ @property
+ def e2_timeout_timer_value(self):
+ """Gets the e2_timeout_timer_value of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+
+ How long time response is waited from E2 node # noqa: E501
+
+ :return: The e2_timeout_timer_value of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+ :rtype: int
+ """
+ return self._e2_timeout_timer_value
+
+ @e2_timeout_timer_value.setter
+ def e2_timeout_timer_value(self, e2_timeout_timer_value):
+ """Sets the e2_timeout_timer_value of this SubscriptionParamsE2SubscriptionDirectives.
+
+ How long time response is waited from E2 node # noqa: E501
+
+ :param e2_timeout_timer_value: The e2_timeout_timer_value of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+ :type: int
+ """
+ if (self._configuration.client_side_validation and
+ e2_timeout_timer_value is not None and e2_timeout_timer_value > 10): # noqa: E501
+ raise ValueError("Invalid value for `e2_timeout_timer_value`, must be a value less than or equal to `10`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ e2_timeout_timer_value is not None and e2_timeout_timer_value < 1): # noqa: E501
+ raise ValueError("Invalid value for `e2_timeout_timer_value`, must be a value greater than or equal to `1`") # noqa: E501
+
+ self._e2_timeout_timer_value = e2_timeout_timer_value
+
+ @property
+ def e2_retry_count(self):
+ """Gets the e2_retry_count of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+
+ How many times E2 subscription request is retried # noqa: E501
+
+ :return: The e2_retry_count of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+ :rtype: int
+ """
+ return self._e2_retry_count
+
+ @e2_retry_count.setter
+ def e2_retry_count(self, e2_retry_count):
+ """Sets the e2_retry_count of this SubscriptionParamsE2SubscriptionDirectives.
+
+ How many times E2 subscription request is retried # noqa: E501
+
+ :param e2_retry_count: The e2_retry_count of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+ :type: int
+ """
+ if (self._configuration.client_side_validation and
+ e2_retry_count is not None and e2_retry_count > 10): # noqa: E501
+ raise ValueError("Invalid value for `e2_retry_count`, must be a value less than or equal to `10`") # noqa: E501
+ if (self._configuration.client_side_validation and
+ e2_retry_count is not None and e2_retry_count < 0): # noqa: E501
+ raise ValueError("Invalid value for `e2_retry_count`, must be a value greater than or equal to `0`") # noqa: E501
+
+ self._e2_retry_count = e2_retry_count
+
+ @property
+ def rmr_routing_needed(self):
+ """Gets the rmr_routing_needed of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+
+ Subscription needs RMR route from E2Term to xApp # noqa: E501
+
+ :return: The rmr_routing_needed of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+ :rtype: bool
+ """
+ return self._rmr_routing_needed
+
+ @rmr_routing_needed.setter
+ def rmr_routing_needed(self, rmr_routing_needed):
+ """Sets the rmr_routing_needed of this SubscriptionParamsE2SubscriptionDirectives.
+
+ Subscription needs RMR route from E2Term to xApp # noqa: E501
+
+ :param rmr_routing_needed: The rmr_routing_needed of this SubscriptionParamsE2SubscriptionDirectives. # noqa: E501
+ :type: bool
+ """
+
+ self._rmr_routing_needed = rmr_routing_needed
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionParamsE2SubscriptionDirectives, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionParamsE2SubscriptionDirectives):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionParamsE2SubscriptionDirectives):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subscription_response.py b/ricxappframe/subsclient/models/subscription_response.py
new file mode 100644
index 0000000..df08c08
--- /dev/null
+++ b/ricxappframe/subsclient/models/subscription_response.py
@@ -0,0 +1,151 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubscriptionResponse(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'subscription_id': 'str',
+ 'subscription_instances': 'list[SubscriptionInstance]'
+ }
+
+ attribute_map = {
+ 'subscription_id': 'SubscriptionId',
+ 'subscription_instances': 'SubscriptionInstances'
+ }
+
+ def __init__(self, subscription_id=None, subscription_instances=None, _configuration=None): # noqa: E501
+ """SubscriptionResponse - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._subscription_id = None
+ self._subscription_instances = None
+ self.discriminator = None
+
+ self.subscription_id = subscription_id
+ self.subscription_instances = subscription_instances
+
+ @property
+ def subscription_id(self):
+ """Gets the subscription_id of this SubscriptionResponse. # noqa: E501
+
+
+ :return: The subscription_id of this SubscriptionResponse. # noqa: E501
+ :rtype: str
+ """
+ return self._subscription_id
+
+ @subscription_id.setter
+ def subscription_id(self, subscription_id):
+ """Sets the subscription_id of this SubscriptionResponse.
+
+
+ :param subscription_id: The subscription_id of this SubscriptionResponse. # noqa: E501
+ :type: str
+ """
+ if self._configuration.client_side_validation and subscription_id is None:
+ raise ValueError("Invalid value for `subscription_id`, must not be `None`") # noqa: E501
+
+ self._subscription_id = subscription_id
+
+ @property
+ def subscription_instances(self):
+ """Gets the subscription_instances of this SubscriptionResponse. # noqa: E501
+
+
+ :return: The subscription_instances of this SubscriptionResponse. # noqa: E501
+ :rtype: list[SubscriptionInstance]
+ """
+ return self._subscription_instances
+
+ @subscription_instances.setter
+ def subscription_instances(self, subscription_instances):
+ """Sets the subscription_instances of this SubscriptionResponse.
+
+
+ :param subscription_instances: The subscription_instances of this SubscriptionResponse. # noqa: E501
+ :type: list[SubscriptionInstance]
+ """
+ if self._configuration.client_side_validation and subscription_instances is None:
+ raise ValueError("Invalid value for `subscription_instances`, must not be `None`") # noqa: E501
+
+ self._subscription_instances = subscription_instances
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubscriptionResponse, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubscriptionResponse):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubscriptionResponse):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/subsequent_action.py b/ricxappframe/subsclient/models/subsequent_action.py
new file mode 100644
index 0000000..9f701f9
--- /dev/null
+++ b/ricxappframe/subsclient/models/subsequent_action.py
@@ -0,0 +1,165 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class SubsequentAction(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'subsequent_action_type': 'str',
+ 'time_to_wait': 'str'
+ }
+
+ attribute_map = {
+ 'subsequent_action_type': 'SubsequentActionType',
+ 'time_to_wait': 'TimeToWait'
+ }
+
+ def __init__(self, subsequent_action_type=None, time_to_wait=None, _configuration=None): # noqa: E501
+ """SubsequentAction - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._subsequent_action_type = None
+ self._time_to_wait = None
+ self.discriminator = None
+
+ self.subsequent_action_type = subsequent_action_type
+ self.time_to_wait = time_to_wait
+
+ @property
+ def subsequent_action_type(self):
+ """Gets the subsequent_action_type of this SubsequentAction. # noqa: E501
+
+
+ :return: The subsequent_action_type of this SubsequentAction. # noqa: E501
+ :rtype: str
+ """
+ return self._subsequent_action_type
+
+ @subsequent_action_type.setter
+ def subsequent_action_type(self, subsequent_action_type):
+ """Sets the subsequent_action_type of this SubsequentAction.
+
+
+ :param subsequent_action_type: The subsequent_action_type of this SubsequentAction. # noqa: E501
+ :type: str
+ """
+ if self._configuration.client_side_validation and subsequent_action_type is None:
+ raise ValueError("Invalid value for `subsequent_action_type`, must not be `None`") # noqa: E501
+ allowed_values = ["continue", "wait"] # noqa: E501
+ if (self._configuration.client_side_validation and
+ subsequent_action_type not in allowed_values):
+ raise ValueError(
+ "Invalid value for `subsequent_action_type` ({0}), must be one of {1}" # noqa: E501
+ .format(subsequent_action_type, allowed_values)
+ )
+
+ self._subsequent_action_type = subsequent_action_type
+
+ @property
+ def time_to_wait(self):
+ """Gets the time_to_wait of this SubsequentAction. # noqa: E501
+
+
+ :return: The time_to_wait of this SubsequentAction. # noqa: E501
+ :rtype: str
+ """
+ return self._time_to_wait
+
+ @time_to_wait.setter
+ def time_to_wait(self, time_to_wait):
+ """Sets the time_to_wait of this SubsequentAction.
+
+
+ :param time_to_wait: The time_to_wait of this SubsequentAction. # noqa: E501
+ :type: str
+ """
+ if self._configuration.client_side_validation and time_to_wait is None:
+ raise ValueError("Invalid value for `time_to_wait`, must not be `None`") # noqa: E501
+ allowed_values = ["zero", "w1ms", "w2ms", "w5ms", "w10ms", "w20ms", "w30ms", "w40ms", "w50ms", "w100ms", "w200ms", "w500ms", "w1s", "w2s", "w5s", "w10s", "w20s", "w60s"] # noqa: E501
+ if (self._configuration.client_side_validation and
+ time_to_wait not in allowed_values):
+ raise ValueError(
+ "Invalid value for `time_to_wait` ({0}), must be one of {1}" # noqa: E501
+ .format(time_to_wait, allowed_values)
+ )
+
+ self._time_to_wait = time_to_wait
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(SubsequentAction, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, SubsequentAction):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, SubsequentAction):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/x_app_config.py b/ricxappframe/subsclient/models/x_app_config.py
new file mode 100644
index 0000000..77a1b94
--- /dev/null
+++ b/ricxappframe/subsclient/models/x_app_config.py
@@ -0,0 +1,153 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class XAppConfig(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ 'metadata': 'ConfigMetadata',
+ 'config': 'object'
+ }
+
+ attribute_map = {
+ 'metadata': 'metadata',
+ 'config': 'config'
+ }
+
+ def __init__(self, metadata=None, config=None, _configuration=None): # noqa: E501
+ """XAppConfig - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+
+ self._metadata = None
+ self._config = None
+ self.discriminator = None
+
+ self.metadata = metadata
+ self.config = config
+
+ @property
+ def metadata(self):
+ """Gets the metadata of this XAppConfig. # noqa: E501
+
+
+ :return: The metadata of this XAppConfig. # noqa: E501
+ :rtype: ConfigMetadata
+ """
+ return self._metadata
+
+ @metadata.setter
+ def metadata(self, metadata):
+ """Sets the metadata of this XAppConfig.
+
+
+ :param metadata: The metadata of this XAppConfig. # noqa: E501
+ :type: ConfigMetadata
+ """
+ if self._configuration.client_side_validation and metadata is None:
+ raise ValueError("Invalid value for `metadata`, must not be `None`") # noqa: E501
+
+ self._metadata = metadata
+
+ @property
+ def config(self):
+ """Gets the config of this XAppConfig. # noqa: E501
+
+ Configuration in JSON format # noqa: E501
+
+ :return: The config of this XAppConfig. # noqa: E501
+ :rtype: object
+ """
+ return self._config
+
+ @config.setter
+ def config(self, config):
+ """Sets the config of this XAppConfig.
+
+ Configuration in JSON format # noqa: E501
+
+ :param config: The config of this XAppConfig. # noqa: E501
+ :type: object
+ """
+ if self._configuration.client_side_validation and config is None:
+ raise ValueError("Invalid value for `config`, must not be `None`") # noqa: E501
+
+ self._config = config
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(XAppConfig, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, XAppConfig):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, XAppConfig):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/models/xapp_config_list.py b/ricxappframe/subsclient/models/xapp_config_list.py
new file mode 100644
index 0000000..853a11a
--- /dev/null
+++ b/ricxappframe/subsclient/models/xapp_config_list.py
@@ -0,0 +1,95 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+import pprint
+import re # noqa: F401
+
+import six
+
+from ricxappframe.subsclient.configuration import Configuration
+
+
+class XappConfigList(object):
+ """NOTE: This class is auto generated by the swagger code generator program.
+
+ Do not edit the class manually.
+ """
+
+ """
+ Attributes:
+ swagger_types (dict): The key is attribute name
+ and the value is attribute type.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ """
+ swagger_types = {
+ }
+
+ attribute_map = {
+ }
+
+ def __init__(self, _configuration=None): # noqa: E501
+ """XappConfigList - a model defined in Swagger""" # noqa: E501
+ if _configuration is None:
+ _configuration = Configuration()
+ self._configuration = _configuration
+ self.discriminator = None
+
+ def to_dict(self):
+ """Returns the model properties as a dict"""
+ result = {}
+
+ for attr, _ in six.iteritems(self.swagger_types):
+ value = getattr(self, attr)
+ if isinstance(value, list):
+ result[attr] = list(map(
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
+ value
+ ))
+ elif hasattr(value, "to_dict"):
+ result[attr] = value.to_dict()
+ elif isinstance(value, dict):
+ result[attr] = dict(map(
+ lambda item: (item[0], item[1].to_dict())
+ if hasattr(item[1], "to_dict") else item,
+ value.items()
+ ))
+ else:
+ result[attr] = value
+ if issubclass(XappConfigList, dict):
+ for key, value in self.items():
+ result[key] = value
+
+ return result
+
+ def to_str(self):
+ """Returns the string representation of the model"""
+ return pprint.pformat(self.to_dict())
+
+ def __repr__(self):
+ """For `print` and `pprint`"""
+ return self.to_str()
+
+ def __eq__(self, other):
+ """Returns true if both objects are equal"""
+ if not isinstance(other, XappConfigList):
+ return False
+
+ return self.to_dict() == other.to_dict()
+
+ def __ne__(self, other):
+ """Returns true if both objects are not equal"""
+ if not isinstance(other, XappConfigList):
+ return True
+
+ return self.to_dict() != other.to_dict()
diff --git a/ricxappframe/subsclient/rest.py b/ricxappframe/subsclient/rest.py
new file mode 100644
index 0000000..12ef032
--- /dev/null
+++ b/ricxappframe/subsclient/rest.py
@@ -0,0 +1,323 @@
+# coding: utf-8
+
+"""
+ RIC subscription
+
+ This is the initial REST API for RIC subscription # noqa: E501
+
+ OpenAPI spec version: 0.0.4
+
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
+"""
+
+
+from __future__ import absolute_import
+
+import io
+import json
+import logging
+import re
+import ssl
+
+import certifi
+# python 2 and python 3 compatibility library
+import six
+from six.moves.urllib.parse import urlencode
+
+try:
+ import urllib3
+except ImportError:
+ raise ImportError('Swagger python client requires urllib3.')
+
+
+logger = logging.getLogger(__name__)
+
+
+class RESTResponse(io.IOBase):
+
+ def __init__(self, resp):
+ self.urllib3_response = resp
+ self.status = resp.status
+ self.reason = resp.reason
+ self.data = resp.data
+
+ def getheaders(self):
+ """Returns a dictionary of the response headers."""
+ return self.urllib3_response.getheaders()
+
+ def getheader(self, name, default=None):
+ """Returns a given response header."""
+ return self.urllib3_response.getheader(name, default)
+
+
+class RESTClientObject(object):
+
+ def __init__(self, configuration, pools_size=4, maxsize=None):
+ # urllib3.PoolManager will pass all kw parameters to connectionpool
+ # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501
+ # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501
+ # maxsize is the number of requests to host that are allowed in parallel # noqa: E501
+ # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501
+
+ # cert_reqs
+ if configuration.verify_ssl:
+ cert_reqs = ssl.CERT_REQUIRED
+ else:
+ cert_reqs = ssl.CERT_NONE
+
+ # ca_certs
+ if configuration.ssl_ca_cert:
+ ca_certs = configuration.ssl_ca_cert
+ else:
+ # if not set certificate file, use Mozilla's root certificates.
+ ca_certs = certifi.where()
+
+ addition_pool_args = {}
+ if configuration.assert_hostname is not None:
+ addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501
+
+ if maxsize is None:
+ if configuration.connection_pool_maxsize is not None:
+ maxsize = configuration.connection_pool_maxsize
+ else:
+ maxsize = 4
+
+ # https pool manager
+ if configuration.proxy:
+ self.pool_manager = urllib3.ProxyManager(
+ num_pools=pools_size,
+ maxsize=maxsize,
+ cert_reqs=cert_reqs,
+ ca_certs=ca_certs,
+ cert_file=configuration.cert_file,
+ key_file=configuration.key_file,
+ proxy_url=configuration.proxy,
+ **addition_pool_args
+ )
+ else:
+ self.pool_manager = urllib3.PoolManager(
+ num_pools=pools_size,
+ maxsize=maxsize,
+ cert_reqs=cert_reqs,
+ ca_certs=ca_certs,
+ cert_file=configuration.cert_file,
+ key_file=configuration.key_file,
+ **addition_pool_args
+ )
+
+ def request(self, method, url, query_params=None, headers=None,
+ body=None, post_params=None, _preload_content=True,
+ _request_timeout=None):
+ """Perform requests.
+
+ :param method: http request method
+ :param url: http request url
+ :param query_params: query parameters in the url
+ :param headers: http request headers
+ :param body: request json body, for `application/json`
+ :param post_params: request post parameters,
+ `application/x-www-form-urlencoded`
+ and `multipart/form-data`
+ :param _preload_content: if False, the urllib3.HTTPResponse object will
+ be returned without reading/decoding response
+ data. Default is True.
+ :param _request_timeout: timeout setting for this request. If one
+ number provided, it will be total request
+ timeout. It can also be a pair (tuple) of
+ (connection, read) timeouts.
+ """
+ method = method.upper()
+ assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',
+ 'PATCH', 'OPTIONS']
+
+ if post_params and body:
+ raise ValueError(
+ "body parameter cannot be used with post_params parameter."
+ )
+
+ post_params = post_params or {}
+ headers = headers or {}
+
+ timeout = None
+ if _request_timeout:
+ if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)): # noqa: E501,F821
+ timeout = urllib3.Timeout(total=_request_timeout)
+ elif (isinstance(_request_timeout, tuple) and
+ len(_request_timeout) == 2):
+ timeout = urllib3.Timeout(
+ connect=_request_timeout[0], read=_request_timeout[1])
+
+ if 'Content-Type' not in headers:
+ headers['Content-Type'] = 'application/json'
+
+ try:
+ # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
+ if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
+ if query_params:
+ url += '?' + urlencode(query_params)
+ if re.search('json', headers['Content-Type'], re.IGNORECASE):
+ request_body = '{}'
+ if body is not None:
+ request_body = json.dumps(body)
+ r = self.pool_manager.request(
+ method, url,
+ body=request_body,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
+ r = self.pool_manager.request(
+ method, url,
+ fields=post_params,
+ encode_multipart=False,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ elif headers['Content-Type'] == 'multipart/form-data':
+ # must del headers['Content-Type'], or the correct
+ # Content-Type which generated by urllib3 will be
+ # overwritten.
+ del headers['Content-Type']
+ r = self.pool_manager.request(
+ method, url,
+ fields=post_params,
+ encode_multipart=True,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ # Pass a `string` parameter directly in the body to support
+ # other content types than Json when `body` argument is
+ # provided in serialized form
+ elif isinstance(body, str):
+ request_body = body
+ r = self.pool_manager.request(
+ method, url,
+ body=request_body,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ else:
+ # Cannot generate the request from given parameters
+ msg = """Cannot prepare a request message for provided
+ arguments. Please check that your arguments match
+ declared content type."""
+ raise ApiException(status=0, reason=msg)
+ # For `GET`, `HEAD`
+ else:
+ r = self.pool_manager.request(method, url,
+ fields=query_params,
+ preload_content=_preload_content,
+ timeout=timeout,
+ headers=headers)
+ except urllib3.exceptions.SSLError as e:
+ msg = "{0}\n{1}".format(type(e).__name__, str(e))
+ raise ApiException(status=0, reason=msg)
+
+ if _preload_content:
+ r = RESTResponse(r)
+
+ # In the python 3, the response.data is bytes.
+ # we need to decode it to string.
+ if six.PY3:
+ r.data = r.data.decode('utf8')
+
+ # log response body
+ logger.debug("response body: %s", r.data)
+
+ if not 200 <= r.status <= 299:
+ raise ApiException(http_resp=r)
+
+ return r
+
+ def GET(self, url, headers=None, query_params=None, _preload_content=True,
+ _request_timeout=None):
+ return self.request("GET", url,
+ headers=headers,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ query_params=query_params)
+
+ def HEAD(self, url, headers=None, query_params=None, _preload_content=True,
+ _request_timeout=None):
+ return self.request("HEAD", url,
+ headers=headers,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ query_params=query_params)
+
+ def OPTIONS(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("OPTIONS", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def DELETE(self, url, headers=None, query_params=None, body=None,
+ _preload_content=True, _request_timeout=None):
+ return self.request("DELETE", url,
+ headers=headers,
+ query_params=query_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def POST(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("POST", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def PUT(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("PUT", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+ def PATCH(self, url, headers=None, query_params=None, post_params=None,
+ body=None, _preload_content=True, _request_timeout=None):
+ return self.request("PATCH", url,
+ headers=headers,
+ query_params=query_params,
+ post_params=post_params,
+ _preload_content=_preload_content,
+ _request_timeout=_request_timeout,
+ body=body)
+
+
+class ApiException(Exception):
+
+ def __init__(self, status=None, reason=None, http_resp=None):
+ if http_resp:
+ self.status = http_resp.status
+ self.reason = http_resp.reason
+ self.body = http_resp.data
+ self.headers = http_resp.getheaders()
+ else:
+ self.status = status
+ self.reason = reason
+ self.body = None
+ self.headers = None
+
+ def __str__(self):
+ """Custom error messages for exception"""
+ error_message = "({0})\n"\
+ "Reason: {1}\n".format(self.status, self.reason)
+ if self.headers:
+ error_message += "HTTP response headers: {0}\n".format(
+ self.headers)
+
+ if self.body:
+ error_message += "HTTP response body: {0}\n".format(self.body)
+
+ return error_message
diff --git a/ricxappframe/xapp_frame.py b/ricxappframe/xapp_frame.py
index feb5d66..e939b0e 100644
--- a/ricxappframe/xapp_frame.py
+++ b/ricxappframe/xapp_frame.py
@@ -31,8 +31,12 @@
from ricxappframe import xapp_rmr
from ricxappframe.constants import sdl_namespaces
+
+import ricxappframe.entities.rnib.nodeb_info_pb2 as pb_nbi
+import ricxappframe.entities.rnib.cell_pb2 as pb_cell
from ricxappframe.entities.rnib.nb_identity_pb2 import NbIdentity
from ricxappframe.entities.rnib.nodeb_info_pb2 import Node
+
from ricxappframe.rmr import rmr
from ricxappframe.util.constants import Constants
from ricxappframe.xapp_sdl import SDLWrapper
@@ -79,6 +83,7 @@
"""
# PUBLIC, can be used by xapps using self.(name):
self.logger = Logger(name=__name__)
+ self._appthread = None
# Start rmr rcv thread
self._rmr_loop = xapp_rmr.RmrLoop(port=rmr_port, wait_for_ready=rmr_wait_for_ready)
@@ -111,7 +116,7 @@
self.logger.error("__init__: Cannot Read config file for xapp Registration")
self._config_data = {}
- Thread(target=self.registerXapp).start()
+ self._appthread = Thread(target=self.registerXapp).start()
# run the optionally provided user post init
if post_init:
@@ -481,7 +486,7 @@
def _get_rnib_info(self, node_type):
"""
- Since the difference between get_list_gnb_ids and get_list_enb_ids is only note-type,
+ Since the difference between get_list_gnb_ids and get_list_enb_ids is only node-type,
this function extracted from the duplicated logic.
Parameters
@@ -490,7 +495,7 @@
Type of node. This is EnumDescriptor.
Available node types
- UNKNOWN
- - ENG
+ - ENB
- GNB
Returns
@@ -498,7 +503,7 @@
List: (NbIdentity)
Raises
- -------
+ ------
SdlTypeError: If function's argument is of an inappropriate type.
NotConnected: If SDL is not connected to the backend data storage.
RejectedByBackend: If backend data storage rejects the request.
@@ -524,13 +529,13 @@
List: (NbIdentity)
Raises
- -------
+ ------
SdlTypeError: If function's argument is of an inappropriate type.
NotConnected: If SDL is not connected to the backend data storage.
RejectedByBackend: If backend data storage rejects the request.
BackendError: If the backend data storage fails to process the request.
"""
- return self._get_rnib_info(Node.Type.Name(Node.Type.GNB))
+ return self._get_rnib_info(Node.Type.Name(Node.GNB))
def get_list_enb_ids(self):
"""
@@ -550,9 +555,218 @@
RejectedByBackend: If backend data storage rejects the request.
BackendError: If the backend data storage fails to process the request.
"""
- return self._get_rnib_info(Node.Type.Name(Node.Type.ENB))
+ return self._get_rnib_info(Node.Type.Name(Node.ENB))
- # Health
+ """
+ Following RNIB methods are made to be inline of the go-lang based RNIB methods.
+ Method names are same as in repository:
+ gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/rnib
+ """
+ def GetNodeb(self, inventoryName):
+ """
+ Returns nodeb info
+ In RNIB SDL key is defined following way: RAN:<inventoryName>
+
+ Parameters
+ ----------
+ inventoryName: string
+
+ Returns
+ -------
+ NodebInfo()
+
+ Raises
+ ------
+ SdlTypeError: If function's argument is of an inappropriate type.
+ NotConnected: If SDL is not connected to the backend data storage.
+ RejectedByBackend: If backend data storage rejects the request.
+ BackendError: If the backend data storage fails to process the request.
+ """
+ nbid_string: Set[bytes] = self.sdl_get(sdl_namespaces.E2_MANAGER, 'RAN:' + inventoryName, usemsgpack=False)
+ if nbid_string is not None:
+ nbinfo = pb_nbi.NodebInfo()
+ nbinfo.ParseFromString(nbid_string)
+ return nbinfo
+ return None
+
+ def GetNodebByGlobalNbId(self, nodeType, plmnId, nbId):
+ """
+ Returns nodeb identity based on type, plmn id and node id
+ In RNIB SDL key is defined following way: <nodeType>:<plmnId>:<nbId>
+
+ Parameters
+ ----------
+ nodeType: string
+ plmnId: string
+ nbId: string
+
+ Returns
+ -------
+ NbIdentity()
+
+ Raises
+ ------
+ SdlTypeError: If function's argument is of an inappropriate type.
+ NotConnected: If SDL is not connected to the backend data storage.
+ RejectedByBackend: If backend data storage rejects the request.
+ BackendError: If the backend data storage fails to process the request.
+ """
+ nbid_string: Set[bytes] = self.sdl_get(sdl_namespaces.E2_MANAGER, nodeType + ':' + plmnId + ':' + nbId, usemsgpack=False)
+ if nbid_string is not None:
+ nbid = NbIdentity()
+ nbid.ParseFromString(nbid_string)
+ return nbid
+ return None
+
+ def GetCellList(self, inventoryName):
+ """
+ Returns nodeb served cell list from the saved node data
+ In RNIB SDL key is defined following way: RAN:<inventoryName>
+
+ Parameters
+ ----------
+ nodeType: string
+ plmnId: string
+ nbId: string
+
+ Returns
+ -------
+ ServedCellInfo() in case of ENB
+ ServedNRCell() in case of GNB
+
+ Raises
+ ------
+ SdlTypeError: If function's argument is of an inappropriate type.
+ NotConnected: If SDL is not connected to the backend data storage.
+ RejectedByBackend: If backend data storage rejects the request.
+ BackendError: If the backend data storage fails to process the request.
+ """
+ nodeb = self.GetNodeb(inventoryName)
+ if nodeb is not None:
+ if nodeb.HasField('enb'):
+ return nodeb.enb.served_cells
+ elif nodeb.HasField('gnb'):
+ return nodeb.gnb.served_nr_cells
+ return None
+
+ def GetCellById(self, cell_type, cell_id):
+ """
+ Returns cell info by cell type and id.
+ In RNIB SDL keys are defined based on the cell type:
+ ENB type CELL:<cell_id>
+ GNB type NRCELL:<cell_id>
+
+ Parameters
+ ----------
+ cell_type: string
+ Available cell types
+ - ENB
+ - GNB
+
+ Returns
+ -------
+ Cell()
+
+ Raises
+ ------
+ SdlTypeError: If function's argument is of an inappropriate type.
+ NotConnected: If SDL is not connected to the backend data storage.
+ RejectedByBackend: If backend data storage rejects the request.
+ BackendError: If the backend data storage fails to process the request.
+ """
+ cellstr = None
+ if cell_type == pb_cell.Cell.Type.Name(pb_cell.Cell.LTE_CELL):
+ cellstr = 'CELL'
+ elif cell_type == pb_cell.Cell.Type.Name(pb_cell.Cell.NR_CELL):
+ cellstr = 'NRCELL'
+ if cellstr is not None:
+ cell_string: Set[bytes] = self.sdl_get(sdl_namespaces.E2_MANAGER, cellstr + ':' + cell_id, usemsgpack=False)
+ if cell_string is not None:
+ cell = pb_cell.Cell()
+ cell.ParseFromString(cell_string)
+ return cell
+ return None
+
+ def GetListNodebIds(self):
+ """
+ Returns both enb and gnb NbIdentity list
+
+ Returns
+ -------
+ List: (NbIdentity)
+
+ Raises
+ ------
+ SdlTypeError: If function's argument is of an inappropriate type.
+ NotConnected: If SDL is not connected to the backend data storage.
+ RejectedByBackend: If backend data storage rejects the request.
+ BackendError: If the backend data storage fails to process the request.
+ """
+ nlist1 = self._get_rnib_info(Node.Type.Name(Node.ENB))
+ nlist2 = self._get_rnib_info(Node.Type.Name(Node.GNB))
+
+ for n in nlist2:
+ nlist1.append(n)
+ return nlist1
+
+ def GetCell(self, inventoryName, pci):
+ """
+ Returns cell info using pci
+ In RNIB SDL key is defined following way: PCI:<inventoryName>:<pci hex val>
+
+ Parameters
+ ----------
+ inventoryName: string
+ pci: int
+
+ Returns
+ -------
+ Cell()
+
+ Raises
+ ------
+ SdlTypeError: If function's argument is of an inappropriate type.
+ NotConnected: If SDL is not connected to the backend data storage.
+ RejectedByBackend: If backend data storage rejects the request.
+ BackendError: If the backend data storage fails to process the request.
+ """
+ cell_string: Set[bytes] = self.sdl_get(sdl_namespaces.E2_MANAGER, 'PCI:{0:s}:{1:02x}'.format(inventoryName, pci), usemsgpack=False)
+ if cell_string is not None:
+ cell = pb_cell.Cell()
+ cell.ParseFromString(cell_string)
+ return cell
+ return None
+
+ def GetRanFunctionDefinition(self, inventoryName, ran_function_oid):
+ """
+ Returns GNB ran function definition list based on the ran_function_oid
+ In RNIB SDL key is defined following way: RAN:<inventoryName>
+
+ Parameters
+ ----------
+ inventoryName: string
+ ran_function_oid: int
+
+ Returns
+ -------
+ array of ran_function_definition matching to ran_function_oid
+
+ Raises
+ ------
+ SdlTypeError: If function's argument is of an inappropriate type.
+ NotConnected: If SDL is not connected to the backend data storage.
+ RejectedByBackend: If backend data storage rejects the request.
+ BackendError: If the backend data storage fails to process the request.
+ """
+ nodeb = self.GetNodeb(inventoryName)
+ if nodeb is not None:
+ if nodeb.HasField('gnb') and nodeb.gnb.ran_functions is not None:
+ ranFDList = []
+ for rf in nodeb.gnb.ran_functions:
+ if rf.ran_function_oid == ran_function_oid:
+ ranFDList.append(rf.ran_function_definition)
+ return ranFDList
+ return None
def healthcheck(self):
"""
@@ -595,6 +809,8 @@
TODO: can we register a ctrl-c handler so this gets called on
ctrl-c? Because currently two ctrl-c are needed to stop.
"""
+ if self._appthread is not None:
+ self._appthread.join()
self.xapp_shutdown()
diff --git a/ricxappframe/xapp_rest.py b/ricxappframe/xapp_rest.py
new file mode 100644
index 0000000..1f4a4e8
--- /dev/null
+++ b/ricxappframe/xapp_rest.py
@@ -0,0 +1,193 @@
+#!/usr/bin/env python3
+# ==================================================================================
+# Copyright (c) 2022 Nokia
+#
+# 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 socket
+import http.server
+import threading
+
+
+def initResponse(status=200, response="OK"):
+
+ """
+ initResponse
+ init the reponse data for handler to get all details defined
+
+ Parameters
+ ----------
+ status: int
+ http status code
+ response: string
+ http response text
+ Returns
+ -------
+ response - http response text
+ status - http status code
+ payload - payload data for the client (response data text or attachment file data)
+ attachment - file name of the attached payload data
+ mode text (utf-8) or binary data
+ """
+ return {'response': response, 'status': status, 'payload': None, 'ctype': 'application/json', 'attachment': None, 'mode': 'plain'}
+
+
+class RestHandler(http.server.BaseHTTPRequestHandler):
+
+ def _findUrihandler(self, uri, keys):
+ for key in keys:
+ value = keys[key]
+ if uri.find(value['uri']) >= 0:
+ return key, value
+ return None, None
+
+ def _sendResponse(self, response):
+ # sends the reponse according to the initResponse() response data
+ self.send_response(response['status'])
+ self.send_header("Server-name", "XAPP REST SERVER 0.9")
+ self.send_header('Content-type', response['ctype'])
+
+ if response['payload'] is not None:
+ # payload has been set
+ length = len(response['payload'])
+ if length != 0:
+ self.send_header('Content-length', length)
+ if response['attachment'] is not None:
+ self.send_header('Content-Disposition', "attachment; filename=" + response['attachment'])
+ self.end_headers()
+ if response['payload'] is not None:
+ if response['mode'] == 'plain':
+ # ascii mode
+ self.wfile.write(response['payload'].encode('utf-8'))
+ elif response['mode'] == 'binary':
+ # binary mode
+ self.wfile.write(response['payload'])
+
+ def add_handler(self, method=None, name=None, uri=None, callback=None):
+ """
+ Adds the function handler for given uri. The function callback is matched in first matching
+ uri. So prepare your handlers setup in such a way that those won't override each other. For example you can setup
+ usual xapp handler in this list:
+
+ server = ricrest.ThreadedHTTPServer(address, port)
+ server.handler.add_handler(self.server.handler, "GET", "config", "/ric/v1/config", self.configGetHandler)
+ server.handler.add_handler(self.server.handler, "GET", "healthAlive", "/ric/v1/health/alive", self.healthyGetAliveHandler)
+ server.handler.add_handler(self.server.handler, "GET", "healthReady", "/ric/v1/health/ready", self.healthyGetReadyHandler)
+ server.handler.add_handler(self.server.handler, "GET", "symptomdata", "/ric/v1/symptomdata", self.symptomdataGetHandler)
+
+ Parameters
+ ----------
+ method string
+ http method GET, POST, DELETE
+ name string
+ unique name - used for map name
+ uri string
+ http uri part which triggers the callback function
+ cb function
+ function to be used for http method processing
+ """
+ if not hasattr(self, 'handlers'):
+ # init method can't be used becuase it has been inherited from base object
+ # so check the handlers existence and create if not defined
+ self.lock = threading.Lock()
+ self.handlers = dict()
+ self.handlers["get"] = dict()
+ self.handlers["post"] = dict()
+ self.handlers["delete"] = dict()
+ self.lock.acquire()
+ if method == "GET":
+ self.handlers["get"][name] = dict()
+ self.handlers["get"][name]['uri'] = uri
+ self.handlers["get"][name]['cb'] = callback
+ elif method == "POST":
+ self.handlers["post"][name] = dict()
+ self.handlers["post"][name]['uri'] = uri
+ self.handlers["post"][name]['cb'] = callback
+ elif method == "DELETE":
+ self.handlers["delete"][name] = dict()
+ self.handlers["delete"][name]['uri'] = uri
+ self.handlers["delete"][name]['cb'] = callback
+ self.lock.release()
+
+ def do_GET(self):
+ try:
+ response = initResponse(status=404, response='Not Found')
+ cbname, hndl = self._findUrihandler(self.path, self.handlers['get'])
+ if hndl is not None:
+ # call the defined callback handler
+ response = hndl['cb'](cbname, self.path, None, self.headers['Content-Type'])
+ self._sendResponse(response)
+
+ except (socket.error, IOError):
+ pass
+
+ def do_DELETE(self):
+ try:
+ response = initResponse(status=404, response='Not Found')
+ cbname, hndl = self._findUrihandler(self.path, self.handlers['delete'])
+ if hndl is not None:
+ # call the defined callback handler
+ response = hndl['cb'](cbname, self.path, None, self.headers['Content-Type'])
+ self._sendResponse(response)
+ except (socket.error, IOError):
+ pass
+
+ def do_POST(self):
+ try:
+ response = initResponse(status=404, response='Not Found')
+ cbname, hndl = self._findUrihandler(self.path, self.handlers['post'])
+ if hndl is not None:
+ data = self.rfile.read(int(self.headers['Content-Length']))
+ # call the defined callback handler
+ response = hndl['cb'](cbname, self.path, data, self.headers['Content-Type'])
+ print(response)
+ self._sendResponse(response)
+ except (socket.error, IOError):
+ pass
+
+
+class ThreadedHTTPServer(object):
+
+ handler = RestHandler
+ server_class = http.server.HTTPServer
+
+ def __init__(self, host, port):
+ """
+ init
+
+ Parameters
+ ----------
+ host string
+ http listen interface ip ("0.0.0.0" binds all interfaces)
+ port int
+ listen service port
+ """
+ self.server = self.server_class((host, port), self.handler)
+ self.server_thread = threading.Thread(target=self.server.serve_forever)
+ self.server_thread.daemon = True
+
+ def start(self):
+ """
+ start
+ starts the thread serving http requests
+ """
+ self.server_thread.start()
+
+ def stop(self):
+ """
+ stop
+ stops thread serving http requests
+ """
+ self.server.socket.close()
+ self.server.server_close()
+ self.server.shutdown()
diff --git a/ricxappframe/xapp_subscribe.py b/ricxappframe/xapp_subscribe.py
new file mode 100644
index 0000000..0bd5b24
--- /dev/null
+++ b/ricxappframe/xapp_subscribe.py
@@ -0,0 +1,171 @@
+# Copyright (c) 2022 Nokia
+#
+# 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.
+#
+# Subscription interface implements the subscription manager REST based interface defined in
+# https://docs.o-ran-sc.org/projects/o-ran-sc-ric-plt-submgr/en/latest/user-guide.html
+#
+
+import ricxappframe.subsclient as subsclient
+import ricxappframe.xapp_rest as ricrest
+from mdclogpy import Logger
+
+logging = Logger(name=__name__)
+
+
+class NewSubscriber():
+
+ def __init__(self, uri, timeout=None, local_address="0.0.0.0", local_port=8088, rmr_port=4061):
+ """
+ init
+
+ Parameters
+ ----------
+ uri: string
+ xapp submgr service uri
+ timeout: int
+ rest method timeout
+ local_address: string
+ local interface IP address for rest service binding (for response handler)
+ local_port: int
+ local service port nunber for rest service binding (for response handler)
+ rmr_port: int
+ rmr port number
+ """
+ self.uri = uri
+ self.timeout = timeout
+ self.local_address = local_address
+ self.local_port = local_port
+ self.rmr_port = rmr_port
+ self.url = "/ric/v1/subscriptions/response"
+ self.serverHandler = None
+ self.responseCB = None
+ # Configure API
+ configuration = subsclient.Configuration()
+ configuration.verify_ssl = False
+ configuration.host = "http://127.0.0.1:8088/"
+ self.api = subsclient.ApiClient(configuration)
+
+ def _responsePostHandler(self, name, path, data, ctype):
+ """
+ _resppnsePostHandler
+ internally used subscription reponse handler it the callback function is not set
+ """
+ return "{}", 'application/json', "OK", 200
+
+ # following methods are wrappers to hide the swagger client
+ def SubscriptionParamsClientEndpoint(self, host=None, http_port=None, rmr_port=None):
+ return subsclient.SubscriptionParamsClientEndpoint(host, http_port, rmr_port)
+
+ def SubscriptionParamsE2SubscriptionDirectives(self, e2_timeout_timer_value=None, e2_retry_count=None, rmr_routing_needed=None):
+ return subsclient.SubscriptionParamsE2SubscriptionDirectives(e2_timeout_timer_value, e2_retry_count, rmr_routing_needed)
+
+ def SubsequentAction(self, subsequent_action_type=None, time_to_wait=None):
+ return subsclient.SubsequentAction(subsequent_action_type, time_to_wait)
+
+ def ActionToBeSetup(self, action_id=None, action_type=None, action_definition=None, subsequent_action=None):
+ return subsclient.ActionToBeSetup(action_id, action_type, action_definition, subsequent_action)
+
+ def SubscriptionDetail(self, xapp_event_instance_id=None, event_triggers=None, action_to_be_setup_list=None):
+ return subsclient.SubscriptionDetail(xapp_event_instance_id, event_triggers, action_to_be_setup_list)
+
+ def SubscriptionParams(self, subscription_id=None, client_endpoint=None, meid=None, ran_function_id=None, e2_subscription_directives=None, subscription_details=None):
+ return subsclient.SubscriptionParams(subscription_id, client_endpoint, meid, ran_function_id, e2_subscription_directives, subscription_details)
+
+ def Subscribe(self, subs_params=None):
+ """
+ Subscribe
+ subscription request
+
+ Parameters
+ ----------
+ subs_params: SubscriptionParams
+ structured subscription data definition defined in subsclient
+ Returns
+ -------
+ SubscriptionResponse
+ json string of SubscriptionResponse object
+ """
+# if subs_params is not None and type(subs_params) is subsclient.models.subscription_params.SubscriptionParams:
+ if subs_params is not None:
+ response = self.api.request(method="POST", url=self.uri, headers=None, body=subs_params.to_dict())
+ return response.data, response.reason, response.status
+ return None, "Input parameter is not SubscriptionParams{}", 500
+
+ def UnSubscribe(self, subs_id=None):
+ """
+ UnSubscribe
+ subscription remove
+
+ Parameters
+ ----------
+ subs_id: int
+ subscription id returned in SubscriptionResponse
+ Returns
+ -------
+ response.reason: string
+ http reason
+ response.status: int
+ http status code
+ """
+ response = self.api.request(method="DELETE", url=self.uri + "/subscriptions/" + subs_id, headers=None)
+ return response.data, response.reason, response.status
+
+ def QuerySubscriptions(self):
+ """
+ QuerySubscriptions
+ Query all subscriptions
+
+ Returns
+ -------
+ response.data: json string
+ SubscriptionList
+ response.reason: string
+ http reason
+ response.status: int
+ http status code
+ """
+ response = self.api.request(method="GET", url=self.uri + "/subscriptions", headers=None)
+ return response.data, response.reason, response.status
+
+ def ResponseHandler(self, responseCB=None, server=None):
+ """
+ ResponseHandler
+ Starts the response handler and set the callback
+
+ Parameters
+ ----------
+ responseCB
+ Set the callback handler, if not set the the default self._responsePostHandler is used
+ server: xapp_rest.ThreadedHTTPServer
+ if set then the existing xapp_rest.ThreadedHTTPServer handler is used, otherwise a new will be created
+
+ Returns
+ -------
+ status: boolean
+ True = success, False = failed
+ """
+ # create the thread HTTP server
+ self.serverHandler = server
+ if self.serverHandler is None:
+ # make the serverhandler
+ self.serverHandler = ricrest.ThreadedHTTPServer(self.local_address, self.local_port)
+ self.serverHandler.start()
+ if self.serverHandler is not None:
+ if responseCB is not None:
+ self.responseCB = responseCB
+ # get http handler with object reference
+ self.serverHandler.handler.add_handler(self.serverHandler.handler, "POST", "response", self.url, responseCB)
+ return True
+ else:
+ return False
diff --git a/ricxappframe/xapp_symptomdata.py b/ricxappframe/xapp_symptomdata.py
new file mode 100644
index 0000000..8d979bc
--- /dev/null
+++ b/ricxappframe/xapp_symptomdata.py
@@ -0,0 +1,228 @@
+# Copyright (c) 2022 Nokia
+#
+# 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.
+#
+# Symptomdata collection is triggered from the trblmgr ricplt pod. This subsystem provides for xapp interface to subscribe the
+# symptomdata collection via lwsd pod. When the symptomdata collection is triggered then the xapp gets the callback to collect
+# the symptomdata.
+#
+# If the dynamic registration is needed, then the xapp needs to use the Symptomdata.subscribe(...) method to indicate symptomdata
+# collection. In case the xapp is set to trblmgr config file then the registration is not needed.
+#
+# If the xapp has the internal data for symptomdata collection REST call response, it can use the helper methods getFileList and collect
+# to get the needed files or readymade zipped package for reponse.
+#
+import os
+import re
+import time
+import requests
+import json
+from requests.exceptions import HTTPError
+from zipfile import ZipFile
+from threading import Timer
+from datetime import datetime
+from mdclogpy import Logger
+
+logging = Logger(name=__name__)
+
+
+class RepeatTimer(Timer):
+ # timer class for housekeeping and file rotating
+ def run(self):
+ while not self.finished.wait(self.interval):
+ self.function(*self.args, **self.kwargs)
+
+
+class Symptomdata(object):
+ # service is the local POD service id, path the temporal storage, host should be the trblmgr service name
+ def __init__(self, service="", servicehost="", path="/tmp/", lwsduri=None, timeout=30):
+ """
+ init
+
+ Parameters
+ ----------
+ service: string
+ xapp service name
+ servicehost: string
+ xapp service host name
+ path:
+ temporal path where the symptomdata collection is stored
+ lwsduri:
+ lwsd uri for symptomdata dynamic registration
+ timeout:
+ timeout for subscription status polling
+ """
+ if not os.path.exists(path):
+ os.mkdir(path)
+ self.service = service
+ self.servicehost = servicehost
+ self.path = path
+ self.lwsduri = lwsduri
+ self.timeout = timeout
+ # runtime attrs
+ self.zipfilename = None
+ logging.info("Symptomdata init service:%s path:%s lwsduri:%s timeout:%d" % (self.service, self.path, self.lwsduri, self.timeout))
+ if self.lwsduri is not None:
+ # do the subscription, set to True so that first the query is triggered
+ self.lwsdok = True
+ self.subscribe(args=("",))
+ self.subscribetimer = RepeatTimer(self.timeout, self.subscribe, args=("",))
+ self.subscribetimer.start()
+
+ # make the symptomdata subscription query to lwsd - dynamic registration (needed if the static config in trblmgr does not have xapp service data)
+ def subscribe(self, args):
+ """
+ subscribe
+ internally used subscription function if the dynamic registration has been set
+ """
+ if self.lwsduri is not None:
+ try:
+ proxies = {"http": "", "https": ""} # disable proxy usage
+ headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
+ if self.lwsdok is False:
+ jsondata = json.dumps({'url': 'http://' + self.servicehost +
+ ':8080/ric/v1/symptomdata', 'service': self.service, 'instance': '1'})
+ response = requests.post(self.lwsduri,
+ data=jsondata,
+ headers=headers,
+ proxies=proxies)
+ logging.info("Symptomdata subscription success")
+ self.lwsdok = True
+ elif self.lwsdok is True:
+ self.lwsdok = False
+ response = requests.get(self.lwsduri, headers=headers, proxies=proxies)
+ for item in response.json():
+ if item.get('service') == self.service:
+ logging.info("Symptomdata subscription request success")
+ self.lwsdok = True
+ if self.lwsdok is False:
+ logging.error("Symptomdata subscription missing")
+ response.raise_for_status()
+ except HTTPError as http_err:
+ logging.error("Symptomdata subscription failed - http error : %s" % (http_err))
+ self.lwsdok = False
+ except Exception as err:
+ logging.error("Symptomdata subscription failed - error : %s" % (err))
+ self.lwsdok = False
+
+ def stop(self):
+ """
+ stop
+ stops the dynamic service registration/polling
+ """
+ if self.subscribetimer is not None:
+ self.subscribetimer.cancel()
+
+ def __del__(self):
+ if self.subscribetimer is not None:
+ self.subscribetimer.cancel()
+
+ def getFileList(self, regex, fromtime, totime):
+ """
+ getFileList
+ internal use only, get the matching files for collect method
+ """
+ fileList = []
+ path, wc = regex.rsplit('/', 1)
+ logging.info("Filtering path: %s using wildcard %s fromtime %d totime %d" % (path + '/', wc, fromtime, totime))
+ try:
+ for root, dirs, files in os.walk((path + '/')):
+ for filename in files:
+ if re.match(wc, filename):
+ file_path = os.path.join(root, filename)
+ filest = os.stat(file_path)
+ if fromtime > 0:
+ logging.info("Filtering file time %d fromtime %d totime %d" % (filest.st_ctime, fromtime, totime))
+ if fromtime <= filest.st_ctime:
+ logging.info("Adding file time %d fromtime %d" % (filest.st_ctime, fromtime))
+ if totime > 0:
+ if totime >= filest.st_ctime:
+ fileList.append(file_path)
+ else:
+ fileList.append(file_path)
+ elif totime > 0:
+ if totime >= filest.st_ctime:
+ logging.info("Filtering file time %d fromtime %d totime %d" % (filest.st_ctime, fromtime, totime))
+ fileList.append(file_path)
+ else:
+ fileList.append(file_path)
+
+ except OSError as e:
+ logging.error("System error %d" % (e.errno))
+ return fileList
+
+ def collect(self, zipfiletmpl, fileregexlist, fromtime, totime):
+ """
+ collect
+ collects the symptomdata based on the file regular expression match and stored the symptomdata. Optionaly
+ caller can use fromtime and totime to choose only files matching the access time
+
+ Parameters
+ ----------
+ zipfiletmpl: string
+ template for zip file name using the strftime format - ex: ``"symptomdata"+'-%Y-%m-%d-%H-%M-%S.zip'``
+ fileregexlist: string array
+ array for file matching - ex: ``('examples/*.csv',)``
+ fromtime: integer
+ time value seconds
+ totime: integer
+ time value seconds
+ Returns
+ -------
+ string
+ zipfile name
+ """
+ zipfilename = self.path + datetime.fromtimestamp(int(time.time())).strftime(zipfiletmpl)
+ logging.info("Compressing files to symptomdata archive: %s" % (zipfilename))
+ zipdata = ZipFile(zipfilename, "w")
+ self.remove()
+ self.zipfilename = None
+ fileCnt = 0
+ for fileregex in fileregexlist:
+ logging.info("Compressing files using %s" % (fileregex))
+ fileList = self.getFileList(fileregex, fromtime, totime)
+ try:
+ if len(fileList) > 0:
+ for file_path in fileList:
+ logging.info("Adding file %s to archive" % (file_path))
+ zipdata.write(file_path, file_path)
+ fileCnt += 1
+ except OSError as e:
+ logging.error("System error %d" % (e.errno))
+ zipdata.close()
+ if fileCnt > 0:
+ self.zipfilename = zipfilename
+ return self.zipfilename
+
+ def read(self):
+ """
+ read
+ reads the stored symptomdata file content
+
+ Returns
+ -------
+ string
+ zipfile name
+ integer
+ data lenght
+ bytes
+ bytes of the file data
+ """
+ data = None
+ with open(self.zipfilename, 'rb') as file:
+ data = file.read()
+ return (self.zipfilename, len(data), data)
+
+ def remove(self):
+ if self.zipfilename is not None:
+ os.remove(self.zipfilename)