11# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/03b_net.ipynb.
22
33# %% auto 0
4- __all__ = ['url_default_headers' , 'ExceptionsHTTP' , 'urlquote' , 'urlwrap' , 'HTTP4xxClientError' , 'HTTP5xxServerError' , 'urlopen' ,
5- 'urlread ' , 'urljson ' , 'urlcheck ' , 'urlclean ' , 'urlretrieve ' , 'urldest ' , 'urlsave ' , 'urlvalid ' , 'urlrequest ' ,
6- 'urlsend' , 'do_request' , 'start_server' , 'start_client' , 'HTTP400BadRequestError' ,
4+ __all__ = ['url_default_headers' , 'ExceptionsHTTP' , 'urlquote' , 'urlwrap' , 'HTTP4xxClientError' , 'HTTP5xxServerError' ,
5+ 'urlopener ' , 'urlopen ' , 'urlread ' , 'urljson ' , 'urlcheck ' , 'urlclean ' , 'urlretrieve ' , 'urldest ' , 'urlsave ' ,
6+ 'urlvalid' , 'urlrequest' , ' urlsend' , 'do_request' , 'start_server' , 'start_client' , 'HTTP400BadRequestError' ,
77 'HTTP401UnauthorizedError' , 'HTTP402PaymentRequiredError' , 'HTTP403ForbiddenError' , 'HTTP404NotFoundError' ,
88 'HTTP405MethodNotAllowedError' , 'HTTP406NotAcceptableError' , 'HTTP407ProxyAuthRequiredError' ,
99 'HTTP408RequestTimeoutError' , 'HTTP409ConflictError' , 'HTTP410GoneError' , 'HTTP411LengthRequiredError' ,
@@ -71,9 +71,13 @@ class HTTP5xxServerError(HTTPError):
7171 pass
7272
7373# %% ../nbs/03b_net.ipynb 14
74- _opener = urllib .request .build_opener ()
75- _opener .addheaders = list (url_default_headers .items ())
76- install_opener (_opener )
74+ def urlopener ():
75+ _opener = urllib .request .build_opener ()
76+ _opener .addheaders = list (url_default_headers .items ())
77+ return _opener
78+
79+ # %% ../nbs/03b_net.ipynb 15
80+ # install_opener(_opener)
7781
7882_httperrors = (
7983 (400 ,'Bad Request' ),(401 ,'Unauthorized' ),(402 ,'Payment Required' ),(403 ,'Forbidden' ),(404 ,'Not Found' ),
@@ -90,19 +94,19 @@ class HTTP5xxServerError(HTTPError):
9094 cls = get_class (nm , 'url' , 'hdrs' , 'fp' , sup = HTTP4xxClientError , msg = msg , code = code )
9195 globals ()[nm ] = ExceptionsHTTP [code ] = cls
9296
93- # %% ../nbs/03b_net.ipynb 15
97+ # %% ../nbs/03b_net.ipynb 16
9498_all_ = ['HTTP400BadRequestError' , 'HTTP401UnauthorizedError' , 'HTTP402PaymentRequiredError' , 'HTTP403ForbiddenError' , 'HTTP404NotFoundError' , 'HTTP405MethodNotAllowedError' , 'HTTP406NotAcceptableError' , 'HTTP407ProxyAuthRequiredError' , 'HTTP408RequestTimeoutError' , 'HTTP409ConflictError' , 'HTTP410GoneError' , 'HTTP411LengthRequiredError' , 'HTTP412PreconditionFailedError' , 'HTTP413PayloadTooLargeError' , 'HTTP414URITooLongError' , 'HTTP415UnsupportedMediaTypeError' , 'HTTP416RangeNotSatisfiableError' , 'HTTP417ExpectationFailedError' , 'HTTP418AmAteapotError' , 'HTTP421MisdirectedRequestError' , 'HTTP422UnprocessableEntityError' , 'HTTP423LockedError' , 'HTTP424FailedDependencyError' , 'HTTP425TooEarlyError' , 'HTTP426UpgradeRequiredError' , 'HTTP428PreconditionRequiredError' , 'HTTP429TooManyRequestsError' , 'HTTP431HeaderFieldsTooLargeError' , 'HTTP451LegalReasonsError' ]
9599
96- # %% ../nbs/03b_net.ipynb 16
100+ # %% ../nbs/03b_net.ipynb 17
97101def urlopen (url , data = None , headers = None , timeout = None , ** kwargs ):
98102 "Like `urllib.request.urlopen`, but first `urlwrap` the `url`, and encode `data`"
99103 if kwargs and not data : data = kwargs
100104 if data is not None :
101105 if not isinstance (data , (str ,bytes )): data = urlencode (data )
102106 if not isinstance (data , bytes ): data = data .encode ('ascii' )
103- return _opener .open (urlwrap (url , data = data , headers = headers ), timeout = timeout )
107+ return urlopener () .open (urlwrap (url , data = data , headers = headers ), timeout = timeout )
104108
105- # %% ../nbs/03b_net.ipynb 17
109+ # %% ../nbs/03b_net.ipynb 18
106110def urlread (url , data = None , headers = None , decode = True , return_json = False , return_headers = False , timeout = None , ** kwargs ):
107111 "Retrieve `url`, using `data` dict or `kwargs` to `POST` if present"
108112 try :
@@ -115,13 +119,13 @@ def urlread(url, data=None, headers=None, decode=True, return_json=False, return
115119 if return_json : res = loads (res )
116120 return (res ,dict (hdrs )) if return_headers else res
117121
118- # %% ../nbs/03b_net.ipynb 18
122+ # %% ../nbs/03b_net.ipynb 19
119123def urljson (url , data = None , timeout = None ):
120124 "Retrieve `url` and decode json"
121125 res = urlread (url , data = data , timeout = timeout )
122126 return json .loads (res ) if res else {}
123127
124- # %% ../nbs/03b_net.ipynb 20
128+ # %% ../nbs/03b_net.ipynb 21
125129def urlcheck (url , timeout = 10 ):
126130 if not url : return True
127131 try :
@@ -130,12 +134,12 @@ def urlcheck(url, timeout=10):
130134 except socket .timeout : return False
131135 except InvalidURL : return False
132136
133- # %% ../nbs/03b_net.ipynb 21
137+ # %% ../nbs/03b_net.ipynb 22
134138def urlclean (url ):
135139 "Remove fragment, params, and querystring from `url` if present"
136140 return urlunparse (urlparse (str (url ))[:3 ]+ ('' ,'' ,'' ))
137141
138- # %% ../nbs/03b_net.ipynb 23
142+ # %% ../nbs/03b_net.ipynb 24
139143def urlretrieve (url , filename = None , reporthook = None , data = None , timeout = None ):
140144 "Same as `urllib.request.urlretrieve` but also works with `Request` objects"
141145 with contextlib .closing (urlopen (url , data , timeout = timeout )) as fp :
@@ -161,43 +165,43 @@ def urlretrieve(url, filename=None, reporthook=None, data=None, timeout=None):
161165 raise ContentTooShortError (f"retrieval incomplete: got only { read } out of { size } bytes" , headers )
162166 return filename ,headers
163167
164- # %% ../nbs/03b_net.ipynb 24
168+ # %% ../nbs/03b_net.ipynb 25
165169def urldest (url , dest = None ):
166170 name = urlclean (Path (url ).name )
167171 if dest is None : dest = name
168172 dest = Path (dest )
169173 return dest / name if dest .is_dir () else dest
170174
171- # %% ../nbs/03b_net.ipynb 25
175+ # %% ../nbs/03b_net.ipynb 26
172176def urlsave (url , dest = None , reporthook = None , timeout = None ):
173177 "Retrieve `url` and save based on its name"
174178 dest = urldest (url , dest )
175179 dest .parent .mkdir (parents = True , exist_ok = True )
176180 nm ,msg = urlretrieve (url , dest , reporthook , timeout = timeout )
177181 return nm
178182
179- # %% ../nbs/03b_net.ipynb 27
183+ # %% ../nbs/03b_net.ipynb 28
180184def urlvalid (x ):
181185 "Test if `x` is a valid URL"
182186 return all (getattrs (urlparse (str (x )), 'scheme' , 'netloc' ))
183187
184- # %% ../nbs/03b_net.ipynb 29
188+ # %% ../nbs/03b_net.ipynb 30
185189def urlrequest (url , verb , headers = None , route = None , query = None , data = None , json_data = True ):
186190 "`Request` for `url` with optional route params replaced by `route`, plus `query` string, and post `data`"
187191 if route : url = url .format (** route )
188192 if query : url += '?' + urlencode (query )
189193 if isinstance (data ,dict ): data = (json .dumps if json_data else urlencode )(data ).encode ('ascii' )
190194 return Request (url , headers = headers or {}, data = data or None , method = verb .upper ())
191195
192- # %% ../nbs/03b_net.ipynb 32
196+ # %% ../nbs/03b_net.ipynb 33
193197@patch
194198def summary (self :Request , skip = None )-> dict :
195199 "Summary containing full_url, headers, method, and data, removing `skip` from headers"
196200 res = L ('full_url' ,'method' ,'data' ).map_dict (partial (getattr ,self ))
197201 res ['headers' ] = {k :v for k ,v in self .headers .items () if k not in listify (skip )}
198202 return res
199203
200- # %% ../nbs/03b_net.ipynb 34
204+ # %% ../nbs/03b_net.ipynb 35
201205def urlsend (url , verb , headers = None , route = None , query = None , data = None , json_data = True ,
202206 return_json = True , return_headers = False , debug = None ):
203207 "Send request with `urlrequest`, converting result to json if `return_json`"
@@ -209,7 +213,7 @@ def urlsend(url, verb, headers=None, route=None, query=None, data=None, json_dat
209213
210214 return urlread (req , return_json = return_json , return_headers = return_headers )
211215
212- # %% ../nbs/03b_net.ipynb 37
216+ # %% ../nbs/03b_net.ipynb 36
213217def do_request (url , post = False , headers = None , ** data ):
214218 "Call GET or json-encoded POST on `url`, depending on `post`"
215219 if data :
@@ -219,13 +223,13 @@ def do_request(url, post=False, headers=None, **data):
219223 data = None
220224 return urljson (Request (url , headers = headers , data = data or None ))
221225
222- # %% ../nbs/03b_net.ipynb 38
226+ # %% ../nbs/03b_net.ipynb 37
223227def _socket_det (port ,host ,dgram ):
224228 if isinstance (port ,int ): family ,addr = socket .AF_INET ,(host or socket .gethostname (),port )
225229 else : family ,addr = socket .AF_UNIX ,port
226230 return family ,addr ,(socket .SOCK_STREAM ,socket .SOCK_DGRAM )[dgram ]
227231
228- # %% ../nbs/03b_net.ipynb 39
232+ # %% ../nbs/03b_net.ipynb 38
229233def start_server (port , host = None , dgram = False , reuse_addr = True , n_queue = None ):
230234 "Create a `socket` server on `port`, with optional `host`, of type `dgram`"
231235 listen_args = [n_queue ] if n_queue else []
@@ -239,7 +243,7 @@ def start_server(port, host=None, dgram=False, reuse_addr=True, n_queue=None):
239243 s .listen (* listen_args )
240244 return s
241245
242- # %% ../nbs/03b_net.ipynb 41
246+ # %% ../nbs/03b_net.ipynb 40
243247def start_client (port , host = None , dgram = False ):
244248 "Create a `socket` client on `port`, with optional `host`, of type `dgram`"
245249 family ,addr ,typ = _socket_det (port ,host ,dgram )
0 commit comments