Skip to content

Commit d75ad6d

Browse files
author
Diwaker Gupta
committed
Refactor client generator.
1 parent 73ed71f commit d75ad6d

File tree

1 file changed

+98
-80
lines changed

1 file changed

+98
-80
lines changed

generator/go_client.stoneg.py

Lines changed: 98 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -69,109 +69,127 @@ def _generate_route(self, namespace, route):
6969
out = self.emit
7070
fn = fmt_var(route.name)
7171
err = fmt_type(route.error_data_type, namespace)
72-
self.emit('//%sAPIError is an error-wrapper for the %s route' %
73-
(fn, route.name))
72+
out('//%sAPIError is an error-wrapper for the %s route' %
73+
(fn, route.name))
7474
with self.block('type {fn}APIError struct'.format(fn=fn)):
7575
out('dropbox.APIError')
7676
out('EndpointError {err} `json:"error"`'.format(err=err))
7777
out()
78-
host = route.attrs.get('host', 'api')
79-
style = route.attrs.get('style', 'rpc')
80-
auth = route.attrs.get('auth', '')
8178

8279
signature = 'func (dbx *apiImpl) ' + self._generate_route_signature(
8380
namespace, route)
8481
with self.block(signature):
8582
out('cli := dbx.Client')
8683
out()
8784

88-
body = 'nil'
89-
if not is_void_type(route.arg_data_type):
90-
with self.block('if dbx.Config.Verbose'):
91-
out('log.Printf("arg: %v", arg)')
92-
out('b, err := json.Marshal(arg)')
93-
with self.block('if err != nil'):
94-
out('return')
95-
out()
96-
if style is not 'upload':
97-
body = 'bytes.NewReader(b)'
98-
if style == 'upload':
99-
body = 'content'
100-
out('req, err := http.NewRequest("POST", '
101-
'(*dropbox.Context)(dbx).GenerateURL("{}", "{}", "{}"), {})'.format(
102-
host, namespace.name, route.name, body))
85+
self._generate_request(namespace, route)
86+
self._generate_post(route)
87+
self._generate_response(route)
88+
self._generate_error_handling(route)
89+
self._generate_result(route)
90+
91+
out()
92+
93+
def _generate_request(self, namespace, route):
94+
host = route.attrs.get('host', 'api')
95+
style = route.attrs.get('style', 'rpc')
96+
out = self.emit
97+
body = 'nil'
98+
if not is_void_type(route.arg_data_type):
99+
with self.block('if dbx.Config.Verbose'):
100+
out('log.Printf("arg: %v", arg)')
101+
out('b, err := json.Marshal(arg)')
103102
with self.block('if err != nil'):
104103
out('return')
105104
out()
106-
if not is_void_type(route.arg_data_type):
107-
if style == 'upload':
108-
out('req.Header.Set("Dropbox-API-Arg", string(b))')
109-
else:
110-
out('req.Header.Set("Content-Type", "application/json")')
105+
if style is not 'upload':
106+
body = 'bytes.NewReader(b)'
107+
if style == 'upload':
108+
body = 'content'
109+
out('req, err := http.NewRequest("POST", '
110+
'(*dropbox.Context)(dbx).GenerateURL("{}", "{}", "{}"), {})'.format(
111+
host, namespace.name, route.name, body))
112+
with self.block('if err != nil'):
113+
out('return')
114+
out()
115+
if not is_void_type(route.arg_data_type):
111116
if style == 'upload':
112-
out('req.Header.Set("Content-Type",'
113-
'"application/octet-stream")')
114-
115-
if auth == 'noauth':
116-
out('req.Header.Del("Authorization")')
117-
elif auth != 'team':
118-
with self.block('if dbx.Config.AsMemberID != ""'):
119-
out('req.Header.Set("Dropbox-API-Select-User", dbx.Config.AsMemberID)')
117+
out('req.Header.Set("Dropbox-API-Arg", string(b))')
118+
else:
119+
out('req.Header.Set("Content-Type", "application/json")')
120+
if style == 'upload':
121+
out('req.Header.Set("Content-Type",' '"application/octet-stream")')
120122

121-
with self.block('if dbx.Config.Verbose'):
122-
out('log.Printf("req: %v", req)')
123-
out('resp, err := cli.Do(req)')
124-
with self.block('if dbx.Config.Verbose'):
125-
out('log.Printf("resp: %v", resp)')
123+
def _generate_post(self, route):
124+
out = self.emit
125+
auth = route.attrs.get('auth', '')
126+
if auth == 'noauth':
127+
out('req.Header.Del("Authorization")')
128+
elif auth != 'team':
129+
with self.block('if dbx.Config.AsMemberID != ""'):
130+
out('req.Header.Set("Dropbox-API-Select-User", dbx.Config.AsMemberID)')
131+
132+
with self.block('if dbx.Config.Verbose'):
133+
out('log.Printf("req: %v", req)')
134+
out('resp, err := cli.Do(req)')
135+
with self.block('if dbx.Config.Verbose'):
136+
out('log.Printf("resp: %v", resp)')
137+
138+
with self.block('if err != nil'):
139+
out('return')
140+
out()
126141

