Skip to content

Commit

Permalink
Add network API endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
cachitas committed Mar 31, 2024
1 parent 5a2c3f2 commit 4048fb7
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/stringx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ def map_identifiers(identifiers: List[str], species: int):
return client.map_identifiers(identifiers=identifiers, species=species)


def network(identifiers: List[str], species: int):
with Client() as client:
return client.network(identifiers=identifiers, species=species)


def interaction_partners(identifiers: List[str], species: int):
with Client() as client:
return client.interaction_partners(identifiers=identifiers, species=species)
24 changes: 24 additions & 0 deletions src/stringx/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,30 @@ def map_identifiers(
}
return self.request("get_string_ids", params=params)

def network(
self,
identifiers: List[str],
species: int,
required_score: Optional[float] = None,
network_type: str = "functional",
add_nodes: Optional[int] = None,
show_query_node_labels: bool = False,
):
params = dict(
identifiers="\r".join(identifiers),
species=species,
network_type=network_type,
show_query_node_labels=int(show_query_node_labels),
)

if required_score:
params |= {"required_score": required_score}

if add_nodes:
params |= {"add_nodes": add_nodes}

return self.request("network", params=params)

def interaction_partners(
self,
identifiers: List[str],
Expand Down
45 changes: 45 additions & 0 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,51 @@ def test_map_identifiers(httpx_mock):
client.map_identifiers(["some_identifier"], 7227)


def test_network(httpx_mock):
httpx_mock.add_response(
url=httpx.URL(
"https://string-db.org/api/json/network",
params={
"identifiers": "id1",
"species": "7227",
"network_type": "functional",
"show_query_node_labels": 0,
"caller_identity": stringx.DEFAULT_CALLER_IDENTITY,
},
),
method="POST",
json=True,
)

httpx_mock.add_response(
url=httpx.URL(
"https://string-db.org/api/json/network",
params={
"identifiers": "id1\rid2",
"species": "7227",
"required_score": 1,
"network_type": "physical",
"add_nodes": 2,
"show_query_node_labels": 1,
"caller_identity": stringx.DEFAULT_CALLER_IDENTITY,
},
),
method="POST",
json=True,
)

with stringx.Client() as client:
client.network(["id1"], 7227)
client.network(
identifiers=["id1", "id2"],
species=7227,
required_score=1,
network_type="physical",
add_nodes=2,
show_query_node_labels=True,
)


def test_interaction_partners(httpx_mock):
httpx_mock.add_response(
url=httpx.URL(
Expand Down
22 changes: 22 additions & 0 deletions tests/test_stringx.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,28 @@ def test_map_identifiers():
assert "annotation" in keys


def test_network():
network = stringx.network(["edin", "atta", "attc"], 7227)

assert len(network) == 3

for id_ in network:
keys = id_.keys()
assert "stringId_A" in keys
assert "stringId_B" in keys
assert "preferredName_A" in keys
assert "preferredName_B" in keys
assert "ncbiTaxonId" in keys
assert "score" in keys
assert "nscore" in keys
assert "fscore" in keys
assert "pscore" in keys
assert "ascore" in keys
assert "escore" in keys
assert "dscore" in keys
assert "tscore" in keys


def test_interaction_partners():
interaction_partners = stringx.interaction_partners(["edin"], 7227)

Expand Down

0 comments on commit 4048fb7

Please sign in to comment.