Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
348beec
implementing email_addresses_add method
jonesbrennan Sep 15, 2022
efa88e2
implementing email_addresses_add method
jonesbrennan Sep 15, 2022
9d70288
updating README for implementation of email_addresses_add method
jonesbrennan Sep 19, 2022
59de30b
implementing names_add method
jonesbrennan Sep 19, 2022
24caef5
implementing email_addresses_add method
jonesbrennan Sep 19, 2022
f889830
implementing copeople_add and copeople_delete methods
jonesbrennan Sep 19, 2022
adb331a
implementing identifiers_add method
jonesbrennan Sep 19, 2022
b38fd05
implementing org_identities_add method
jonesbrennan Sep 19, 2022
e8cf7e4
implementing org_identities_delete method
jonesbrennan Sep 19, 2022
77f05fc
implementing coorg_identity_links_add method
jonesbrennan Sep 20, 2022
546d0a6
updating README for email_addresses_add method
jonesbrennan Sep 20, 2022
b138a6c
fixing syntax for identifiers_add example method
jonesbrennan Sep 20, 2022
faec32b
implementing names_add method
jonesbrennan Sep 20, 2022
cfbff48
implementing coorg_identity_links_add method
jonesbrennan Sep 20, 2022
410c52a
Merge pull request #1 from jonesbrennan/email_addresses
jonesbrennan Sep 20, 2022
3306958
Merge pull request #2 from jonesbrennan/copeople
jonesbrennan Sep 20, 2022
74faa06
Merge pull request #3 from jonesbrennan/identifiers
jonesbrennan Sep 20, 2022
9dc6ef4
Merge pull request #4 from jonesbrennan/names
jonesbrennan Sep 20, 2022
b3c3c1a
Merge pull request #5 from jonesbrennan/orgidentities
jonesbrennan Sep 20, 2022
8336afd
Merge pull request #6 from jonesbrennan/orgidentitylinks
jonesbrennan Sep 20, 2022
611f7e1
changing indentifier_id to identifier for org_identities_view_per_ide…
jonesbrennan Sep 21, 2022
d27cfba
adding cogroup api with cogroup_view_per_co method implemented
jonesbrennan Sep 27, 2022
e32e9bb
adding cogroup api with cogroup_view_per_co method implemented
jonesbrennan Sep 27, 2022
1c7eddb
adding CoGroup to README table of contents
jonesbrennan Sep 27, 2022
c06135a
adding CoGroup to examples README table of contents
jonesbrennan Sep 27, 2022
1e511b0
Merge pull request #7 from jonesbrennan/groups
jonesbrennan Sep 27, 2022
8ce4735
adding cogroupmember api
jonesbrennan Oct 3, 2022
ac6b8bb
fixing cogroup_example in examples README
jonesbrennan Oct 3, 2022
d2d1ba7
Merge pull request #8 from jonesbrennan/groups
jonesbrennan Oct 3, 2022
b9fbe5c
Merge branch 'main' into groupmembers
jonesbrennan Oct 3, 2022
a36e151
Revert "Merge branch 'main' into groupmembers"
jonesbrennan Oct 3, 2022
f6757d9
fixing up return statements in cogroupmember.py
jonesbrennan Oct 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Available at PyPi: [https://pypi.org/project/fabric-comanage-api/](https://pypi.

- [TL;DR](#tldr)
- [API endpoints](#endpoints)
- [CoGroupMember](#cogroupmember)
- [CoOrgIdentityLink](#coorgidentitylinks)
- [CoPerson](#coperson)
- [CoPersonRole](#copersonrole)
Expand Down Expand Up @@ -120,6 +121,24 @@ Return types based on implementation status of wrapped API endpoints
- `-> dict`: raise exception (`HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local`)
- `-> bool`: raise exception (`HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local`)

### <a name="cogroupmember"></a>[CoGroupMember API](https://spaces.at.internet2.edu/display/COmanage/CoGroupMember+API) (COmanage v4.0.0+)
- `cogroupmember_add(group_id: int, person_id: int) -> dict`
- Add a new CoGroupMember (ie: a member of a CO group).
- `cogroupmember_delete() -> bool`
- `### NOT IMPLEMENTED ###`
- Remove a CoGroupMember.
- `cogroupmember_edit() -> bool`
- `### NOT IMPLEMENTED ###`
- Edit an existing CoGroupMember.
- `cogroupmember_view_all() -> dict`
- `### NOT IMPLEMENTED ###`
- Retrieve all existing CoGroupMembers.
- `cogroupmember_view_per_group(group_id: int) -> dict`
- Retrieve CoGroupMembers attached to a CoGroup.
- `cogroupmember_view_one() -> dict`
- `### NOT IMPLEMENTED ###`
- Retrieve an existing CoGroupMember.

### <a name="coorgidentitylink"></a>[CoOrgIdentityLink API](https://spaces.at.internet2.edu/display/COmanage/CoOrgIdentityLink+API) (COmanage v4.0.0+)

- `coorg_identity_links_add() -> dict`
Expand Down
21 changes: 21 additions & 0 deletions comanage_api/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import requests_mock
from requests import Session

from ._cogroupmember import cogroupmember_add, cogroupmember_delete, cogroupmember_edit, \
cogroupmember_view_all, cogroupmember_view_per_group, cogroupmember_view_one
from ._coorgidentitylinks import coorg_identity_links_add, coorg_identity_links_delete, coorg_identity_links_edit, \
coorg_identity_links_view_all, coorg_identity_links_view_by_identity, coorg_identity_links_view_one
from ._copeople import copeople_add, copeople_delete, copeople_edit, copeople_find, copeople_match, \
Expand Down Expand Up @@ -92,6 +94,25 @@ def __init__(self, co_api_url: str, co_api_user: str, co_api_pass: str, co_api_o
self._s.headers = {'Content-Type': 'application/json'}
self._s.auth = (self._CO_API_USER, self._CO_API_PASS)

# CoGroupMember API
def cogroupmember_add(self, group_id: int, person_id: int):
return cogroupmember_add(self, group_id=group_id, person_id=person_id)

def cogroupmember_delete(self):
return cogroupmember_delete(self)

def cogroupmember_edit(self):
return cogroupmember_edit(self)

def cogroupmember_view_all(self):
return cogroupmember_view_all(self)

def cogroupmember_view_per_group(self, group_id: int):
return cogroupmember_view_per_group(self, group_id=group_id)

def cogroupmember_view_one(self):
return cogroupmember_view_one(self)

# CoOrgIdentityLink API
def coorg_identity_links_add(self):
return coorg_identity_links_add(self)
Expand Down
222 changes: 222 additions & 0 deletions comanage_api/_cogroupmember.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
# comanage_api/_cogroupmember.py

"""
CoGroupMember API - https://spaces.at.internet2.edu/display/COmanage/CoGroupMember+API

Methods
-------
cogroupmember_add(group_id: int, person_id: int) -> dict
Add a new CoGroupMember (ie: a member of a CO group).
cogroupmember_delete() -> bool
### NOT IMPLEMENTED ###
Remove a CoGroupMember.
cogroupmember_edit() -> bool
### NOT IMPLEMENTED ###
Edit an existing CoGroupMember.
cogroupmember_view_all() -> dict
### NOT IMPLEMENTED ###
Retrieve all existing CoGroupMembers.
cogroupmember_view_per_group(group_id: int) -> dict
Retrieve CoGroupMembers attached to a CoGroup.
cogroupmember_view_one() -> dict
### NOT IMPLEMENTED ###
Retrieve an existing CoGroupMember.
"""

import json


def cogroupmember_add(self, group_id: int, person_id: int) -> dict:
"""
Add a new CoGroupMember (ie: a member of a CO group).
group_id: COmanage COGroup Id
person_id: COmanage COPerson Id
:request
{
"RequestType":"CoGroupMembers",
"Version":"1.0",
"CoGroupMembers":
[
{
"Version":"1.0",
"CoGroupId":"<CoGroupId>",
"Person":
{
"Type":"CO",
"Id":"<ID>"
},
"Member":true|false,
"Owner":true|false,
"ValidFrom":"<ValidFrom>",
"ValidThrough":"<ValidThrough>"
}
]
}:
Response Format
HTTP Status Response Body Description
201 Added NewObjectResponse CoGroupMember added
400 Bad Request CoGroupMember Request not
provided in POST body
400 Invalid Fields ErrorResponse An error in one or more
provided fields
401 Unauthorized Authentication required
403 CoGroup Does Not Exist The specified CoGroup does not exist
403 CoPerson Does Not Exist The specified CoPerson does not exist
403 CoPerson Already Member The specified CoPerson is already a
member of the specified CoGroup
500 Other Error Unknown error
"""

post_body = {
"RequestType":"CoGroupMembers",
"Version":"1.0",
"CoGroupMembers":
[
{
"Version":"1.0",
"CoGroupId":"<CoGroupId>",
"Person":
{
"Type":"CO",
"Id":"<ID>"
},
"Member":True,
"Owner":False
}
]
}

post_body['CoGroupMembers'][0]['CoGroupId'] = group_id
post_body['CoGroupMembers'][0]['Person']['Id'] = person_id

post_body = json.dumps(post_body)
url = self._CO_API_URL + '/co_group_members.json'
resp = self._s.post(
url=url,
data=post_body
)
if resp.status_code == 201:
return json.loads(resp.text)
else:
resp.raise_for_status()


def cogroupmember_delete(self) -> bool:
"""
### NOT IMPLEMENTED ###
Remove a CoGroupMember.

:param self:
:return
501 Server Error: Not Implemented for url: mock://not_implemented_501.local:
"""
url = self._MOCK_501_URL
resp = self._mock_session.get(
url=url
)
if resp.status_code == 200:
return True
else:
resp.raise_for_status()


def cogroupmember_edit(self) -> bool:
"""
### NOT IMPLEMENTED ###
Edit an existing CoGroupMember.

:param self:
:return
501 Server Error: Not Implemented for url: mock://not_implemented_501.local:
"""
url = self._MOCK_501_URL
resp = self._mock_session.get(
url=url
)
if resp.status_code == 200:
return True
else:
resp.raise_for_status()


def cogroupmember_view_all(self) -> dict:
"""
### NOT IMPLEMENTED ###
Retrieve all existing CoGroupMembers.

:param self:
:return
501 Server Error: Not Implemented for url: mock://not_implemented_501.local:
"""
url = self._MOCK_501_URL
resp = self._mock_session.get(
url=url
)
if resp.status_code == 200:
return json.loads(resp.text)
else:
resp.raise_for_status()


def cogroupmember_view_per_group(self, group_id: int) -> dict:
"""
Retrieve CoGroupMembers attached to a CoGroup.
group_id: COmanage COGroup Id
:request
{
"RequestType":"CoGroupMembers",
"Version":"1.0",
"CoGroupMembers":
[
{
"Version":"1.0",
"CoGroupId":"<CoGroupId>",
"Person":
{
"Type":"CO",
"Id":"<ID>"
},
"Member":true|false,
"Owner":true|false,
"ValidFrom":"<ValidFrom>",
"ValidThrough":"<ValidThrough>"
}
]
}:
Response Format
HTTP Status Response Body Description
200 OK CoGroupMemberResponse CoGroupMember returned
401 Unauthorized Authentication required
403 CoGroup Unknown id not found
500 Other Error Unknown error
"""

url = self._CO_API_URL + '/co_group_members.json'
params = {'cogroupid': group_id}
resp = self._s.get(
url=url,
params=params
)
if resp.status_code == 200:
return json.loads(resp.text)
else:
resp.raise_for_status()


def cogroupmember_view_one(self) -> dict:
"""
### NOT IMPLEMENTED ###
Retrieve an existing CoGroupMember.

:param self:
:return
501 Server Error: Not Implemented for url: mock://not_implemented_501.local:
"""
url = self._MOCK_501_URL
resp = self._mock_session.get(
url=url
)
if resp.status_code == 200:
return json.loads(resp.text)
else:
resp.raise_for_status()
28 changes: 28 additions & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Examples demonstrating basic usage for each wrapped endpoint. Some of the values
## Table of Contents

- [Configuration](#config) `__init__.py` used by all examples
- [CoGroupMember API](#cogroupmember) example output
- [CoOrgIdentityLink API](#coorgidentitylink) example output
- [CoPerson API](#coperson) example output
- [CoPersonRole API](#copersonrole) example output
Expand Down Expand Up @@ -61,6 +62,33 @@ api = ComanageApi(
)
```

## <a name="cogroupmember"></a>CoGroupMember API

Example: `cogroupmember_example.py`

```console
$ python examples/cogroupmember_example.py
### cogroupmember_add
[ERROR] Exception caught
--> HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local
### cogroupmember_delete
[ERROR] Exception caught
--> HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local
### cogroupmember_edit
[ERROR] Exception caught
--> HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local
### cogroupmember_view_all
[ERROR] Exception caught
--> HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local
### cogroupmember_view_per_group
[ERROR] Exception caught
--> HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local
### cogroupmember_view_one
[ERROR] Exception caught
--> HTTPError - 501 Server Error: Not Implemented for url: mock://not_implemented_501.local

```

## <a name="coorgidentitylink"></a>CoOrgIdentityLink API

Example: `co_org_identity_links_example.py`
Expand Down
Loading