Managedblockchain member additions (#2983)
* Added some member and proposal functions * Added additional member and proposal functions * Fixed admin password return and added update_member along with tests * Added network removal and member removal proposal * Fixed failing test * Fixed Python 2.7 test
This commit is contained in:
parent
774a764b69
commit
9bc393801f
12 changed files with 2638 additions and 74 deletions
|
|
@ -8,6 +8,9 @@ from .models import managedblockchain_backends
|
|||
from .utils import (
|
||||
region_from_managedblckchain_url,
|
||||
networkid_from_managedblockchain_url,
|
||||
proposalid_from_managedblockchain_url,
|
||||
invitationid_from_managedblockchain_url,
|
||||
memberid_from_managedblockchain_url,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -66,7 +69,7 @@ class ManagedBlockchainResponse(BaseResponse):
|
|||
member_configuration,
|
||||
description,
|
||||
)
|
||||
return 201, headers, json.dumps(response)
|
||||
return 200, headers, json.dumps(response)
|
||||
|
||||
@classmethod
|
||||
def networkid_response(clazz, request, full_url, headers):
|
||||
|
|
@ -88,3 +91,236 @@ class ManagedBlockchainResponse(BaseResponse):
|
|||
response = json.dumps({"Network": mbcnetwork.get_format()})
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
@classmethod
|
||||
def proposal_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_managedblckchain_url(full_url)
|
||||
response_instance = ManagedBlockchainResponse(
|
||||
managedblockchain_backends[region_name]
|
||||
)
|
||||
return response_instance._proposal_response(request, full_url, headers)
|
||||
|
||||
def _proposal_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if hasattr(request, "body"):
|
||||
body = request.body
|
||||
else:
|
||||
body = request.data
|
||||
parsed_url = urlparse(full_url)
|
||||
querystring = parse_qs(parsed_url.query, keep_blank_values=True)
|
||||
network_id = networkid_from_managedblockchain_url(full_url)
|
||||
if method == "GET":
|
||||
return self._all_proposals_response(network_id, headers)
|
||||
elif method == "POST":
|
||||
json_body = json.loads(body.decode("utf-8"))
|
||||
return self._proposal_response_post(
|
||||
network_id, json_body, querystring, headers
|
||||
)
|
||||
|
||||
def _all_proposals_response(self, network_id, headers):
|
||||
proposals = self.backend.list_proposals(network_id)
|
||||
response = json.dumps(
|
||||
{"Proposals": [proposal.to_dict() for proposal in proposals]}
|
||||
)
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
def _proposal_response_post(self, network_id, json_body, querystring, headers):
|
||||
memberid = json_body["MemberId"]
|
||||
actions = json_body["Actions"]
|
||||
|
||||
# Optional
|
||||
description = json_body.get("Description", None)
|
||||
|
||||
response = self.backend.create_proposal(
|
||||
network_id, memberid, actions, description,
|
||||
)
|
||||
return 200, headers, json.dumps(response)
|
||||
|
||||
@classmethod
|
||||
def proposalid_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_managedblckchain_url(full_url)
|
||||
response_instance = ManagedBlockchainResponse(
|
||||
managedblockchain_backends[region_name]
|
||||
)
|
||||
return response_instance._proposalid_response(request, full_url, headers)
|
||||
|
||||
def _proposalid_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
network_id = networkid_from_managedblockchain_url(full_url)
|
||||
if method == "GET":
|
||||
proposal_id = proposalid_from_managedblockchain_url(full_url)
|
||||
return self._proposalid_response_get(network_id, proposal_id, headers)
|
||||
|
||||
def _proposalid_response_get(self, network_id, proposal_id, headers):
|
||||
proposal = self.backend.get_proposal(network_id, proposal_id)
|
||||
response = json.dumps({"Proposal": proposal.get_format()})
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
@classmethod
|
||||
def proposal_votes_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_managedblckchain_url(full_url)
|
||||
response_instance = ManagedBlockchainResponse(
|
||||
managedblockchain_backends[region_name]
|
||||
)
|
||||
return response_instance._proposal_votes_response(request, full_url, headers)
|
||||
|
||||
def _proposal_votes_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if hasattr(request, "body"):
|
||||
body = request.body
|
||||
else:
|
||||
body = request.data
|
||||
parsed_url = urlparse(full_url)
|
||||
querystring = parse_qs(parsed_url.query, keep_blank_values=True)
|
||||
network_id = networkid_from_managedblockchain_url(full_url)
|
||||
proposal_id = proposalid_from_managedblockchain_url(full_url)
|
||||
if method == "GET":
|
||||
return self._all_proposal_votes_response(network_id, proposal_id, headers)
|
||||
elif method == "POST":
|
||||
json_body = json.loads(body.decode("utf-8"))
|
||||
return self._proposal_votes_response_post(
|
||||
network_id, proposal_id, json_body, querystring, headers
|
||||
)
|
||||
|
||||
def _all_proposal_votes_response(self, network_id, proposal_id, headers):
|
||||
proposalvotes = self.backend.list_proposal_votes(network_id, proposal_id)
|
||||
response = json.dumps({"ProposalVotes": proposalvotes})
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
def _proposal_votes_response_post(
|
||||
self, network_id, proposal_id, json_body, querystring, headers
|
||||
):
|
||||
votermemberid = json_body["VoterMemberId"]
|
||||
vote = json_body["Vote"]
|
||||
|
||||
self.backend.vote_on_proposal(
|
||||
network_id, proposal_id, votermemberid, vote,
|
||||
)
|
||||
return 200, headers, ""
|
||||
|
||||
@classmethod
|
||||
def invitation_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_managedblckchain_url(full_url)
|
||||
response_instance = ManagedBlockchainResponse(
|
||||
managedblockchain_backends[region_name]
|
||||
)
|
||||
return response_instance._invitation_response(request, full_url, headers)
|
||||
|
||||
def _invitation_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if method == "GET":
|
||||
return self._all_invitation_response(request, full_url, headers)
|
||||
|
||||
def _all_invitation_response(self, request, full_url, headers):
|
||||
invitations = self.backend.list_invitations()
|
||||
response = json.dumps(
|
||||
{"Invitations": [invitation.to_dict() for invitation in invitations]}
|
||||
)
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
@classmethod
|
||||
def invitationid_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_managedblckchain_url(full_url)
|
||||
response_instance = ManagedBlockchainResponse(
|
||||
managedblockchain_backends[region_name]
|
||||
)
|
||||
return response_instance._invitationid_response(request, full_url, headers)
|
||||
|
||||
def _invitationid_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if method == "DELETE":
|
||||
invitation_id = invitationid_from_managedblockchain_url(full_url)
|
||||
return self._invitationid_response_delete(invitation_id, headers)
|
||||
|
||||
def _invitationid_response_delete(self, invitation_id, headers):
|
||||
self.backend.reject_invitation(invitation_id)
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, ""
|
||||
|
||||
@classmethod
|
||||
def member_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_managedblckchain_url(full_url)
|
||||
response_instance = ManagedBlockchainResponse(
|
||||
managedblockchain_backends[region_name]
|
||||
)
|
||||
return response_instance._member_response(request, full_url, headers)
|
||||
|
||||
def _member_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if hasattr(request, "body"):
|
||||
body = request.body
|
||||
else:
|
||||
body = request.data
|
||||
parsed_url = urlparse(full_url)
|
||||
querystring = parse_qs(parsed_url.query, keep_blank_values=True)
|
||||
network_id = networkid_from_managedblockchain_url(full_url)
|
||||
if method == "GET":
|
||||
return self._all_members_response(network_id, headers)
|
||||
elif method == "POST":
|
||||
json_body = json.loads(body.decode("utf-8"))
|
||||
return self._member_response_post(
|
||||
network_id, json_body, querystring, headers
|
||||
)
|
||||
|
||||
def _all_members_response(self, network_id, headers):
|
||||
members = self.backend.list_members(network_id)
|
||||
response = json.dumps({"Members": [member.to_dict() for member in members]})
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
def _member_response_post(self, network_id, json_body, querystring, headers):
|
||||
invitationid = json_body["InvitationId"]
|
||||
member_configuration = json_body["MemberConfiguration"]
|
||||
|
||||
response = self.backend.create_member(
|
||||
invitationid, network_id, member_configuration,
|
||||
)
|
||||
return 200, headers, json.dumps(response)
|
||||
|
||||
@classmethod
|
||||
def memberid_response(clazz, request, full_url, headers):
|
||||
region_name = region_from_managedblckchain_url(full_url)
|
||||
response_instance = ManagedBlockchainResponse(
|
||||
managedblockchain_backends[region_name]
|
||||
)
|
||||
return response_instance._memberid_response(request, full_url, headers)
|
||||
|
||||
def _memberid_response(self, request, full_url, headers):
|
||||
method = request.method
|
||||
if hasattr(request, "body"):
|
||||
body = request.body
|
||||
else:
|
||||
body = request.data
|
||||
network_id = networkid_from_managedblockchain_url(full_url)
|
||||
member_id = memberid_from_managedblockchain_url(full_url)
|
||||
if method == "GET":
|
||||
return self._memberid_response_get(network_id, member_id, headers)
|
||||
elif method == "PATCH":
|
||||
json_body = json.loads(body.decode("utf-8"))
|
||||
return self._memberid_response_patch(
|
||||
network_id, member_id, json_body, headers
|
||||
)
|
||||
elif method == "DELETE":
|
||||
return self._memberid_response_delete(network_id, member_id, headers)
|
||||
|
||||
def _memberid_response_get(self, network_id, member_id, headers):
|
||||
member = self.backend.get_member(network_id, member_id)
|
||||
response = json.dumps({"Member": member.get_format()})
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, response
|
||||
|
||||
def _memberid_response_patch(self, network_id, member_id, json_body, headers):
|
||||
logpublishingconfiguration = json_body["LogPublishingConfiguration"]
|
||||
self.backend.update_member(
|
||||
network_id, member_id, logpublishingconfiguration,
|
||||
)
|
||||
return 200, headers, ""
|
||||
|
||||
def _memberid_response_delete(self, network_id, member_id, headers):
|
||||
self.backend.delete_member(network_id, member_id)
|
||||
headers["content-type"] = "application/json"
|
||||
return 200, headers, ""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue