def check_data(cls, models, metadata, data): """Check cluster vmware attributes data :param models: objects which represent models in restrictions :type models: dict :param metadata: vmware attributes metadata object :type metadata: list|dict :param data: vmware attributes data(value) object :type data: list|dict :retruns: func -- generator which produces errors """ root_key = camel_to_snake_case(cls.__name__) def find_errors(metadata=metadata, path_key=root_key): """Generator for vmware attributes errors for each attribute in 'metadata' gets relevant values from vmware 'value' and checks them with restrictions and regexs """ if isinstance(metadata, dict): restr = cls.check_restrictions( models, metadata.get('restrictions', [])) if restr.get('result'): # TODO(apopovych): handle restriction message? return else: for mkey, mvalue in six.iteritems(metadata): if mkey == 'name': value_path = path_key.replace(root_key, '').replace( '.fields', '') values = cls._get_values(value_path, data) attr_regex = metadata.get('regex', {}) if attr_regex: pattern = re.compile(attr_regex.get('source')) for value in values(): if not pattern.match(value): yield attr_regex.get('error') for err in find_errors(mvalue, '.'.join([path_key, mkey])): yield err elif isinstance(metadata, list): for i, item in enumerate(metadata): current_key = item.get('name') or str(i) for err in find_errors(item, '.'.join([path_key, current_key])): yield err return list(find_errors())
def check_data(cls, models, metadata, data): """Check cluster vmware attributes data :param models: objects which represent models in restrictions :type models: dict :param metadata: vmware attributes metadata object :type metadata: list|dict :param data: vmware attributes data(value) object :type data: list|dict :retruns: func -- generator which produces errors """ root_key = camel_to_snake_case(cls.__name__) def find_errors(metadata=metadata, path_key=root_key): """Generator for vmware attributes errors for each attribute in 'metadata' gets relevant values from vmware 'value' and checks them with restrictions and regexs """ if isinstance(metadata, dict): restr = cls.check_restrictions( models, metadata.get('restrictions', [])) if restr.get('result'): # TODO(apopovych): handle restriction message? return else: for mkey, mvalue in six.iteritems(metadata): if mkey == 'name': value_path = path_key.replace( root_key, '').replace('.fields', '') values = cls._get_values(value_path, data) attr_regex = metadata.get('regex', {}) if attr_regex: pattern = re.compile(attr_regex.get('source')) for value in values(): if not pattern.match(value): yield attr_regex.get('error') for err in find_errors( mvalue, '.'.join([path_key, mkey])): yield err elif isinstance(metadata, list): for i, item in enumerate(metadata): current_key = item.get('name') or str(i) for err in find_errors( item, '.'.join([path_key, current_key])): yield err return list(find_errors())
def test_camel_case_to_snake_case(self): self.assertTrue( camel_to_snake_case('TestCase') == 'test_case') self.assertTrue( camel_to_snake_case('TTestCase') == 't_test_case')
def test_camel_case_to_snake_case(self): self.assertTrue(camel_to_snake_case('TestCase') == 'test_case') self.assertTrue(camel_to_snake_case('TTestCase') == 't_test_case')