Fix Client.fetch_image_url in some cases
Sometimes (or always?), jsmods require includes a JS version specifier. This means we couldn't find the url
This commit is contained in:
@@ -24,6 +24,8 @@ def parse_server_js_define(html: str) -> Mapping[str, Any]:
|
|||||||
# Find points where we should start parsing
|
# Find points where we should start parsing
|
||||||
define_splits = SERVER_JS_DEFINE_REGEX.split(html)
|
define_splits = SERVER_JS_DEFINE_REGEX.split(html)
|
||||||
|
|
||||||
|
# TODO: Extract jsmods "require" and "define" from `bigPipe.onPageletArrive`?
|
||||||
|
|
||||||
# Skip leading entry
|
# Skip leading entry
|
||||||
_, *define_splits = define_splits
|
_, *define_splits = define_splits
|
||||||
|
|
||||||
|
@@ -63,16 +63,19 @@ def generate_offline_threading_id():
|
|||||||
return str(int(msgs, 2))
|
return str(int(msgs, 2))
|
||||||
|
|
||||||
|
|
||||||
|
def remove_version_from_module(module):
|
||||||
|
return module.split("@", 1)[0]
|
||||||
|
|
||||||
|
|
||||||
def get_jsmods_require(require) -> Mapping[str, Sequence[Any]]:
|
def get_jsmods_require(require) -> Mapping[str, Sequence[Any]]:
|
||||||
rtn = {}
|
rtn = {}
|
||||||
for item in require:
|
for item in require:
|
||||||
if len(item) == 1:
|
if len(item) == 1:
|
||||||
(module,) = item
|
(module,) = item
|
||||||
rtn[module] = []
|
rtn[remove_version_from_module(module)] = []
|
||||||
continue
|
continue
|
||||||
method = "{}.{}".format(item[0], item[1])
|
module, method, requirements, arguments = item
|
||||||
requirements = item[2]
|
method = "{}.{}".format(remove_version_from_module(module), method)
|
||||||
arguments = item[3]
|
|
||||||
rtn[method] = arguments
|
rtn[method] = arguments
|
||||||
return rtn
|
return rtn
|
||||||
|
|
||||||
|
@@ -46,11 +46,6 @@ def test_undocumented(client):
|
|||||||
client.fetch_unseen()
|
client.fetch_unseen()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip(reason="need a way to get an image id")
|
|
||||||
def test_fetch_image_url(client):
|
|
||||||
client.fetch_image_url("TODO")
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def open_resource(pytestconfig):
|
def open_resource(pytestconfig):
|
||||||
def get_resource_inner(filename):
|
def get_resource_inner(filename):
|
||||||
@@ -60,6 +55,14 @@ def open_resource(pytestconfig):
|
|||||||
return get_resource_inner
|
return get_resource_inner
|
||||||
|
|
||||||
|
|
||||||
|
def test_upload_and_fetch_image_url(client, open_resource):
|
||||||
|
with open_resource("image.png") as f:
|
||||||
|
((id, mimetype),) = client.upload([("image.png", f, "image/png")])
|
||||||
|
assert mimetype == "image/png"
|
||||||
|
|
||||||
|
assert client.fetch_image_url(id).startswith("http")
|
||||||
|
|
||||||
|
|
||||||
def test_upload_image(client, open_resource):
|
def test_upload_image(client, open_resource):
|
||||||
with open_resource("image.png") as f:
|
with open_resource("image.png") as f:
|
||||||
_ = client.upload([("image.png", f, "image/png")])
|
_ = client.upload([("image.png", f, "image/png")])
|
||||||
|
@@ -68,6 +68,17 @@ def test_get_jsmods_require():
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_jsmods_require_version_specifier():
|
||||||
|
data = [
|
||||||
|
["DimensionTracking@1234"],
|
||||||
|
["CavalryLoggerImpl@2345", "startInstrumentation", [], []],
|
||||||
|
]
|
||||||
|
assert get_jsmods_require(data) == {
|
||||||
|
"DimensionTracking": [],
|
||||||
|
"CavalryLoggerImpl.startInstrumentation": [],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_get_jsmods_require_get_image_url():
|
def test_get_jsmods_require_get_image_url():
|
||||||
data = [
|
data = [
|
||||||
[
|
[
|
||||||
|
Reference in New Issue
Block a user