From 60bb2c5077991d8a95aa03afe0fe819edc4cb77c Mon Sep 17 00:00:00 2001 From: Aravindh-Raju Date: Mon, 26 Jun 2023 15:17:00 +0530 Subject: [PATCH 1/3] add new api's --- README.md | 10 +++++----- src/vinyldns/client.py | 14 +++++++++++++- src/vinyldns/membership.py | 8 ++++++-- tests/test_membership.py | 19 +++++++++++++++++-- 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f3fed66..0219ff2 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,6 @@ Python client library for [VinylDNS](https://www.vinyldns.io/) -This project is a work in progress! If you would like to help us get this where it needs to be, -please reach out to us in [gitter](https://gitter.im/vinyldns/Lobby). - To run, `pip install vinyldns-python` and then: ```python @@ -66,7 +63,10 @@ read the [tox docs](https://tox.readthedocs.io/en/latest/index.html). ## Local Development See the [quickstart](https://github.com/vinyldns/vinyldns/blob/master/README.md#quickstart) in the VinylDNS api for details on how to start up a local instance of the api in docker. With that -running, you can make requests with the following client details: +running, create a file (ex: test.py) in `src` folder, from where you can make requests with the following client details: ```python -local_client = VinylDNSClient("http://localhost:9000", "okAccessKey", "okSecretKey") +from vinyldns.client import VinylDNSClient + +local_client = VinylDNSClient("http://localhost:9000", "UserAccessKey", "UserSecretKey") +local_client.list_zones() ``` diff --git a/src/vinyldns/client.py b/src/vinyldns/client.py index 88240af..138cf83 100644 --- a/src/vinyldns/client.py +++ b/src/vinyldns/client.py @@ -32,7 +32,7 @@ from vinyldns.boto_request_signer import BotoRequestSigner from vinyldns.batch_change import BatchChange, ListBatchChangeSummaries, to_review_json -from vinyldns.membership import Group, ListGroupsResponse, ListGroupChangesResponse, ListMembersResponse, \ +from vinyldns.membership import Group, ListGroupsResponse, GroupChange, ListGroupChangesResponse, ListMembersResponse, \ ListAdminsResponse from vinyldns.serdes import to_json_string from vinyldns.zone import ListZonesResponse, ListZoneChangesResponse, Zone, ZoneChange @@ -379,6 +379,18 @@ def list_group_changes(self, group_id, start_from=None, max_items=None, **kwargs response, data = self.__make_request(url, u'GET', self.headers, **kwargs) return ListGroupChangesResponse.from_dict(data) + + def get_group_change(self, group_change_id, **kwargs): + """ + Get a group change. + + :param group_change_id: Id of the group change to get + :return: the group change json + """ + url = urljoin(self.index_url, u'/groups/change/' + group_change_id) + response, data = self.__make_request(url, u'GET', self.headers, **kwargs) + + return GroupChange.from_dict(data) if data is not None else None def connect_zone(self, zone, **kwargs): """ diff --git a/src/vinyldns/membership.py b/src/vinyldns/membership.py index 67aa948..ad6ff84 100644 --- a/src/vinyldns/membership.py +++ b/src/vinyldns/membership.py @@ -90,13 +90,15 @@ def from_dict(d): class GroupChange(object): - def __init__(self, new_group, change_type, user_id, old_group, id, created): + def __init__(self, new_group, change_type, user_id, old_group, id, created, user_name, group_change_message): self.new_group = new_group self.change_type = change_type self.user_id = user_id self.old_group = old_group self.id = id self.created = created + self.user_name = user_name + self.group_change_message = group_change_message @staticmethod def from_dict(d): @@ -106,7 +108,9 @@ def from_dict(d): user_id=d['userId'], old_group=map_option(d.get('oldGroup'), Group.from_dict), id=d['id'], - created=map_option(d.get('created'), parse_datetime) + created=map_option(d.get('created'), parse_datetime), + user_name=d['userName'], + group_change_message=d['groupChangeMessage'] ) diff --git a/tests/test_membership.py b/tests/test_membership.py index 0950546..dd6a76c 100644 --- a/tests/test_membership.py +++ b/tests/test_membership.py @@ -147,8 +147,8 @@ def test_list_group_admins(mocked_responses, vinyldns_client): def test_list_group_changes(mocked_responses, vinyldns_client): - change1 = GroupChange(sample_group, 'Create', 'user', None, 'id', datetime.datetime.utcnow()) - change2 = GroupChange(sample_group2, 'Update', 'user', sample_group, 'id2', datetime.datetime.utcnow()) + change1 = GroupChange(sample_group, 'Create', 'user', None, 'id', datetime.datetime.utcnow(), 'test200', 'Group Created.') + change2 = GroupChange(sample_group2, 'Update', 'user', sample_group, 'id2', datetime.datetime.utcnow(), 'test200', 'Group name changed to \'ok2\'.') lgcr = ListGroupChangesResponse([change1, change2], 'start', 'next', 100) mocked_responses.add( responses.GET, 'http://test.com/groups/foo/activity?startFrom=start&maxItems=100', @@ -163,9 +163,24 @@ def test_list_group_changes(mocked_responses, vinyldns_client): assert l.user_id == r.user_id assert l.id == r.id assert l.created == r.created + assert l.user_name == r.user_name + assert l.group_change_message == r.group_change_message check_groups_are_same(l.new_group, r.new_group) check_groups_are_same(l.old_group, r.old_group) +def test_get_group_change(mocked_responses, vinyldns_client): + change = GroupChange(sample_group, 'Create', 'user', None, 'id', datetime.datetime.utcnow(), 'test200', 'Group Created.') + mocked_responses.add( + responses.GET, 'http://test.com/groups/change/123', + body=to_json_string(change), status=200) + r = vinyldns_client.get_group_change('123') + assert r.change_type == change.change_type + assert r.user_id == change.user_id + assert r.id == change.id + assert r.created == change.created + assert r.user_name == change.user_name + assert r.group_change_message == change.group_change_message + def test_group_serdes(): r = from_json_string(to_json_string(sample_group), Group.from_dict) From b424de8e052b4a264234cd5b5b45b965c928c9b8 Mon Sep 17 00:00:00 2001 From: Aravindh-Raju Date: Mon, 26 Jun 2023 16:11:43 +0530 Subject: [PATCH 2/3] fix linting --- src/vinyldns/client.py | 6 +++--- tests/test_membership.py | 12 ++++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/vinyldns/client.py b/src/vinyldns/client.py index 138cf83..fa7d806 100644 --- a/src/vinyldns/client.py +++ b/src/vinyldns/client.py @@ -32,8 +32,8 @@ from vinyldns.boto_request_signer import BotoRequestSigner from vinyldns.batch_change import BatchChange, ListBatchChangeSummaries, to_review_json -from vinyldns.membership import Group, ListGroupsResponse, GroupChange, ListGroupChangesResponse, ListMembersResponse, \ - ListAdminsResponse +from vinyldns.membership import Group, ListGroupsResponse, GroupChange, ListGroupChangesResponse, \ + ListMembersResponse, ListAdminsResponse from vinyldns.serdes import to_json_string from vinyldns.zone import ListZonesResponse, ListZoneChangesResponse, Zone, ZoneChange from vinyldns.record import ListRecordSetsResponse, ListRecordSetChangesResponse, RecordSet, RecordSetChange @@ -379,7 +379,7 @@ def list_group_changes(self, group_id, start_from=None, max_items=None, **kwargs response, data = self.__make_request(url, u'GET', self.headers, **kwargs) return ListGroupChangesResponse.from_dict(data) - + def get_group_change(self, group_change_id, **kwargs): """ Get a group change. diff --git a/tests/test_membership.py b/tests/test_membership.py index dd6a76c..d0d1a96 100644 --- a/tests/test_membership.py +++ b/tests/test_membership.py @@ -147,8 +147,10 @@ def test_list_group_admins(mocked_responses, vinyldns_client): def test_list_group_changes(mocked_responses, vinyldns_client): - change1 = GroupChange(sample_group, 'Create', 'user', None, 'id', datetime.datetime.utcnow(), 'test200', 'Group Created.') - change2 = GroupChange(sample_group2, 'Update', 'user', sample_group, 'id2', datetime.datetime.utcnow(), 'test200', 'Group name changed to \'ok2\'.') + change1 = GroupChange(sample_group, 'Create', 'user', None, 'id', datetime.datetime.utcnow(), 'test200', + 'Group Created.') + change2 = GroupChange(sample_group2, 'Update', 'user', sample_group, 'id2', datetime.datetime.utcnow(), + 'test200', 'Group name changed to \'ok2\'.') lgcr = ListGroupChangesResponse([change1, change2], 'start', 'next', 100) mocked_responses.add( responses.GET, 'http://test.com/groups/foo/activity?startFrom=start&maxItems=100', @@ -168,8 +170,10 @@ def test_list_group_changes(mocked_responses, vinyldns_client): check_groups_are_same(l.new_group, r.new_group) check_groups_are_same(l.old_group, r.old_group) + def test_get_group_change(mocked_responses, vinyldns_client): - change = GroupChange(sample_group, 'Create', 'user', None, 'id', datetime.datetime.utcnow(), 'test200', 'Group Created.') + change = GroupChange(sample_group, 'Create', 'user', None, 'id', datetime.datetime.utcnow(), + 'test200', 'Group Created.') mocked_responses.add( responses.GET, 'http://test.com/groups/change/123', body=to_json_string(change), status=200) @@ -180,7 +184,7 @@ def test_get_group_change(mocked_responses, vinyldns_client): assert r.created == change.created assert r.user_name == change.user_name assert r.group_change_message == change.group_change_message - + def test_group_serdes(): r = from_json_string(to_json_string(sample_group), Group.from_dict) From 9675c54d133397e6a3e07f067590654d1aa5d06a Mon Sep 17 00:00:00 2001 From: Aravindh-Raju Date: Mon, 25 Sep 2023 14:29:26 +0530 Subject: [PATCH 3/3] fix attribute datatype --- tests/test_membership.py | 6 +++--- tests/test_records.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_membership.py b/tests/test_membership.py index d0d1a96..02b48da 100644 --- a/tests/test_membership.py +++ b/tests/test_membership.py @@ -151,12 +151,12 @@ def test_list_group_changes(mocked_responses, vinyldns_client): 'Group Created.') change2 = GroupChange(sample_group2, 'Update', 'user', sample_group, 'id2', datetime.datetime.utcnow(), 'test200', 'Group name changed to \'ok2\'.') - lgcr = ListGroupChangesResponse([change1, change2], 'start', 'next', 100) + lgcr = ListGroupChangesResponse([change1, change2], 1, 3, 100) mocked_responses.add( - responses.GET, 'http://test.com/groups/foo/activity?startFrom=start&maxItems=100', + responses.GET, 'http://test.com/groups/foo/activity?startFrom=1&maxItems=100', body=to_json_string(lgcr), status=200 ) - r = vinyldns_client.list_group_changes('foo', 'start', 100) + r = vinyldns_client.list_group_changes('foo', 1, 100) assert r.next_id == lgcr.next_id assert r.start_from == lgcr.start_from assert r.max_items == lgcr.max_items diff --git a/tests/test_records.py b/tests/test_records.py index 5412c6f..cc8778f 100644 --- a/tests/test_records.py +++ b/tests/test_records.py @@ -148,11 +148,11 @@ def test_get_record_set_change(record_set, mocked_responses, vinyldns_client): def test_list_record_set_changes(mocked_responses, vinyldns_client): changes = [gen_rs_change(c) for c in record_set_values] - lrscr = ListRecordSetChangesResponse(forward_zone.id, changes, 'next', 'start', 100) + lrscr = ListRecordSetChangesResponse(forward_zone.id, changes, 1, 3, 100) mocked_responses.add(responses.GET, - 'http://test.com/zones/{0}/recordsetchanges?startFrom=start&maxItems=100'.format( + 'http://test.com/zones/{0}/recordsetchanges?startFrom=1&maxItems=100'.format( forward_zone.id), body=to_json_string(lrscr), status=200) - r = vinyldns_client.list_record_set_changes(forward_zone.id, 'start', 100) + r = vinyldns_client.list_record_set_changes(forward_zone.id, 1, 100) r.start_from = lrscr.start_from r.next_id = lrscr.next_id r.max_items = lrscr.max_items