From 1c472c359fd86af06cafea2711ffd891637f1cd4 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 18:57:02 -0300 Subject: [PATCH 1/8] Add unique constraints to tables --- .../006b3990db50_add_unique_constraints.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py diff --git a/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py b/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py new file mode 100644 index 000000000..4c891635b --- /dev/null +++ b/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py @@ -0,0 +1,47 @@ +"""Add unique constraints + +Revision ID: 006b3990db50 +Revises: 1ef9c4f3765d +Create Date: 2023-12-13 18:55:52.587360 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel + + +# revision identifiers, used by Alembic. +revision: str = '006b3990db50' +down_revision: Union[str, None] = '1ef9c4f3765d' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('apikey', schema=None) as batch_op: + batch_op.create_unique_constraint(None, ['id']) + + with op.batch_alter_table('flow', schema=None) as batch_op: + batch_op.create_unique_constraint(None, ['id']) + + with op.batch_alter_table('user', schema=None) as batch_op: + batch_op.create_unique_constraint(None, ['id']) + + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('user', schema=None) as batch_op: + batch_op.drop_constraint(None, type_='unique') + + with op.batch_alter_table('flow', schema=None) as batch_op: + batch_op.drop_constraint(None, type_='unique') + + with op.batch_alter_table('apikey', schema=None) as batch_op: + batch_op.drop_constraint(None, type_='unique') + + # ### end Alembic commands ### From fde3c52665b3a03ed96a08ed7d214f4359833821 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 18:57:14 -0300 Subject: [PATCH 2/8] Refactor cache factory imports --- src/backend/langflow/services/cache/factory.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/langflow/services/cache/factory.py b/src/backend/langflow/services/cache/factory.py index 10e657bc5..c74a82512 100644 --- a/src/backend/langflow/services/cache/factory.py +++ b/src/backend/langflow/services/cache/factory.py @@ -1,7 +1,9 @@ -from langflow.services.cache.service import InMemoryCache, RedisCache, BaseCacheService +from typing import TYPE_CHECKING + +from langflow.services.cache.service import (BaseCacheService, InMemoryCache, + RedisCache) from langflow.services.factory import ServiceFactory from langflow.utils.logger import logger -from typing import TYPE_CHECKING if TYPE_CHECKING: from langflow.services.settings.service import SettingsService From c5148c594e8cdff26caa7a7aa3c1d1190fc43705 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 18:57:30 -0300 Subject: [PATCH 3/8] Add loguru logger and sqlalchemy imports Handle AutogenerateDiffsDetected exception in migrations Fix migration error message --- .../langflow/services/database/service.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/backend/langflow/services/database/service.py b/src/backend/langflow/services/database/service.py index 3610f0dea..1216d5699 100644 --- a/src/backend/langflow/services/database/service.py +++ b/src/backend/langflow/services/database/service.py @@ -5,16 +5,17 @@ from typing import TYPE_CHECKING import sqlalchemy as sa from alembic import command, util from alembic.config import Config +from loguru import logger +from sqlalchemy import inspect +from sqlalchemy.exc import OperationalError +from sqlmodel import Session, SQLModel, create_engine, select, text + from langflow.services.base import Service from langflow.services.database import models # noqa from langflow.services.database.models.user.crud import get_user_by_username from langflow.services.database.utils import Result, TableResults from langflow.services.deps import get_settings_service from langflow.services.utils import teardown_superuser -from loguru import logger -from sqlalchemy import inspect -from sqlalchemy.exc import OperationalError -from sqlmodel import Session, SQLModel, create_engine, select, text if TYPE_CHECKING: from sqlalchemy.engine import Engine @@ -147,16 +148,20 @@ class DatabaseService(Service): try: command.check(alembic_cfg) except Exception as exc: - if isinstance(exc, util.exc.CommandError) or isinstance(exc, util.exc.AutogenerateDiffsDetected): + if isinstance( + exc, (util.exc.CommandError, util.exc.AutogenerateDiffsDetected) + ): command.upgrade(alembic_cfg, "head") time.sleep(3) try: command.check(alembic_cfg) - except util.exc.AutogenerateDiffsDetected: + except util.exc.AutogenerateDiffsDetected as e: logger.exception("AutogenerateDiffsDetected: {exc}") if not fix: - raise RuntimeError("Something went wrong running migrations. Please, run `langflow migration --fix`") + raise RuntimeError( + "Something went wrong running migrations. Please, run `langflow migration --fix`" + ) from e if fix: self.try_downgrade_upgrade_until_success(alembic_cfg) From a05acd5580dba7c2ead4d67a24d2475ed6be3125 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 19:07:44 -0300 Subject: [PATCH 4/8] Add .docker and scratchpad to .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9f5f7314d..cf259ad42 100644 --- a/.gitignore +++ b/.gitignore @@ -255,4 +255,5 @@ langflow.db /tmp/* src/backend/langflow/frontend/ -.docker \ No newline at end of file +.docker +scratchpad* \ No newline at end of file From 9d19082452d6145830639dfdee12225162220978 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 19:08:11 -0300 Subject: [PATCH 5/8] Refactor serialize_file_path method in TemplateField class --- src/backend/langflow/template/field/base.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/backend/langflow/template/field/base.py b/src/backend/langflow/template/field/base.py index d59aaa68f..021c0104d 100644 --- a/src/backend/langflow/template/field/base.py +++ b/src/backend/langflow/template/field/base.py @@ -69,14 +69,10 @@ class TemplateField(BaseModel): @field_serializer("file_path") def serialize_file_path(self, value): - if self.field_type == "file": - return value - return "" + return value if self.field_type == "file" else "" @field_serializer("field_type") def serialize_field_type(self, value, _info): - if value == "float": - # check if range_spec is set - if self.range_spec is None: - self.range_spec = RangeSpec() + if value == "float" and self.range_spec is None: + self.range_spec = RangeSpec() return value From 372f39bcadf593861e957461968b80f63caa9f02 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 19:08:35 -0300 Subject: [PATCH 6/8] Fix build failure and optimize imports --- src/backend/langflow/api/v1/chat.py | 1 - src/backend/langflow/services/cache/factory.py | 3 +-- src/backend/langflow/services/database/service.py | 4 +--- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/backend/langflow/api/v1/chat.py b/src/backend/langflow/api/v1/chat.py index c034c2676..059ad23b6 100644 --- a/src/backend/langflow/api/v1/chat.py +++ b/src/backend/langflow/api/v1/chat.py @@ -178,7 +178,6 @@ async def stream_build( time_elapsed = format_elapsed_time(time.perf_counter() - start_time) update_build_status(cache_service, flow_id, BuildStatus.FAILURE) - vertex_id = vertex.parent_node_id if vertex.parent_is_top_level else vertex.id if vertex_id in graph.top_level_vertices: response = { diff --git a/src/backend/langflow/services/cache/factory.py b/src/backend/langflow/services/cache/factory.py index c74a82512..32f726c6b 100644 --- a/src/backend/langflow/services/cache/factory.py +++ b/src/backend/langflow/services/cache/factory.py @@ -1,7 +1,6 @@ from typing import TYPE_CHECKING -from langflow.services.cache.service import (BaseCacheService, InMemoryCache, - RedisCache) +from langflow.services.cache.service import BaseCacheService, InMemoryCache, RedisCache from langflow.services.factory import ServiceFactory from langflow.utils.logger import logger diff --git a/src/backend/langflow/services/database/service.py b/src/backend/langflow/services/database/service.py index 1216d5699..9765d858f 100644 --- a/src/backend/langflow/services/database/service.py +++ b/src/backend/langflow/services/database/service.py @@ -148,9 +148,7 @@ class DatabaseService(Service): try: command.check(alembic_cfg) except Exception as exc: - if isinstance( - exc, (util.exc.CommandError, util.exc.AutogenerateDiffsDetected) - ): + if isinstance(exc, (util.exc.CommandError, util.exc.AutogenerateDiffsDetected)): command.upgrade(alembic_cfg, "head") time.sleep(3) From cc666e1ce5073bb3ebbaabbb16b9d0d5fbc754f5 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 19:10:03 -0300 Subject: [PATCH 7/8] Add unique constraints to tables --- .../006b3990db50_add_unique_constraints.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py b/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py index 4c891635b..cfdd10578 100644 --- a/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py +++ b/src/backend/langflow/alembic/versions/006b3990db50_add_unique_constraints.py @@ -8,10 +8,8 @@ Create Date: 2023-12-13 18:55:52.587360 from typing import Sequence, Union from alembic import op -import sqlalchemy as sa -import sqlmodel - - +import sqlalchemy as sa # noqa: F401 +import sqlmodel # noqa: F401 # revision identifiers, used by Alembic. revision: str = '006b3990db50' down_revision: Union[str, None] = '1ef9c4f3765d' @@ -22,13 +20,13 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.create_unique_constraint(None, ['id']) + batch_op.create_unique_constraint('uq_apikey_id', ['id']) with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.create_unique_constraint(None, ['id']) + batch_op.create_unique_constraint('uq_flow_id', ['id']) with op.batch_alter_table('user', schema=None) as batch_op: - batch_op.create_unique_constraint(None, ['id']) + batch_op.create_unique_constraint('uq_user_id', ['id']) # ### end Alembic commands ### @@ -36,12 +34,12 @@ def upgrade() -> None: def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table('user', schema=None) as batch_op: - batch_op.drop_constraint(None, type_='unique') + batch_op.drop_constraint('uq_user_id', type_='unique') with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.drop_constraint(None, type_='unique') + batch_op.drop_constraint('uq_flow_id', type_='unique') with op.batch_alter_table('apikey', schema=None) as batch_op: - batch_op.drop_constraint(None, type_='unique') + batch_op.drop_constraint('uq_apikey_id', type_='unique') # ### end Alembic commands ### From d9bf832d0d17d652b150c1218fd6611a181c4fc9 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 13 Dec 2023 19:10:27 -0300 Subject: [PATCH 8/8] Update version to 0.6.2 in pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index eb07a828f..7001b2692 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langflow" -version = "0.6.1" +version = "0.6.2" description = "A Python package with a built-in web application" authors = ["Logspace "] maintainers = [