Skip to content

Commit

Permalink
Fixed error in room variables
Browse files Browse the repository at this point in the history
  • Loading branch information
egalvis39 committed May 16, 2023
1 parent be441d6 commit e3beef5
Show file tree
Hide file tree
Showing 13 changed files with 87 additions and 56 deletions.
39 changes: 27 additions & 12 deletions menuflow/flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,9 @@ def middleware(self, middleware_id: str, room: Room) -> HTTPMiddleware:
if not middleware_data:
return

middleware_initialized = HTTPMiddleware(http_middleware_data=middleware_data)
middleware_initialized.room = room
middleware_initialized = HTTPMiddleware(
http_middleware_data=middleware_data, room=room, default_variables=self.flow_variables
)

return middleware_initialized

Expand All @@ -107,28 +108,42 @@ def node(
return

if node_data.get("type") == "message":
node_initialized = Message(message_node_data=node_data)
node_initialized = Message(
message_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "media":
node_initialized = Media(media_node_data=node_data)
node_initialized = Media(
media_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "email":
node_initialized = Email(email_node_data=node_data)
node_initialized = Email(
email_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "location":
node_initialized = Location(location_node_data=node_data)
node_initialized = Location(
location_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "switch":
node_initialized = Switch(switch_node_data=node_data)
node_initialized = Switch(
switch_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "input":
node_initialized = Input(input_node_data=node_data)
node_initialized = Input(
input_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "check_time":
node_initialized = CheckTime(check_time_node_data=node_data)
node_initialized = CheckTime(
check_time_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "http_request":
node_initialized = HTTPRequest(http_request_node_data=node_data)
node_initialized = HTTPRequest(
http_request_node_data=node_data, room=room, default_variables=self.flow_variables
)

if node_data.get("middleware"):
middleware = self.middleware(node_data.get("middleware"), room)
node_initialized.middleware = middleware
else:
return

node_initialized.room = room

return node_initialized
1 change: 0 additions & 1 deletion menuflow/matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ def __init__(self, config: Config, *args, **kwargs) -> None:
Base.init_cls(
config=self.config,
session=self.api.session,
default_variables=self.flow.flow_variables,
)

def handle_sync(self, data: Dict) -> list[asyncio.Task]:
Expand Down
7 changes: 4 additions & 3 deletions menuflow/middlewares/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@


class HTTPMiddleware(Base):
room: Room = None

def __init__(self, http_middleware_data: HTTPMiddlewareModel) -> None:
def __init__(
self, http_middleware_data: HTTPMiddlewareModel, room: Room, default_variables: Dict
) -> None:
Base.__init__(self, room=room, default_variables=default_variables)
self.log = self.log.getChild(http_middleware_data.get("id"))
self.content: Dict = http_middleware_data

Expand Down
10 changes: 6 additions & 4 deletions menuflow/nodes/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ class Base:
session: ClientSession

content: Dict
room: Room

def __init__(self, room: Room, default_variables: Dict) -> None:
self.room = room
self.default_variables = default_variables

@property
def id(self) -> str:
Expand All @@ -77,10 +80,9 @@ def type(self) -> str:
return self.content.get("type", "")

@classmethod
def init_cls(cls, config: Config, session: ClientSession, default_variables: Dict):
def init_cls(cls, config: Config, session: ClientSession):
cls.config = config
cls.session = session
cls.variables = default_variables or {}

@abstractmethod
async def run(self):
Expand Down Expand Up @@ -150,7 +152,7 @@ def render_data(self, data: Dict | List | str) -> Dict | List | str:
self.log.exception(e)
return

copy_variables = {**self.variables, **self.room._variables}
copy_variables = {**self.default_variables, **self.room._variables}

try:
data = loads(data_template.render(**copy_variables))
Expand Down
9 changes: 6 additions & 3 deletions menuflow/nodes/check_time.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
from datetime import datetime
from typing import Any, List
from typing import Any, Dict, List

import pytz

from ..repository import CheckTime as CheckTimeModel
from ..room import Room
from ..utils import Util
from .switch import Switch


class CheckTime(Switch):
def __init__(self, check_time_node_data: CheckTimeModel) -> None:
Switch.__init__(self, check_time_node_data)
def __init__(
self, check_time_node_data: CheckTimeModel, room: Room, default_variables: Dict
) -> None:
Switch.__init__(self, check_time_node_data, room=room, default_variables=default_variables)
self.content = check_time_node_data

@property
Expand Down
7 changes: 4 additions & 3 deletions menuflow/nodes/email.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import asyncio
from typing import List
from typing import Dict, List

from ..email_client import Email as EmailMessage
from ..email_client import EmailClient
from ..repository import Email as EmailModel
from ..room import Room
from .message import Message


class Email(Message):
email_client: EmailClient = None

def __init__(self, email_node_data: EmailModel) -> None:
Message.__init__(self, email_node_data)
def __init__(self, email_node_data: EmailModel, room: Room, default_variables: Dict) -> None:
Message.__init__(self, email_node_data, room=room, default_variables=default_variables)
self.content = email_node_data

@property
Expand Down
9 changes: 7 additions & 2 deletions menuflow/nodes/http_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

from ..db.room import RoomState
from ..repository import HTTPRequest as HTTPRequestModel
from ..room import Room
from .switch import Switch

if TYPE_CHECKING:
Expand All @@ -17,8 +18,12 @@ class HTTPRequest(Switch):

middleware: "HTTPMiddleware" = None

def __init__(self, http_request_node_data: HTTPRequestModel) -> None:
Switch.__init__(self, http_request_node_data)
def __init__(
self, http_request_node_data: HTTPRequestModel, room: Room, default_variables: Dict
) -> None:
Switch.__init__(
self, http_request_node_data, room=room, default_variables=default_variables
)
self.log = self.log.getChild(http_request_node_data.get("id"))
self.content: Dict = http_request_node_data

Expand Down
7 changes: 4 additions & 3 deletions menuflow/nodes/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,16 @@

from ..db.room import RoomState
from ..repository import Input as InputModel
from ..room import Room
from ..utils import Util
from .message import Message
from .switch import Switch


class Input(Switch, Message):
def __init__(self, input_node_data: InputModel) -> None:
Switch.__init__(self, input_node_data)
Message.__init__(self, input_node_data)
def __init__(self, input_node_data: InputModel, room: Room, default_variables: Dict) -> None:
Switch.__init__(self, input_node_data, room=room, default_variables=default_variables)
Message.__init__(self, input_node_data, room=room, default_variables=default_variables)
self.content = input_node_data

@property
Expand Down
7 changes: 5 additions & 2 deletions menuflow/nodes/location.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@

from ..db.room import RoomState
from ..repository import Location as LocationModel
from ..room import Room
from .message import Message


class Location(Message):
def __init__(self, location_node_data: LocationModel) -> None:
Message.__init__(self, location_node_data)
def __init__(
self, location_node_data: LocationModel, room: Room, default_variables: Dict
) -> None:
Message.__init__(self, location_node_data, room=room, default_variables=default_variables)
self.log = self.log.getChild(location_node_data.get("id"))
self.content: Dict = location_node_data

Expand Down
5 changes: 3 additions & 2 deletions menuflow/nodes/media.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

from ..db.room import RoomState
from ..repository import Media as MediaModel
from ..room import Room
from .message import Message

try:
Expand All @@ -29,8 +30,8 @@
class Media(Message):
media_cache: Dict[str, MediaMessageEventContent] = {}

def __init__(self, media_node_data: MediaModel) -> None:
Message.__init__(self, media_node_data)
def __init__(self, media_node_data: MediaModel, room: Room, default_variables: Dict) -> None:
Message.__init__(self, media_node_data, room=room, default_variables=default_variables)
self.log = self.log.getChild(media_node_data.get("id"))
self.content: Dict = media_node_data

Expand Down
8 changes: 6 additions & 2 deletions menuflow/nodes/message.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
from typing import Dict
from typing import Any, Dict

from markdown import markdown
from mautrix.types import Format, MessageType, TextMessageEventContent

from ..db.room import RoomState
from ..repository import Message as MessageModel
from ..room import Room
from .base import Base


class Message(Base):
def __init__(self, message_node_data: MessageModel) -> None:
def __init__(
self, message_node_data: MessageModel, room: Room, default_variables: Dict
) -> None:
Base.__init__(self, room=room, default_variables=default_variables)
self.log = self.log.getChild(message_node_data.get("id"))
self.content: Dict = message_node_data

Expand Down
4 changes: 3 additions & 1 deletion menuflow/nodes/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
from typing import Dict, List

from ..repository import Switch as SwitchModel
from ..room import Room
from .base import Base, safe_data_convertion


class Switch(Base):
def __init__(self, switch_node_data: SwitchModel) -> None:
def __init__(self, switch_node_data: SwitchModel, room: Room, default_variables: Dict) -> None:
Base.__init__(self, room=room, default_variables=default_variables)
self.log = self.log.getChild(switch_node_data.get("id"))
self.content: Dict = switch_node_data

Expand Down
30 changes: 12 additions & 18 deletions test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,57 +50,51 @@ async def base(sample_flow_1: Flow, room: Room, mocker: MockerFixture) -> Base:
Base,
"run",
)
base = Base()
base.room = room
base.variables = sample_flow_1.flow_variables
base = Base(room=room, default_variables=sample_flow_1.flow_variables)
return base


@pytest_asyncio.fixture
async def message(sample_flow_1: Flow, base: Base) -> Message:
message_node_data = sample_flow_1.get_node_by_id("start")
message_node = Message(message_node_data)
message_node.room = base.room
message_node.variables = base.variables
message_node = Message(
message_node_data, room=base.room, default_variables=base.default_variables
)
message_node.matrix_client = Client(base_url="")
return message_node


@pytest_asyncio.fixture
async def switch(sample_flow_1: Flow, base: Base) -> Switch:
switch_node_data = sample_flow_1.get_node_by_id("switch-1")
switch_node = Switch(switch_node_data)
switch_node.room = base.room
switch_node.variables = base.variables
switch_node = Switch(
switch_node_data, room=base.room, default_variables=base.default_variables
)
switch_node.matrix_client = Client(base_url="")
return switch_node


@pytest_asyncio.fixture
async def input_text(sample_flow_1: Flow, base: Base) -> Input:
input_node_data = sample_flow_1.get_node_by_id("input-1")
input_node = Input(input_node_data)
input_node.room = base.room
input_node.variables = base.variables
input_node = Input(input_node_data, room=base.room, default_variables=base.default_variables)
input_node.matrix_client = Client(base_url="")
return input_node


@pytest_asyncio.fixture
async def input_media(sample_flow_1: Flow, base: Base) -> Input:
input_node_data = sample_flow_1.get_node_by_id("input-4")
input_node = Input(input_node_data)
input_node.room = base.room
input_node.variables = base.variables
input_node = Input(input_node_data, room=base.room, default_variables=base.default_variables)
input_node.matrix_client = Client(base_url="")
return input_node


@pytest_asyncio.fixture
async def location(sample_flow_1: Flow, base: Base) -> Location:
location_node_data = sample_flow_1.get_node_by_id("location-1")
location_node = Location(location_node_data)
location_node.room = base.room
location_node.variables = base.variables
location_node = Location(
location_node_data, room=base.room, default_variables=base.default_variables
)
location_node.matrix_client = Client(base_url="")
return location_node

0 comments on commit e3beef5

Please sign in to comment.