| 1393 | """ |
| 1394 | |
| 1395 | def __init__(self, uri, transport=None, encoding=None, verbose=False, |
| 1396 | allow_none=False, use_datetime=False, use_builtin_types=False, |
| 1397 | *, headers=(), context=None): |
| 1398 | # establish a "logical" server connection |
| 1399 | |
| 1400 | # get the url |
| 1401 | p = urllib.parse.urlsplit(uri) |
| 1402 | if p.scheme not in ("http", "https"): |
| 1403 | raise OSError("unsupported XML-RPC protocol") |
| 1404 | self.__host = p.netloc |
| 1405 | self.__handler = urllib.parse.urlunsplit(["", "", *p[2:]]) |
| 1406 | if not self.__handler: |
| 1407 | self.__handler = "/RPC2" |
| 1408 | |
| 1409 | if transport is None: |
| 1410 | if p.scheme == "https": |
| 1411 | handler = SafeTransport |
| 1412 | extra_kwargs = {"context": context} |
| 1413 | else: |
| 1414 | handler = Transport |
| 1415 | extra_kwargs = {} |
| 1416 | transport = handler(use_datetime=use_datetime, |
| 1417 | use_builtin_types=use_builtin_types, |
| 1418 | headers=headers, |
| 1419 | **extra_kwargs) |
| 1420 | self.__transport = transport |
| 1421 | |
| 1422 | self.__encoding = encoding or 'utf-8' |
| 1423 | self.__verbose = verbose |
| 1424 | self.__allow_none = allow_none |
| 1425 | |
| 1426 | def __close(self): |
| 1427 | self.__transport.close() |