Verified Commit bf3f9d34 authored by Jakob Moser's avatar Jakob Moser
Browse files

Add dedicated Message type

parent 8479a5d6
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
import getpass
import json
from pathlib import Path
from typing import Annotated

@@ -8,6 +7,7 @@ from sqlalchemy import select

from poolpay import db, paths
from poolpay.model.BankAccount import BankAccount
from poolpay.model.messages.UpdateBalanceMessage import UpdateBalanceMessage
from poolpay.model.Transaction import Transaction

app = typer.Typer()
@@ -57,19 +57,14 @@ def export(
    transactions = db.session.execute(sorted_selection).scalars().all()

    messages = [
        {
            "uuid": str(transaction.uuid),
            "action": {
                "type": "update_balance",
                "by_amount": transaction.amount_cents,
            },
            "person": {"full_name": transaction.partner},
        }
        UpdateBalanceMessage(
            transaction.uuid, transaction.amount_cents, transaction.partner
        )
        for transaction in transactions
    ]

    for message in messages:
        print(json.dumps(message))
        print(message)


if __name__ == "__main__":
+11 −0
Original line number Diff line number Diff line
from abc import ABC, abstractmethod
from dataclasses import dataclass

from poolpay.wire.Packet import Packet


@dataclass(frozen=True)
class Message(ABC):
    @abstractmethod
    def to_packet(self) -> Packet:
        pass
+26 −0
Original line number Diff line number Diff line
import json
from dataclasses import dataclass
from uuid import UUID

from poolpay.model.messages.Message import Message
from poolpay.wire.Packet import Packet


@dataclass(frozen=True)
class UpdateBalanceMessage(Message):
    uuid: UUID
    by_amount_cents: int
    person_full_name: str

    def to_packet(self) -> Packet:
        return {
            "uuid": str(self.uuid),
            "action": {
                "type": "update_balance",
                "by_amount_cents": self.by_amount_cents,
            },
            "person": {"full_name": self.person_full_name},
        }

    def __repr__(self) -> str:
        return json.dumps(self.to_packet())
+6 −0
Original line number Diff line number Diff line
"""
Messages to be sent and received, likely via the Wire.

The Wire server and client transmit _packets_, which are arbitrary dicts. They don't care about the content.
The model models messages, which have a semantic to it.
"""