From a4e9fc2787609e6986784b1a5632766a1854b5af Mon Sep 17 00:00:00 2001 From: ThiefOfTime <jan-marius.lenk@cs.tu-dortmund.de> Date: Sun, 11 Oct 2020 14:00:00 +0000 Subject: [PATCH] Added support for changing the alias to the wrapper module Needed for briar-gtk#14 Closes #6 --- briar_wrapper/models/contacts.py | 25 +++++++++++++++------ tests/briar_wrapper/models/test_contacts.py | 15 +++++++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/briar_wrapper/models/contacts.py b/briar_wrapper/models/contacts.py index 152df59..63005d5 100644 --- a/briar_wrapper/models/contacts.py +++ b/briar_wrapper/models/contacts.py @@ -6,6 +6,7 @@ Wrapper around Briar API's _/contacts/_ resource """ from operator import itemgetter +from typing import Callable, List from urllib.parse import urljoin from requests import delete as _delete @@ -23,7 +24,7 @@ class Contacts(Model): _connections_callback = None - def add_pending(self, link, alias): + def add_pending(self, link: str, alias: str) -> None: # pylint: disable=line-too-long """ @@ -36,7 +37,17 @@ class Contacts(Model): url = urljoin(BASE_HTTP_URL, self._API_ENDPOINT + "add/pending/") _post(url, headers=self._headers, json={"link": link, "alias": alias}) - def delete(self, contact_id): + def set_alias(self, contact_id: int, alias: str) -> None: + """ + Sets the alias of a given user + + [Upstream documentation](https://code.briarproject.org/briar/briar/-/blob/main/briar-headless/README.md#changing-alias-of-a-contact) + + """ + url = urljoin(BASE_HTTP_URL, self._API_ENDPOINT + str(contact_id) + alias) + _post(url, headers=self._headers, json={"alias": alias}) + + def delete(self, contact_id: int) -> None: # pylint: disable=line-too-long """ @@ -49,7 +60,7 @@ class Contacts(Model): url = urljoin(BASE_HTTP_URL, self._API_ENDPOINT + str(contact_id)) _delete(url, headers=self._headers) - def get(self): + def get(self) -> list: # pylint: disable=line-too-long """ Returns sorted list containing all contacts @@ -65,7 +76,7 @@ class Contacts(Model): contacts = Contacts._sort_contact_list(contacts) return contacts - def get_link(self): + def get_link(self) -> str: # pylint: disable=line-too-long """ Returns _briar://_ link @@ -78,7 +89,7 @@ class Contacts(Model): request = _get(url, headers=self._headers).json() return request['link'] - def watch_connections(self, callback): + def watch_connections(self, callback: Callable) -> List[int]: # pylint: disable=line-too-long """ Calls `callback` whenever a contact's connection status changes @@ -96,7 +107,7 @@ class Contacts(Model): signal_ids.append(signal_id) return signal_ids - def handle_connections_callback(self, message): + def handle_connections_callback(self, message: str) -> None: contact_id = message["data"]["contactId"] if message["name"] == "ContactConnectedEvent": self._connections_callback(contact_id, True) @@ -106,7 +117,7 @@ class Contacts(Model): raise Exception(f"Wrong event in callback: {message['name']}") @staticmethod - def _sort_contact_list(contacts): + def _sort_contact_list(contacts: list) -> list: contacts.sort(key=itemgetter("lastChatActivity"), reverse=True) return contacts diff --git a/tests/briar_wrapper/models/test_contacts.py b/tests/briar_wrapper/models/test_contacts.py index 885f46c..0794513 100644 --- a/tests/briar_wrapper/models/test_contacts.py +++ b/tests/briar_wrapper/models/test_contacts.py @@ -50,6 +50,21 @@ def match_request_add_pending(request): return {"alias": TEST_ALIAS, "link": TEST_LINK} == request.json() +@requests_mock.Mocker(kw="requests_mock") +def test_set_alias(api, request_headers, requests_mock): + contacts = Contacts(api) + contact_id = 137 + requests_mock.register_uri("POST", + BASE_HTTP_URL + f"/{contact_id}/alias", + request_headers=request_headers, + additional_matcher=match_request_add_pending) + contacts.add_pending(contact_id, TEST_ALIAS) + + +def match_request_set_alias(request): + return {"alias": TEST_ALIAS} == request.json() + + @requests_mock.Mocker(kw="requests_mock") def test_delete(api, request_headers, requests_mock): contacts = Contacts(api) -- GitLab