def validate(cls, data):
     """Validate input data matches expected failure ``dict`` format."""
     try:
         su.schema_validate(data, cls.SCHEMA)
     except su.ValidationError as e:
         raise exc.InvalidFormat(
             "Failure data not of the"
             " expected format: %s" % (e.message), e)
     else:
         # Ensure that all 'exc_type_names' originate from one of
         # BASE_EXCEPTIONS, because those are the root exceptions that
         # python mandates/provides and anything else is invalid...
         causes = collections.deque([data])
         while causes:
             cause = causes.popleft()
             root_exc_type = cause['exc_type_names'][-1]
             if root_exc_type not in cls.BASE_EXCEPTIONS:
                 raise exc.InvalidFormat(
                     "Failure data 'exc_type_names' must"
                     " have an initial exception type that is one"
                     " of %s types: '%s' is not one of those"
                     " types" % (cls.BASE_EXCEPTIONS, root_exc_type))
             sub_causes = cause.get('causes')
             if sub_causes:
                 causes.extend(sub_causes)
示例#2
0
 def validate(cls, data):
     try:
         su.schema_validate(data, cls.SCHEMA)
     except su.ValidationError as e:
         raise exc.InvalidFormat(
             "Failure data not of the"
             " expected format: %s" % (e.message), e)
示例#3
0
 def validate(cls, data):
     try:
         jsonschema.validate(data, cls._SCHEMA, types=_SCHEMA_TYPES)
     except schema_exc.ValidationError as e:
         raise excp.InvalidFormat(
             "%s message response data not of the"
             " expected format: %s" % (cls.TYPE, e.message), e)
示例#4
0
 def validate(cls, data, response):
     if response:
         schema = cls._RESPONSE_SCHEMA
     else:
         schema = cls._SENDER_SCHEMA
     try:
         jsonschema.validate(data, schema, types=_SCHEMA_TYPES)
     except schema_exc.ValidationError as e:
         if response:
             raise excp.InvalidFormat(
                 "%s message response data not of the"
                 " expected format: %s" % (cls.TYPE, e.message), e)
         else:
             raise excp.InvalidFormat(
                 "%s message sender data not of the"
                 " expected format: %s" % (cls.TYPE, e.message), e)
示例#5
0
 def validate(cls, data, response):
     if response:
         schema = cls.RESPONSE_SCHEMA
     else:
         schema = cls.SENDER_SCHEMA
     try:
         su.schema_validate(data, schema)
     except su.ValidationError as e:
         cls_name = reflection.get_class_name(cls, fully_qualified=False)
         if response:
             raise excp.InvalidFormat("%s message response data not of the"
                                      " expected format: %s"
                                      % (cls_name, e.message), e)
         else:
             raise excp.InvalidFormat("%s message sender data not of the"
                                      " expected format: %s"
                                      % (cls_name, e.message), e)
示例#6
0
 def validate(cls, data):
     try:
         su.schema_validate(data, cls.SCHEMA)
     except su.ValidationError as e:
         cls_name = reflection.get_class_name(cls, fully_qualified=False)
         raise excp.InvalidFormat("%s message response data not of the"
                                  " expected format: %s"
                                  % (cls_name, e.message), e)
     else:
         state = data['state']
         if state == FAILURE and 'result' in data:
             ft.Failure.validate(data['result'])
示例#7
0
 def validate(cls, data):
     try:
         su.schema_validate(data, cls.SCHEMA)
     except su.ValidationError as e:
         cls_name = reflection.get_class_name(cls, fully_qualified=False)
         raise excp.InvalidFormat("%s message response data not of the"
                                  " expected format: %s"
                                  % (cls_name, e.message), e)
     else:
         # Validate all failure dictionaries that *may* be present...
         failures = []
         if 'failures' in data:
             failures.extend(six.itervalues(data['failures']))
         result = data.get('result')
         if result is not None:
             result_data_type, result_data = result
             if result_data_type == 'failure':
                 failures.append(result_data)
         for fail_data in failures:
             ft.Failure.validate(fail_data)