You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2010/10/29 23:30:55 UTC

svn commit: r1028910 - in /avro/trunk: CHANGES.txt lang/java/src/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java lang/py/src/avro/io.py

Author: cutting
Date: Fri Oct 29 21:30:55 2010
New Revision: 1028910

URL: http://svn.apache.org/viewvc?rev=1028910&view=rev
Log:
AVRO-642. Pretty-print schemas in some validation error messages.  Contributed by Harsh J Chouraria.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
    avro/trunk/lang/py/src/avro/io.py

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1028910&r1=1028909&r2=1028910&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Fri Oct 29 21:30:55 2010
@@ -22,6 +22,9 @@ Avro 1.5.0 (unreleased)
     AVRO-683. Java: Fix RPC proxy factories to not require casting.
     (Stephen Gargan via cutting)
 
+    AVRO-642. Java, Python: Pretty-print schemas in some validation
+    error messages.  (Harsh J Chouraria via cutting)
+
   BUG FIXES
 
     AVRO-675. C: Bytes and fixed setters don't update datum size.

Modified: avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java?rev=1028910&r1=1028909&r2=1028910&view=diff
==============================================================================
--- avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java (original)
+++ avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java Fri Oct 29 21:30:55 2010
@@ -167,7 +167,8 @@ public class ResolvingGrammarGenerator e
         throw new RuntimeException("Unexpected schema type: " + readerType);
       }
     }
-    return Symbol.error("Found " + writer + ", expecting " + reader);
+    return Symbol.error("Found " + writer.toString(true)
+                        + ", expecting " + reader.toString(true));
   }
 
   private Symbol resolveUnion(Schema writer, Schema reader,
@@ -216,7 +217,8 @@ public class ResolvingGrammarGenerator e
         String fname = rf.name();
         if (writer.getField(fname) == null) {
           if (rf.defaultValue() == null) {
-            result = Symbol.error("Found " + writer + ", expecting " + reader);
+            result = Symbol.error("Found " + writer.toString(true)
+                                  + ", expecting " + reader.toString(true));
             seen.put(wsc, result);
             return result;
           } else {

Modified: avro/trunk/lang/py/src/avro/io.py
URL: http://svn.apache.org/viewvc/avro/trunk/lang/py/src/avro/io.py?rev=1028910&r1=1028909&r2=1028910&view=diff
==============================================================================
--- avro/trunk/lang/py/src/avro/io.py (original)
+++ avro/trunk/lang/py/src/avro/io.py Fri Oct 29 21:30:55 2010
@@ -40,6 +40,11 @@ import struct
 from avro import schema
 import sys
 
+try:
+	import json
+except ImportError:
+	import simplejson as json
+
 #
 # Constants
 #
@@ -74,14 +79,17 @@ STRUCT_DOUBLE = struct_class('!d')  # bi
 class AvroTypeException(schema.AvroException):
   """Raised when datum is not an example of schema."""
   def __init__(self, expected_schema, datum):
+    pretty_expected = json.dumps(json.loads(str(expected_schema)), indent=2)
     fail_msg = "The datum %s is not an example of the schema %s"\
-               % (datum, expected_schema)
+               % (datum, pretty_expected)
     schema.AvroException.__init__(self, fail_msg)
 
 class SchemaResolutionException(schema.AvroException):
   def __init__(self, fail_msg, writers_schema=None, readers_schema=None):
-    if writers_schema: fail_msg += "\nWriter's Schema: %s" % writers_schema
-    if readers_schema: fail_msg += "\nReader's Schema: %s" % readers_schema
+    pretty_writers = json.dumps(json.loads(str(writers_schema)), indent=2)
+    pretty_readers = json.dumps(json.loads(str(readers_schema)), indent=2)
+    if writers_schema: fail_msg += "\nWriter's Schema: %s" % pretty_writers
+    if readers_schema: fail_msg += "\nReader's Schema: %s" % pretty_readers
     schema.AvroException.__init__(self, fail_msg)
 
 #