@@ -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