blob: 1cd2ffcaffd6fe4e17f423c4d6136e3b330cd028 [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):
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050036 # first add the basic capabilities
37 self.server_caps.add(C.NETCONF_BASE_10)
38 self.server_caps.add(C.NETCONF_BASE_11)
39 self.server_caps.add(C.NETCONF_MONITORING)
Khen Nursimulu2e6f5952017-02-21 15:14:20 -050040 self.server_caps.add(C.NETCONF_WRITABLE)
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050041 for schema in schemas:
42 self.server_caps.add(''.join([URN_PREFIX, schema]))
43 self.voltha_schemas.add(schema)
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050044
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050045 def set_schema_dir(self, schema_dir):
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050046 self.schema_dir = schema_dir
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050047
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050048 def get_yang_schemas_definitions(self):
49 defs = []
50 for schema in self.voltha_schemas:
51 defs.append(
52 {
53 'id': schema,
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050054 'version': '2016-11-15',
55 # TODO: need to extract from voltha
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050056 'format': 'yang',
57 'location': 'NETCONF',
58 'namespace': ''.join([URN_PREFIX, schema])
Khen Nursimulu8ffb8932017-01-26 13:40:49 -050059 }
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050060 )
61 return defs
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050062
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050063 def is_schema_supported(self, schema):
64 return schema in self.voltha_schemas
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050065
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050066 def get_schema_content(self, schema):
67 if self.schema_dir not in sys.path:
68 sys.path.insert(0, self.schema_dir)
Khen Nursimuluaaac7ee2016-12-11 22:03:52 -050069
Khen Nursimuluc9ef7c12017-01-04 20:40:53 -050070 try:
71 with open(''.join([self.schema_dir, '/', schema, '.yang']),
72 'r') as f:
73 content = f.read()
74 return content
75 except Exception as e:
76 log.error("error-opening-file", file=''.join([schema, '.yang']),
77 dir=self.schema_dir, exception=repr(e))