Example #1
0
def apply_propose(header, payload, state):
    role_admins_payload = role_transaction_pb2.ProposeAddRoleAdmin()
    role_admins_payload.ParseFromString(payload.content)

    role_admins_address = addresser.make_role_admins_address(
        role_id=role_admins_payload.role_id,
        user_id=role_admins_payload.user_id)

    proposal_address = addresser.make_proposal_address(
        object_id=role_admins_payload.role_id,
        related_id=role_admins_payload.user_id)

    state_entries = role_validator.validate_role_rel_proposal(
        header, role_admins_payload, role_admins_address, state)

    if not proposal_validator.has_no_open_proposal(
            state_entries=state_entries,
            object_id=role_admins_payload.role_id,
            related_id=role_admins_payload.user_id,
            proposal_address=proposal_address,
            proposal_type=proposal_state_pb2.Proposal.ADD_ROLE_ADMINS,
    ):
        raise InvalidTransaction(
            "There is already an open proposal for ADD_ROLE_ADMINS "
            "with role id {} and user id {}".format(
                role_admins_payload.role_id, role_admins_payload.user_id))

    state_change.propose_role_action(
        state_entries=state_entries,
        header=header,
        payload=role_admins_payload,
        address=proposal_address,
        proposal_type=proposal_state_pb2.Proposal.ADD_ROLE_ADMINS,
        state=state,
    )
def apply_propose_remove(header, payload, state):
    proposal_payload = role_transaction_pb2.ProposeRemoveRoleMember()
    proposal_payload.ParseFromString(payload.content)

    role_owners_address = addresser.role.owner.address(
        proposal_payload.role_id, proposal_payload.user_id)

    proposal_address = addresser.proposal.address(
        object_id=proposal_payload.role_id, target_id=proposal_payload.user_id)

    state_entries = role_validator.validate_role_rel_proposal(
        header, proposal_payload, role_owners_address, state, True)

    if not proposal_validator.has_no_open_proposal(
            state_entries=state_entries,
            object_id=proposal_payload.role_id,
            related_id=proposal_payload.user_id,
            proposal_address=proposal_address,
            proposal_type=proposal_state_pb2.Proposal.REMOVE_ROLE_OWNERS,
    ):
        raise InvalidTransaction(
            "There is already an open proposal for REMOVE_ROLE_OWNERS "
            "with role id {} and user id {}".format(proposal_payload.role_id,
                                                    proposal_payload.user_id))

    state_change.propose_role_action(
        state_entries=state_entries,
        header=header,
        payload=proposal_payload,
        address=proposal_address,
        proposal_type=proposal_state_pb2.Proposal.REMOVE_ROLE_OWNERS,
        state=state,
    )
def apply_propose_remove(header, payload, state):
    propose = role_transaction_pb2.ProposeRemoveRoleTask()
    propose.ParseFromString(payload.content)

    state_entries = proposal_validator.validate_role_task_proposal(
        header, propose, state)

    proposal_address = addresser.proposal.address(propose.role_id,
                                                  propose.task_id)

    state_change.propose_role_action(
        state_entries=state_entries,
        header=header,
        payload=propose,
        address=proposal_address,
        proposal_type=proposal_state_pb2.Proposal.REMOVE_ROLE_TASK,
        state=state,
        related_type="task_id",
    )