Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
lib-py-b2b / validator.py
Size: Mime:
import yaml
import os
from bravado_core.spec import Spec
from bravado_core.validate import validate_object
from enum import Enum
from aws_xray_sdk.core import xray_recorder


class B2BModel(Enum):
    ORDER = 'Order'
    ORDER_LINE = 'OrderLine'


class StandardDialectValidator:
    def __init__(self, schema_file='b2bApi.yaml'):
        self.spec = self.__load_spec(schema_file)
        self.spec_models = {}
        for m in B2BModel:
            self.spec_models[m] = self.spec_dict['definitions'][m.value]

    def __load_spec(self, schema_file):
        dir_path = os.path.dirname(os.path.abspath(__file__))
        file_path = os.path.join(dir_path, schema_file)
        with open(file_path, 'r') as spec:
            self.spec_dict = yaml.load(spec.read(), yaml.Loader)
        return Spec.from_dict(self.spec_dict, config={
            'validate_swagger_spec': False,
            'validate_requests': False,
            'validate_responses': False,
            'use_models': True
        })

    @xray_recorder.capture()
    def validate_model(self, model: B2BModel, json_data):
        validate_object(self.spec, self.spec_models[model], json_data)