def propose_manager_change(proposal_state_entries, header, user_proposal, state): proposal_address = addresser.make_proposal_address( user_proposal.user_id, user_proposal.new_manager_id) try: state_entry = state_accessor.get_state_entry(proposal_state_entries, proposal_address) proposal_container = message_accessor.get_prop_container(state_entry) except KeyError: proposal_container = proposal_state_pb2.ProposalsContainer() proposal = proposal_container.proposals.add() proposal.proposal_id = user_proposal.proposal_id proposal.proposal_type = proposal_state_pb2.Proposal.UPDATE_USER_MANAGER proposal.object_id = user_proposal.user_id proposal.target_id = user_proposal.new_manager_id proposal.opener = header.signer_public_key proposal.status = proposal_state_pb2.Proposal.OPEN proposal.open_reason = user_proposal.reason proposal.metadata = user_proposal.metadata state_accessor.set_state( state, {proposal_address: proposal_container.SerializeToString()})
def propose_role_action( state_entries, header, payload, address, proposal_type, state, related_type="user_id", ): try: entry = state_accessor.get_state_entry(state_entries, address=address) proposal_container = message_accessor.get_prop_container(entry) except KeyError: proposal_container = proposal_state_pb2.ProposalsContainer() proposal = proposal_container.proposals.add() proposal.proposal_id = payload.proposal_id proposal.object_id = payload.role_id proposal.target_id = getattr(payload, related_type) proposal.proposal_type = proposal_type proposal.status = proposal_state_pb2.Proposal.OPEN proposal.opener = header.signer_public_key proposal.open_reason = payload.reason proposal.metadata = payload.metadata state_accessor.set_state(state, {address: proposal_container.SerializeToString()})
def test_state(self): """Grab the entire blockchain state and deserialize it""" subtree = addresser.family.namespace for item in client.list_state(subtree=subtree)["data"]: address_type = item["address_type"] = addresser.address_is( item["address"]) if address_type == addresser.AddressSpace.USER: content = user_state_pb2.UserContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.PROPOSALS: content = proposal_state_pb2.ProposalsContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.SYSADMIN_ATTRIBUTES: content = "SYSADMIN_ATTRIBUTES" elif address_type == addresser.AddressSpace.SYSADMIN_MEMBERS: content = "SYSADMIN_MEMBERS" elif address_type == addresser.AddressSpace.SYSADMIN_OWNERS: content = "SYSADMIN_OWNERS" elif address_type == addresser.AddressSpace.SYSADMIN_ADMINS: content = "SYSADMIN_ADMINS" elif address_type == addresser.AddressSpace.ROLES_ATTRIBUTES: content = role_state_pb2.RoleAttributesContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.ROLES_MEMBERS: content = role_state_pb2.RoleRelationshipContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.ROLES_OWNERS: content = role_state_pb2.RoleRelationshipContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.ROLES_ADMINS: content = role_state_pb2.RoleRelationshipContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.ROLES_TASKS: content = role_state_pb2.RoleRelationshipContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.TASKS_ATTRIBUTES: content = task_state_pb2.TaskAttributesContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.TASKS_OWNERS: content = task_state_pb2.TaskRelationshipContainer() content.ParseFromString(b64decode(item["data"])) elif address_type == addresser.AddressSpace.TASKS_ADMINS: content = task_state_pb2.TaskRelationshipContainer() content.ParseFromString(b64decode(item["data"])) else: content = "ERROR: unknown type: {}".format(address_type) LOGGER.debug("%-80s%-30s%s", item["address"], address_type, content)