You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.6 KiB

#
# Copyright 2025 Splunk Inc.
#
# 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 hashlib
import json
def load_schema_file(schema_file):
"""
Load schema file.
"""
with open(schema_file) as f:
ret = json.load(f)
common = ret.get("_common_", dict())
if common:
for k, v in list(ret.items()):
if k == "_common_" or not isinstance(v, dict):
continue
# merge common into other values
for _k, _v in list(common.items()):
if _k not in v:
v[_k] = _v
ret[k] = v
return ret
def md5_of_dict(data):
"""
MD5 of dict data.
"""
md5 = hashlib.sha256()
if isinstance(data, dict):
for key in sorted(data.keys()):
md5.update(repr(key))
md5.update(md5_of_dict(data[key]))
elif isinstance(data, list):
for item in sorted(data):
md5.update(md5_of_dict(item))
else:
md5.update(repr(data))
return md5.hexdigest()
class UCCException(Exception):
"""
Dispatch engine exception.
"""
pass