diff options
author | Mike Buland <eichlan@xagasoft.com> | 2012-06-11 04:10:37 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2012-06-11 04:10:37 +0000 |
commit | 3be307770542e3f15bcae49055294d9b8b14eebd (patch) | |
tree | 3352259941678fd3fe04dfb22bc9f99de64f4195 | |
parent | 380b36be3352cd9a5c93dbd67db25346166a8547 (diff) | |
download | libgats-3be307770542e3f15bcae49055294d9b8b14eebd.tar.gz libgats-3be307770542e3f15bcae49055294d9b8b14eebd.tar.bz2 libgats-3be307770542e3f15bcae49055294d9b8b14eebd.tar.xz libgats-3be307770542e3f15bcae49055294d9b8b14eebd.zip |
Python supports null.
-rw-r--r-- | python/gats.py | 9 | ||||
-rwxr-xr-x | python/test.py | 2 |
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 | ||
88 | class EndMarker: | ||
89 | pass | ||
90 | |||
88 | def _readObj( sIn ): | 91 | def _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 ) | |||
7 | print isinstance( 1, bool ) | 7 | print isinstance( 1, bool ) |
8 | print isinstance( 1, int ) | 8 | print isinstance( 1, int ) |
9 | 9 | ||
10 | print gats.loads( gats.dumps( 0 ) ) | 10 | print gats.loads( gats.dumps( [0, 1, 2, 3, None, {'hi': None, 'bye': 1}] ) ) |