Skip to content

Commit

Permalink
Merge pull request #108 from iKonoTelecomunicaciones/107-delay-node
Browse files Browse the repository at this point in the history
feat(Delay node): ✨ Create a delay node
  • Loading branch information
jcardenas3 committed Apr 9, 2024
2 parents 59661b1 + 8ee1960 commit 355548f
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 0 deletions.
5 changes: 5 additions & 0 deletions menuflow/flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from .middlewares import ASRMiddleware, HTTPMiddleware, IRMMiddleware, LLMMiddleware, TTMMiddleware
from .nodes import (
CheckTime,
Delay,
Email,
HTTPRequest,
Input,
Expand Down Expand Up @@ -184,6 +185,10 @@ def node(
node_initialized = Subroutine(
subroutine_node_data=node_data, room=room, default_variables=self.flow_variables
)
elif node_data.get("type") == "delay":
node_initialized = Delay(
delay_node_data=node_data, room=room, default_variables=self.flow_variables
)
else:
return

Expand Down
1 change: 1 addition & 0 deletions menuflow/nodes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from .base import Base, convert_to_bool
from .check_time import CheckTime
from .delay import Delay
from .email import Email
from .http_request import HTTPRequest
from .input import Input
Expand Down
29 changes: 29 additions & 0 deletions menuflow/nodes/delay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from asyncio import sleep
from typing import Dict

from ..repository import Delay as DelayModel
from ..room import Room
from .base import Base


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

@property
def time(self) -> int:
self.log.debug(f"Waiting {self.content.get('time', 0)} seconds...")
return self.render_data(data=self.content.get("time", 0))

@property
async def o_connection(self) -> str:
o_connection = await self.get_o_connection()
return self.render_data(data=o_connection)

async def run(self):
self.log.debug(f"Room {self.room.room_id} enters delay node {self.id}")
await sleep(self.time)
o_connection = await self.o_connection
await self.room.update_menu(node_id=o_connection, state=None)
1 change: 1 addition & 0 deletions menuflow/repository/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from .nodes import (
Case,
CheckTime,
Delay,
Email,
HTTPRequest,
InactivityOptions,
Expand Down
1 change: 1 addition & 0 deletions menuflow/repository/nodes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .check_time import CheckTime
from .delay import Delay
from .email import Email
from .http_request import HTTPRequest
from .input import InactivityOptions, Input
Expand Down
21 changes: 21 additions & 0 deletions menuflow/repository/nodes/delay.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from __future__ import annotations

from attr import dataclass, ib

from ..flow_object import FlowObject


@dataclass
class Delay(FlowObject):
"""
## Delay
Delay the time (in seconds).
- id: delay1
type: delay
time: 10 # seconds
o_connection: m2
"""

time: int = ib(default=None)
o_connection: str = ib(default=None)
1 change: 1 addition & 0 deletions menuflow/utils/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class Nodes(SerializableEnum):
set_vars = "set_vars"
subroutine = "subroutine"
switch = "switch"
delay = "delay"


class Middlewares(SerializableEnum):
Expand Down

0 comments on commit 355548f

Please sign in to comment.