From b9b6896fc25a70b65cead4c59fe3baa1ab0854c9 Mon Sep 17 00:00:00 2001 From: Ramiro Medina <64783088+ramedina86@users.noreply.github.com> Date: Sun, 2 Mar 2025 14:56:44 +0000 Subject: [PATCH 01/11] feat: Add block checking command --- alfred/ci.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/alfred/ci.py b/alfred/ci.py index 2cda18aba..c7864c3fa 100644 --- a/alfred/ci.py +++ b/alfred/ci.py @@ -8,12 +8,12 @@ @alfred.command("ci", help="continuous integration pipeline") -@alfred.option('--front', '-f', help="run for frontend only", is_flag=True, default=False) -@alfred.option('--docs', '-d', help="run for docs only", is_flag=True, default=False) -@alfred.option('--back', '-b', help="run for backend only", is_flag=True, default=False) -@alfred.option('--e2e', '-e', help="run for end-to-end only", default=None) +@alfred.option("--front", "-f", help="run for frontend only", is_flag=True, default=False) +@alfred.option("--docs", "-d", help="run for docs only", is_flag=True, default=False) +@alfred.option("--back", "-b", help="run for backend only", is_flag=True, default=False) +@alfred.option("--e2e", "-e", help="run for end-to-end only", default=None) def ci(front, back, e2e, docs): - no_flags = (not front and not back and not e2e and not docs) + no_flags = not front and not back and not e2e and not docs if front or no_flags: alfred.invoke_command("npm.lint") @@ -27,21 +27,28 @@ def ci(front, back, e2e, docs): if e2e: alfred.invoke_command("npm.e2e", browser=e2e) + @alfred.command("ci.mypy", help="typing checking with mypy on ./src/writer") def ci_mypy(): alfred.run("mypy ./src/writer --exclude app_templates/*") + @alfred.command("ci.ruff", help="linting with ruff") -@alfred.option('--fix', '-f', help="fix linting errors", is_flag=True, default=False) +@alfred.option("--fix", "-f", help="fix linting errors", is_flag=True, default=False) def ci_ruff(fix): if fix: alfred.run("ruff check --fix") else: alfred.run("ruff check") + @alfred.command("ci.pytest", help="run pytest on ./tests") def ci_test(): os.chdir("tests") alfred.run("pytest") +@alfred.command("ci.pytest.blocks", help="run pytest on ./tests") +def ci_test_blocks(): + os.chdir("tests") + alfred.run("pytest backend/blocks") From 94a0d3ebc387435f51ba02dab4a7c5ea66e965b9 Mon Sep 17 00:00:00 2001 From: Ramiro Medina <64783088+ramedina86@users.noreply.github.com> Date: Sun, 2 Mar 2025 14:57:00 +0000 Subject: [PATCH 02/11] feat: Add change page block --- src/writer/blocks/__init__.py | 2 ++ src/writer/blocks/changepage.py | 48 +++++++++++++++++++++++++ tests/backend/blocks/test_changepage.py | 15 ++++++++ 3 files changed, 65 insertions(+) create mode 100644 src/writer/blocks/changepage.py create mode 100644 tests/backend/blocks/test_changepage.py diff --git a/src/writer/blocks/__init__.py b/src/writer/blocks/__init__.py index 98c958038..feaf4f26a 100644 --- a/src/writer/blocks/__init__.py +++ b/src/writer/blocks/__init__.py @@ -16,6 +16,7 @@ from writer.blocks.writercompletion import WriterCompletion from writer.blocks.writerinitchat import WriterInitChat from writer.blocks.writernocodeapp import WriterNoCodeApp +from writer.blocks.changepage import ChangePage SetState.register("workflows_setstate") WriterClassification.register("workflows_writerclassification") @@ -35,3 +36,4 @@ WriterAddToKG.register("workflows_writeraddtokg") UIEventTrigger.register("workflows_uieventtrigger") CodeBlock.register("workflows_code") +ChangePage.register("workflows_changepage") diff --git a/src/writer/blocks/changepage.py b/src/writer/blocks/changepage.py new file mode 100644 index 000000000..d49b68d50 --- /dev/null +++ b/src/writer/blocks/changepage.py @@ -0,0 +1,48 @@ +from writer.abstract import register_abstract_template +from writer.blocks.base_block import WorkflowBlock +from writer.ss_types import AbstractTemplate + + +class ChangePage(WorkflowBlock): + @classmethod + def register(cls, type: str): + super(ChangePage, cls).register(type) + register_abstract_template( + type, + AbstractTemplate( + baseType="workflows_node", + writer={ + "name": "Change page", + "description": "Changes the active page.", + "category": "Other", + "fields": { + "pageKey": { + "name": "Page key", + "type": "Text", + "desc": "The identifying key of the target page.", + }, + }, + "outs": { + "success": { + "name": "Success", + "description": "The page change was successful.", + "style": "success", + }, + "error": { + "name": "Error", + "description": "The event handler execution wasn't successful.", + "style": "error", + }, + }, + }, + ), + ) + + def run(self): + try: + page_key = self._get_field("pageKey", required=True) + self.runner.session.session_state.set_page(page_key) + self.outcome = "success" + except BaseException as e: + self.outcome = "error" + raise e diff --git a/tests/backend/blocks/test_changepage.py b/tests/backend/blocks/test_changepage.py new file mode 100644 index 000000000..53606257d --- /dev/null +++ b/tests/backend/blocks/test_changepage.py @@ -0,0 +1,15 @@ +import writer.core +from writer.blocks.changepage import ChangePage +from writer.core import WriterState + + +def test_change_page(session, runner): + session.session_state = WriterState({}, [{"type": "test", "payload": "Just a test"}]) + session.add_fake_component({"pageKey": "secondaryPage"}) + writer.core.Config.is_mail_enabled_for_log = True + block = ChangePage("fake_id", runner, {}) + block.run() + assert block.outcome == "success" + latest_mail = session.session_state.mail[1] + assert latest_mail.get("type") == "pageChange" + assert latest_mail.get("payload") == "secondaryPage" From 305a600461f8859ffac9f4cd7bb8b7cfe734410e Mon Sep 17 00:00:00 2001 From: Ramiro Medina <64783088+ramedina86@users.noreply.github.com> Date: Sun, 2 Mar 2025 15:01:56 +0000 Subject: [PATCH 03/11] fix: Ruff fix --- src/writer/blocks/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/writer/blocks/__init__.py b/src/writer/blocks/__init__.py index feaf4f26a..b982804b4 100644 --- a/src/writer/blocks/__init__.py +++ b/src/writer/blocks/__init__.py @@ -1,5 +1,6 @@ from writer.blocks.addtostatelist import AddToStateList from writer.blocks.calleventhandler import CallEventHandler +from writer.blocks.changepage import ChangePage from writer.blocks.code import CodeBlock from writer.blocks.foreach import ForEach from writer.blocks.httprequest import HTTPRequest @@ -16,7 +17,6 @@ from writer.blocks.writercompletion import WriterCompletion from writer.blocks.writerinitchat import WriterInitChat from writer.blocks.writernocodeapp import WriterNoCodeApp -from writer.blocks.changepage import ChangePage SetState.register("workflows_setstate") WriterClassification.register("workflows_writerclassification") From 204908bd64ef814c1ce566756584f906e0e18070 Mon Sep 17 00:00:00 2001 From: Ramiro Medina <64783088+ramedina86@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:49:37 +0000 Subject: [PATCH 04/11] feat: Change page --- src/ui/src/core/index.ts | 3 --- src/ui/src/renderer/ComponentRenderer.vue | 23 +++++++++++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/ui/src/core/index.ts b/src/ui/src/core/index.ts index d15e4ef1a..1ec2005a5 100644 --- a/src/ui/src/core/index.ts +++ b/src/ui/src/core/index.ts @@ -68,9 +68,6 @@ export function generateCore() { */ async function init() { await initSession(); - addMailSubscription("pageChange", (pageKey: string) => { - setActivePageFromKey(pageKey); - }); sendKeepAliveMessage(); if (mode.value != "edit") return; } diff --git a/src/ui/src/renderer/ComponentRenderer.vue b/src/ui/src/renderer/ComponentRenderer.vue index 4d5faa104..73d3efae8 100644 --- a/src/ui/src/renderer/ComponentRenderer.vue +++ b/src/ui/src/renderer/ComponentRenderer.vue @@ -22,7 +22,15 @@