blob: b0331310d1ae8ccd4a6f2d7dd3ac73581f24cbe1 [file] [log] [blame]
Khen Nursimulua7b842a2016-12-03 23:28:42 -05001#!/usr/bin/env python
2#
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -05003# Copyright 2017 the original author or authors.
Khen Nursimulua7b842a2016-12-03 23:28:42 -05004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050017import structlog
18import sys
Khen Nursimulua7b842a2016-12-03 23:28:42 -050019from constants import Constants as C
20
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050021URN_PREFIX = "urn:opencord:params:xml:ns:voltha:"
22log = structlog.get_logger()
23
Khen Nursimulua7b842a2016-12-03 23:28:42 -050024
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050025class Capabilities:
Khen Nursimulua7b842a2016-12-03 23:28:42 -050026 def __init__(self):
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050027 self.server_caps = set()
Khen Nursimulua7b842a2016-12-03 23:28:42 -050028 self.client_caps = set()
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050029 self.voltha_schemas = set()
30 self.schema_dir = None
Khen Nursimulua7b842a2016-12-03 23:28:42 -050031
32 def add_client_capability(self, cap):
33 self.client_caps.add(cap)
34
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050035 def set_server_capabilities(self, schemas):
36 # prefix = "urn:ietf:params:netconf:capability:"
37 # first add the basic capabilities
38 self.server_caps.add(C.NETCONF_BASE_10)
39 self.server_caps.add(C.NETCONF_BASE_11)
40 self.server_caps.add(C.NETCONF_MONITORING)
41 for schema in schemas:
42 self.server_caps.add(''.join([URN_PREFIX, schema]))
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050043 self.server_caps.add(''.join([
44 URN_PREFIX,
45 schema,
46 ':writable-running'])
47 )
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050048 self.voltha_schemas.add(schema)
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050049
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050050 def set_schema_dir(self, schema_dir):
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050051 self.schema_dir = schema_dir
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050052
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050053 def get_yang_schemas_definitions(self):
54 defs = []
55 for schema in self.voltha_schemas:
56 defs.append(
57 {
58 'id': schema,
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050059 'version': '2016-11-15',
60 # TODO: need to extract from voltha
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050061 'format': 'yang',
62 'location': 'NETCONF',
63 'namespace': ''.join([URN_PREFIX, schema])
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050064 }
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050065 )
66 return defs
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050067
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050068 def is_schema_supported(self, schema):
69 return schema in self.voltha_schemas
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050070
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050071 def get_schema_content(self, schema):
72 if self.schema_dir not in sys.path:
73 sys.path.insert(0, self.schema_dir)
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050074
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050075 try:
76 with open(''.join([self.schema_dir, '/', schema, '.yang']),
77 'r') as f:
78 content = f.read()
79 return content
80 except Exception as e:
81 log.error("error-opening-file", file=''.join([schema, '.yang']),
82 dir=self.schema_dir, exception=repr(e))