@@ -110,26 +110,26 @@ def urlopen(url, data=None, headers=None, timeout=None, **kwargs):
110
110
raise e
111
111
except Exception as e : raise e
112
112
113
- # %% ../nbs/03b_net.ipynb 18
113
+ # %% ../nbs/03b_net.ipynb 20
114
114
def urlread (url , data = None , headers = None , decode = True , return_json = False , return_headers = False , timeout = None , ** kwargs ):
115
115
"Retrieve `url`, using `data` dict or `kwargs` to `POST` if present"
116
116
try :
117
117
with urlopen (url , data = data , headers = headers , timeout = timeout , ** kwargs ) as u : res ,hdrs = u .read (),u .headers
118
118
except HTTPError as e :
119
- if 400 <= e .code < 500 : raise ExceptionsHTTP [e .code ](e .url , e .hdrs , e .fp ) from None
119
+ if 400 <= e .code < 500 : raise ExceptionsHTTP [e .code ](e .url , e .hdrs , e .fp , msg = e . msg ) from None
120
120
else : raise
121
121
122
122
if decode : res = res .decode ()
123
123
if return_json : res = loads (res )
124
124
return (res ,dict (hdrs )) if return_headers else res
125
125
126
- # %% ../nbs/03b_net.ipynb 20
126
+ # %% ../nbs/03b_net.ipynb 21
127
127
def urljson (url , data = None , timeout = None ):
128
128
"Retrieve `url` and decode json"
129
129
res = urlread (url , data = data , timeout = timeout )
130
130
return json .loads (res ) if res else {}
131
131
132
- # %% ../nbs/03b_net.ipynb 22
132
+ # %% ../nbs/03b_net.ipynb 23
133
133
def urlcheck (url , timeout = 10 ):
134
134
if not url : return True
135
135
try :
@@ -138,12 +138,12 @@ def urlcheck(url, timeout=10):
138
138
except socket .timeout : return False
139
139
except InvalidURL : return False
140
140
141
- # %% ../nbs/03b_net.ipynb 23
141
+ # %% ../nbs/03b_net.ipynb 24
142
142
def urlclean (url ):
143
143
"Remove fragment, params, and querystring from `url` if present"
144
144
return urlunparse (urlparse (str (url ))[:3 ]+ ('' ,'' ,'' ))
145
145
146
- # %% ../nbs/03b_net.ipynb 25
146
+ # %% ../nbs/03b_net.ipynb 26
147
147
def urlretrieve (url , filename = None , reporthook = None , data = None , timeout = None ):
148
148
"Same as `urllib.request.urlretrieve` but also works with `Request` objects"
149
149
with contextlib .closing (urlopen (url , data , timeout = timeout )) as fp :
@@ -169,43 +169,43 @@ def urlretrieve(url, filename=None, reporthook=None, data=None, timeout=None):
169
169
raise ContentTooShortError (f"retrieval incomplete: got only { read } out of { size } bytes" , headers )
170
170
return filename ,headers
171
171
172
- # %% ../nbs/03b_net.ipynb 26
172
+ # %% ../nbs/03b_net.ipynb 27
173
173
def urldest (url , dest = None ):
174
174
name = urlclean (Path (url ).name )
175
175
if dest is None : dest = name
176
176
dest = Path (dest )
177
177
return dest / name if dest .is_dir () else dest
178
178
179
- # %% ../nbs/03b_net.ipynb 27
179
+ # %% ../nbs/03b_net.ipynb 28
180
180
def urlsave (url , dest = None , reporthook = None , timeout = None ):
181
181
"Retrieve `url` and save based on its name"
182
182
dest = urldest (url , dest )
183
183
dest .parent .mkdir (parents = True , exist_ok = True )
184
184
nm ,msg = urlretrieve (url , dest , reporthook , timeout = timeout )
185
185
return nm
186
186
187
- # %% ../nbs/03b_net.ipynb 29
187
+ # %% ../nbs/03b_net.ipynb 30
188
188
def urlvalid (x ):
189
189
"Test if `x` is a valid URL"
190
190
return all (getattrs (urlparse (str (x )), 'scheme' , 'netloc' ))
191
191
192
- # %% ../nbs/03b_net.ipynb 31
192
+ # %% ../nbs/03b_net.ipynb 32
193
193
def urlrequest (url , verb , headers = None , route = None , query = None , data = None , json_data = True ):
194
194
"`Request` for `url` with optional route params replaced by `route`, plus `query` string, and post `data`"
195
195
if route : url = url .format (** route )
196
196
if query : url += '?' + urlencode (query )
197
197
if isinstance (data ,dict ): data = (json .dumps if json_data else urlencode )(data ).encode ('ascii' )
198
198
return Request (url , headers = headers or {}, data = data or None , method = verb .upper ())
199
199
200
- # %% ../nbs/03b_net.ipynb 34
200
+ # %% ../nbs/03b_net.ipynb 35
201
201
@patch
202
202
def summary (self :Request , skip = None )-> dict :
203
203
"Summary containing full_url, headers, method, and data, removing `skip` from headers"
204
204
res = L ('full_url' ,'method' ,'data' ).map_dict (partial (getattr ,self ))
205
205
res ['headers' ] = {k :v for k ,v in self .headers .items () if k not in listify (skip )}
206
206
return res
207
207
208
- # %% ../nbs/03b_net.ipynb 36
208
+ # %% ../nbs/03b_net.ipynb 37
209
209
def urlsend (url , verb , headers = None , route = None , query = None , data = None , json_data = True ,
210
210
return_json = True , return_headers = False , debug = None ):
211
211
"Send request with `urlrequest`, converting result to json if `return_json`"
@@ -217,7 +217,7 @@ def urlsend(url, verb, headers=None, route=None, query=None, data=None, json_dat
217
217
218
218
return urlread (req , return_json = return_json , return_headers = return_headers )
219
219
220
- # %% ../nbs/03b_net.ipynb 37
220
+ # %% ../nbs/03b_net.ipynb 38
221
221
def do_request (url , post = False , headers = None , ** data ):
222
222
"Call GET or json-encoded POST on `url`, depending on `post`"
223
223
if data :
@@ -227,13 +227,13 @@ def do_request(url, post=False, headers=None, **data):
227
227
data = None
228
228
return urljson (Request (url , headers = headers , data = data or None ))
229
229
230
- # %% ../nbs/03b_net.ipynb 38
230
+ # %% ../nbs/03b_net.ipynb 39
231
231
def _socket_det (port ,host ,dgram ):
232
232
if isinstance (port ,int ): family ,addr = socket .AF_INET ,(host or socket .gethostname (),port )
233
233
else : family ,addr = socket .AF_UNIX ,port
234
234
return family ,addr ,(socket .SOCK_STREAM ,socket .SOCK_DGRAM )[dgram ]
235
235
236
- # %% ../nbs/03b_net.ipynb 39
236
+ # %% ../nbs/03b_net.ipynb 40
237
237
def start_server (port , host = None , dgram = False , reuse_addr = True , n_queue = None ):
238
238
"Create a `socket` server on `port`, with optional `host`, of type `dgram`"
239
239
listen_args = [n_queue ] if n_queue else []
@@ -247,7 +247,7 @@ def start_server(port, host=None, dgram=False, reuse_addr=True, n_queue=None):
247
247
s .listen (* listen_args )
248
248
return s
249
249
250
- # %% ../nbs/03b_net.ipynb 41
250
+ # %% ../nbs/03b_net.ipynb 42
251
251
def start_client (port , host = None , dgram = False ):
252
252
"Create a `socket` client on `port`, with optional `host`, of type `dgram`"
253
253
family ,addr ,typ = _socket_det (port ,host ,dgram )
0 commit comments