aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2012-06-11 04:10:37 +0000
committerMike Buland <eichlan@xagasoft.com>2012-06-11 04:10:37 +0000
commit3be307770542e3f15bcae49055294d9b8b14eebd (patch)
tree3352259941678fd3fe04dfb22bc9f99de64f4195
parent380b36be3352cd9a5c93dbd67db25346166a8547 (diff)
downloadlibgats-3be307770542e3f15bcae49055294d9b8b14eebd.tar.gz
libgats-3be307770542e3f15bcae49055294d9b8b14eebd.tar.bz2
libgats-3be307770542e3f15bcae49055294d9b8b14eebd.tar.xz
libgats-3be307770542e3f15bcae49055294d9b8b14eebd.zip
Python supports null.
-rw-r--r--python/gats.py9
-rwxr-xr-xpython/test.py2
2 files changed, 7 insertions, 4 deletions
diff --git a/python/gats.py b/python/gats.py
index 22463ab..adf5122 100644
--- a/python/gats.py
+++ b/python/gats.py
@@ -85,6 +85,9 @@ def dump( obj, sOut ):
85 sOut.write( struct.pack('>BI', 1, len(sCore)+5 ) ) 85 sOut.write( struct.pack('>BI', 1, len(sCore)+5 ) )
86 sOut.write( sCore ) 86 sOut.write( sCore )
87 87
88class EndMarker:
89 pass
90
88def _readObj( sIn ): 91def _readObj( sIn ):
89 t = sIn.read( 1 ) 92 t = sIn.read( 1 )
90 if t == 'i': # Integer 93 if t == 'i': # Integer
@@ -100,14 +103,14 @@ def _readObj( sIn ):
100 ret = [] 103 ret = []
101 while True: 104 while True:
102 value = _readObj( sIn ) 105 value = _readObj( sIn )
103 if value is None: 106 if isinstance( value, EndMarker ):
104 return ret 107 return ret
105 ret.append( value ) 108 ret.append( value )
106 elif t == 'd': # Dictionary 109 elif t == 'd': # Dictionary
107 ret = {} 110 ret = {}
108 while True: 111 while True:
109 key = _readObj( sIn ) 112 key = _readObj( sIn )
110 if key is None: 113 if isinstance( key, EndMarker ):
111 return ret 114 return ret
112 if not isinstance( key, str ): 115 if not isinstance( key, str ):
113 raise Exception('Only strings can be used as keys in gats dictionaries') 116 raise Exception('Only strings can be used as keys in gats dictionaries')
@@ -149,7 +152,7 @@ def _readObj( sIn ):
149 elif t == 'n': 152 elif t == 'n':
150 return None 153 return None
151 elif t == 'e': # End marker 154 elif t == 'e': # End marker
152 return None 155 return EndMarker()
153 else: 156 else:
154 raise Exception('Invalid gats type discovered: ' + t) 157 raise Exception('Invalid gats type discovered: ' + t)
155 return 'not implemented yet'; 158 return 'not implemented yet';
diff --git a/python/test.py b/python/test.py
index fa9c79a..a359893 100755
--- a/python/test.py
+++ b/python/test.py
@@ -7,4 +7,4 @@ print isinstance( True, int )
7print isinstance( 1, bool ) 7print isinstance( 1, bool )
8print isinstance( 1, int ) 8print isinstance( 1, int )
9 9
10print gats.loads( gats.dumps( 0 ) ) 10print gats.loads( gats.dumps( [0, 1, 2, 3, None, {'hi': None, 'bye': 1}] ) )