127-
with self.block('if err != nil'):
142+
def _generate_response(self, route):
143+
out = self.emit
144+
style = route.attrs.get('style', 'rpc')
145+
if style == 'download':
146+
out('body := []byte(resp.Header.Get("Dropbox-API-Result"))')
147+
out('content = resp.Body')
148+
else:
149+
out('defer resp.Body.Close()')
150+
with self.block('body, err := ioutil.ReadAll(resp.Body);'
151+
'if err != nil'):
128152
out('return')
129153
out()
154+
with self.block('if dbx.Config.Verbose'):
155+
out('log.Printf("body: %s", body)')
130156

131-
if style == 'download':
132-
out('body := []byte(resp.Header.Get("Dropbox-API-Result"))')
133-
out('content = resp.Body')
134-
else:
135-
out('defer resp.Body.Close()')
136-
with self.block('body, err := ioutil.ReadAll(resp.Body);'
137-
'if err != nil'):
138-
out('return')
139-
out()
140-
141-
with self.block('if dbx.Config.Verbose'):
142-
out('log.Printf("body: %s", body)')
143-
with self.block('if resp.StatusCode != 200'):
144-
with self.block('if resp.StatusCode == 409'):
145-
out('var apiError {fn}APIError'.format(fn=fn))
146-
with self.block('err = json.Unmarshal(body, &apiError);'
147-
'if err != nil'):
148-
out('return')
149-
out('err = apiError')
150-
out('return')
151-
out('var apiError dropbox.APIError')
152-
with self.block('if resp.StatusCode == 400'):
153-
out('apiError.ErrorSummary = string(body)')
154-
out('err = apiError')
155-
out('return')
157+
def _generate_error_handling(self, route):
158+
out = self.emit
159+
with self.block('if resp.StatusCode != 200'):
160+
with self.block('if resp.StatusCode == 409'):
161+
out('var apiError %sAPIError' % fmt_var(route.name))
156162
with self.block('err = json.Unmarshal(body, &apiError);'
157163
'if err != nil'):
158164
out('return')
159165
out('err = apiError')
160166
out('return')
161-
if is_struct_type(route.result_data_type) and \
162-
route.result_data_type.has_enumerated_subtypes():
163-
out('var tmp %sUnion' % fmt_var(route.result_data_type.name, export=False))
164-
with self.block('err = json.Unmarshal(body, &tmp);'
165-
'if err != nil'):
166-
out('return')
167-
with self.block('switch tmp.Tag'):
168-
for t in route.result_data_type.get_enumerated_subtypes():
169-
with self.block('case "%s":' % t.name, delim=(None, None)):
170-
self.emit('res = tmp.%s' % fmt_var(t.name))
171-
elif not is_void_type(route.result_data_type):
172-
with self.block('err = json.Unmarshal(body, &res);'
173-
'if err != nil'):
174-
out('return')
175-
out()
167+
out('var apiError dropbox.APIError')
168+
with self.block('if resp.StatusCode == 400'):
169+
out('apiError.ErrorSummary = string(body)')
170+
out('err = apiError')
171+
out('return')
172+
with self.block('err = json.Unmarshal(body, &apiError);'
173+
'if err != nil'):
174+
out('return')
175+
out('err = apiError')
176176
out('return')
177-
out()
177+
178+
def _generate_result(self, route):
179+
out = self.emit
180+
if is_struct_type(route.result_data_type) and \
181+
route.result_data_type.has_enumerated_subtypes():
182+
out('var tmp %sUnion' % fmt_var(route.result_data_type.name, export=False))
183+
with self.block('err = json.Unmarshal(body, &tmp);'
184+
'if err != nil'):
185+
out('return')
186+
with self.block('switch tmp.Tag'):
187+
for t in route.result_data_type.get_enumerated_subtypes():
188+
with self.block('case "%s":' % t.name, delim=(None, None)):
189+
self.emit('res = tmp.%s' % fmt_var(t.name))
190+
elif not is_void_type(route.result_data_type):
191+
with self.block('err = json.Unmarshal(body, &res);'
192+
'if err != nil'):
193+
out('return')
194+
out()
195+
out('return')

0 commit comments

Comments
 (0)