Example #1
0
 def __init__(self, repo):
     self.request_dao = RequestDAO(repo=repo)
     self.vote_dao = VoteDAO(repo=repo)
     self.solution_dao = SolutionDAO(repo=repo)
     self.stake_dao = StakeDAO(repo=repo)
     self.foundation_member_dao = FoundationMemberDAO(repo=repo)
     self.rfai_request_dao = RFAIRequestRepository(repo=repo)
Example #2
0
class RFAIVoteRequestEventConsumer(RFAIEventConsumer):
    _connection = Repository(NETWORKS=NETWORK)
    _rfai_vote_repository = VoteDAO(_connection)
    _rfai_solution_repository = SolutionDAO(_connection)

    def __init__(self, net_id, ws_provider, ipfs_url, ipfs_port):
        super().__init__(net_id, ws_provider, ipfs_url, ipfs_port)

    def on_event(self, event):
        created_at_in_epoch = self._blockchain_util.get_created_at_for_block(
            block_no=event["data"]["block_no"]).get("timestamp", None)
        if created_at_in_epoch is not None:
            created_at = time.strftime('%Y-%m-%d %H:%M:%S',
                                       time.localtime(created_at_in_epoch))
        event_data = self._get_event_data(event)
        request_id = event_data['requestId']
        solution_data = self._rfai_solution_repository.get_solution_for_given_submitter_and_request_id(
            request_id=request_id, submitter=event_data["submitter"])
        self._create_or_update_vote(
            request_id=request_id,
            voter=event_data["voter"],
            rfai_solution_id=solution_data["rfai_solution_id"],
            created_at=created_at)

    def _create_or_update_vote(self, request_id, voter, rfai_solution_id,
                               created_at):
        self._rfai_vote_repository.create_or_update_vote(
            request_id=request_id,
            voter=voter,
            rfai_solution_id=rfai_solution_id,
            created_at=created_at)
Example #3
0
class RFAIAddSolutionRequestEventConsumer(RFAIEventConsumer):
    _connection = Repository(NETWORKS=NETWORK)
    _rfai_solution_repository = SolutionDAO(_connection)

    def __init__(self, net_id, ws_provider, ipfs_url, ipfs_port):
        super().__init__(net_id, ws_provider, ipfs_url, ipfs_port)

    def on_event(self, event):
        created_at_in_epoch = self._blockchain_util.get_created_at_for_block(
            block_no=event["data"]["block_no"]).get("timestamp", None)
        if created_at_in_epoch is not None:
            created_at = time.strftime('%Y-%m-%d %H:%M:%S',
                                       time.localtime(created_at_in_epoch))
        event_data = self._get_event_data(event)
        request_id = event_data['requestId']
        result = self._get_rfai_service_request_by_id(request_id)
        [
            found, request_id, requester, total_fund, document_uri, expiration,
            end_submission, end_evaluation, status, stake_members, submitters
        ] = self._get_rfai_service_request_by_id(request_id)
        self._rfai_solution_repository.create_or_update_solution(
            request_id=request_id,
            submitter=event_data["submitter"],
            doc_uri=event_data["solutionDocURI"],
            claim_amount=0,
            created_at=created_at)
Example #4
0
class RFAIClaimRequestEventConsumer(RFAIEventConsumer):
    _connection = Repository(NETWORKS=NETWORK)
    _solution_dao = SolutionDAO(_connection)
    _stake_dao = StakeDAO(_connection)
    _request_dao = RequestDAO(_connection)
    _rfai_request_repository = RFAIRequestRepository(_connection)

    def __init__(self, net_id, ws_provider, ipfs_url, ipfs_port):
        super().__init__(net_id, ws_provider, ipfs_url, ipfs_port)

    def on_event(self, event):
        event_data = self._get_event_data(event)
        request_id = event_data['requestId']
        [
            found, request_id, requester, total_fund, document_uri, expiration,
            end_submission, end_evaluation, status, stake_members, submitters
        ] = self._get_rfai_service_request_by_id(request_id)
        claim_amount = event_data["amount"]
        request_data = self._request_dao.get_request_data_for_given_requester_and_status(
            filter_parameter={"request_id": request_id})
        self._connection.begin_transaction()
        try:
            voters_data = self._rfai_request_repository.get_vote_details_for_given_request_id_and_submitter(
                request_id=request_id, submitter=event_data["submitter"])
            for record in voters_data:
                found, stake_amount = self._get_stake_by_id(
                    request_id=request_id, staker=record["voter"])
                if not found:
                    stake_amount = 0
                self._stake_dao.update_stake_for_given_request_id(
                    request_id=request_id,
                    update_parameters={"claim_back_amount": stake_amount})
            self._request_dao.update_request_for_given_request_id(
                request_id=request_id,
                update_parameters={"fund_total": total_fund})
            self._solution_dao.update_solution_for_given_request_id(
                request_id=request_id,
                update_parameters={"claim_amount": claim_amount})
            self._connection.commit_transaction()
        except Exception as e:
            logger.info(
                f"Transaction Rollback for event {event}. Error::{repr(e)}")
            self._connection.rollback_transaction()
            raise e
class RFAIAddSolutionRequestEventConsumer(RFAIEventConsumer):
    _connection = Repository(NETWORKS=NETWORK)
    _rfai_solution_repository = SolutionDAO(_connection)

    def __init__(self, net_id, ws_provider, ipfs_url, ipfs_port):
        super().__init__(net_id, ws_provider, ipfs_url, ipfs_port)

    def on_event(self, event):
        event_data = self._get_event_data(event)
        request_id = event_data['requestId']
        result = self._get_rfai_service_request_by_id(request_id)
        [
            found, request_id, requester, total_fund, document_uri, expiration,
            end_submission, end_evaluation, status, stake_members, submitters
        ] = self._get_rfai_service_request_by_id(request_id)
        self._rfai_solution_repository.create_or_update_solution(
            request_id=request_id,
            submitter=event_data["submitter"],
            doc_uri=event_data["solutionDocURI"],
            claim_amount=0,
            created_at=datetime.datetime.utcnow())
class RFAIVoteRequestEventConsumer(RFAIEventConsumer):
    _connection = Repository(NETWORKS=NETWORK)
    _rfai_vote_repository = VoteDAO(_connection)
    _rfai_solution_repository = SolutionDAO(_connection)

    def __init__(self, net_id, ws_provider, ipfs_url, ipfs_port):
        super().__init__(net_id, ws_provider, ipfs_url, ipfs_port)

    def on_event(self, event):
        event_data = self._get_event_data(event)
        request_id = event_data['requestId']
        solution_data = self._rfai_solution_repository.get_solution_id_for_given_submitter(
            request_id=request_id, submitter=event_data["submitter"])
        self._create_or_update_vote(
            request_id=request_id,
            voter=event_data["voter"],
            rfai_solution_id=solution_data["rfai_solution_id"])

    def _create_or_update_vote(self, request_id, voter, rfai_solution_id):
        self._rfai_vote_repository.create_or_update_vote(
            request_id=request_id,
            voter=voter,
            rfai_solution_id=rfai_solution_id,
            created_at=datetime.datetime.utcnow())