blob: 8f07a66be21ce3dc245a08cfd54d73c1607efa2d [file] [log] [blame]
Matteo Scandolo0a207b52018-01-29 13:39:43 -08001# Copyright 2017-present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15from xosconfig import Config
16from multistructlog import create_logger
17from synchronizers.new_base.modelaccessor import ProgranService
Matteo Scandoloc1102a52018-02-01 17:26:04 -080018import time
19import datetime
Matteo Scandolo0a207b52018-01-29 13:39:43 -080020
21log = create_logger(Config().get('logging'))
22
23class ProgranHelpers():
24
25 @staticmethod
26 def get_onos_info_from_si(service_instance):
27 progran_service = service_instance.owner.leaf_model
28 return ProgranHelpers.get_onos_info_from_service(progran_service)
29
30 @staticmethod
31 def get_progran_onos_info():
Matteo Scandolo6b607c82018-01-30 09:12:26 -080032 try:
33 progran_service = ProgranService.objects.all()[0]
34 except IndexError:
Matteo Scandoloc1102a52018-02-01 17:26:04 -080035 raise Exception("Cannot find Progran Service, does it exists?")
Matteo Scandolo0a207b52018-01-29 13:39:43 -080036 return ProgranHelpers.get_onos_info_from_service(progran_service)
37
38 @staticmethod
39 def get_onos_info_from_service(progran_service):
40 return {
41 'url': progran_service.onos_address,
42 'port': progran_service.onos_port,
43 'username': progran_service.onos_username,
44 'password': progran_service.onos_password,
45 }
Matteo Scandoloc1102a52018-02-01 17:26:04 -080046
47 @staticmethod
48 def get_progran_rest_errors(res):
49 res = res.json()
50 if res['Result'] == -2:
51 raise Exception(res['ErrCode'])
52
53 @staticmethod
54 def date_to_time(d):
55 if len(d) == 0:
56 return 0
57 return time.mktime(datetime.datetime.strptime(d, "%d.%m.%Y %H:%S").timetuple())
58
59 @staticmethod
60 def update_fields(model, dict, mapping={}, transformations={}):
61 dict = ProgranHelpers.convert_keys(dict, mapping, transformations)
62 for k, v in dict.iteritems():
63 if hasattr(model, k):
64 setattr(model, k, v)
65 else:
66 log.warn("%s does not have a '%s' property, not updating it" % (model.model_name, k))
67 return model
68
69 @staticmethod
70 def convert_keys(dict, mapping={}, transformations={}):
71 for k, v in dict.iteritems():
72 if k in mapping:
73 # apply custom transformations to the data
74 if k in transformations:
75 dict[k] = transformations[k](v)
76
77 # NOTE we may have different names that the field in the dict
78 dict[mapping[k]] = dict[k]
79 del dict[k]
80 return dict
81
82 @staticmethod
83 def list_diff(first, second):
84 second = set(second)
85 return [item for item in first if item not in second]