server: Allow a server address with a subpath.
This commit is contained in:
parent
54ad615431
commit
107a7a606e
2 changed files with 44 additions and 1 deletions
|
@ -67,6 +67,10 @@ from .utils import create_server_buffer, key_from_value, server_buffer_prnt
|
||||||
|
|
||||||
from .colors import Formatted, FormattedString, DEFAULT_ATTRIBUTES
|
from .colors import Formatted, FormattedString, DEFAULT_ATTRIBUTES
|
||||||
|
|
||||||
|
try:
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
except ImportError:
|
||||||
|
from urlparse import urlparse
|
||||||
|
|
||||||
try:
|
try:
|
||||||
FileNotFoundError # type: ignore
|
FileNotFoundError # type: ignore
|
||||||
|
@ -319,8 +323,28 @@ class MatrixServer(object):
|
||||||
with atomic_write(path, overwrite=True) as device_file:
|
with atomic_write(path, overwrite=True) as device_file:
|
||||||
device_file.write(self.device_id)
|
device_file.write(self.device_id)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _parse_url(address, port):
|
||||||
|
parsed_url = urlparse(address)
|
||||||
|
|
||||||
|
if parsed_url.netloc:
|
||||||
|
netloc, path = (parsed_url.netloc, parsed_url.path)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
netloc, path = address.split("/", 1)
|
||||||
|
except ValueError:
|
||||||
|
netloc, path = (address, "")
|
||||||
|
|
||||||
|
path = path.strip("/")
|
||||||
|
netloc = "{}:{}".format(netloc, port)
|
||||||
|
|
||||||
|
return "/".join([netloc, path]).rstrip("/")
|
||||||
|
|
||||||
def _change_client(self):
|
def _change_client(self):
|
||||||
host = ":".join([self.config.address, str(self.config.port)])
|
host = MatrixServer._parse_url(
|
||||||
|
self.config.address,
|
||||||
|
str(self.config.port)
|
||||||
|
)
|
||||||
self.client = HttpClient(
|
self.client = HttpClient(
|
||||||
host,
|
host,
|
||||||
self.config.username,
|
self.config.username,
|
||||||
|
|
19
tests/server_test.py
Normal file
19
tests/server_test.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
from matrix.server import MatrixServer
|
||||||
|
from matrix._weechat import MockConfig
|
||||||
|
import matrix.globals as G
|
||||||
|
|
||||||
|
G.CONFIG = MockConfig()
|
||||||
|
|
||||||
|
class TestClass(object):
|
||||||
|
def test_address_parsing(self):
|
||||||
|
host = MatrixServer._parse_url("example.org", "443")
|
||||||
|
assert host == "example.org:443"
|
||||||
|
|
||||||
|
host = MatrixServer._parse_url("example.org/_matrix", "443")
|
||||||
|
assert host == "example.org:443/_matrix"
|
||||||
|
|
||||||
|
host = MatrixServer._parse_url("https://example.org/_matrix", "443")
|
||||||
|
assert host == "example.org:443/_matrix"
|
||||||
|
|
||||||
|
host = MatrixServer._parse_url("https://example.org", "443")
|
||||||
|
assert host == "example.org:443"
|
Loading…
Reference in a new issue