Merge remote-tracking branch 'origin/dev' into zustand/io/migration
This commit is contained in:
commit
d59a8836b6
5 changed files with 123 additions and 7 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "langflow"
|
name = "langflow"
|
||||||
version = "0.6.5a9"
|
version = "0.6.5a12"
|
||||||
description = "A Python package with a built-in web application"
|
description = "A Python package with a built-in web application"
|
||||||
authors = ["Logspace <contact@logspace.ai>"]
|
authors = ["Logspace <contact@logspace.ai>"]
|
||||||
maintainers = [
|
maintainers = [
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
"""Add unique constraints
|
||||||
|
|
||||||
|
Revision ID: b2fa308044b5
|
||||||
|
Revises: 0b8757876a7c
|
||||||
|
Create Date: 2024-01-26 13:31:14.797548
|
||||||
|
|
||||||
|
"""
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
import sqlalchemy as sa
|
||||||
|
import sqlmodel
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = 'b2fa308044b5'
|
||||||
|
down_revision: Union[str, None] = '0b8757876a7c'
|
||||||
|
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! ###
|
||||||
|
try:
|
||||||
|
op.drop_table('flowstyle')
|
||||||
|
with op.batch_alter_table('flow', schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column('is_component', sa.Boolean(), nullable=True))
|
||||||
|
batch_op.add_column(sa.Column('updated_at', sa.DateTime(), nullable=True))
|
||||||
|
batch_op.add_column(sa.Column('folder', sqlmodel.sql.sqltypes.AutoString(), nullable=True))
|
||||||
|
batch_op.add_column(sa.Column('user_id', sqlmodel.sql.sqltypes.GUID(), nullable=True))
|
||||||
|
batch_op.create_index(batch_op.f('ix_flow_user_id'), ['user_id'], unique=False)
|
||||||
|
batch_op.create_foreign_key(None, 'user', ['user_id'], ['id'])
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
try:
|
||||||
|
with op.batch_alter_table('flow', schema=None) as batch_op:
|
||||||
|
batch_op.drop_constraint(None, type_='foreignkey')
|
||||||
|
batch_op.drop_index(batch_op.f('ix_flow_user_id'))
|
||||||
|
batch_op.drop_column('user_id')
|
||||||
|
batch_op.drop_column('folder')
|
||||||
|
batch_op.drop_column('updated_at')
|
||||||
|
batch_op.drop_column('is_component')
|
||||||
|
|
||||||
|
op.create_table('flowstyle',
|
||||||
|
sa.Column('color', sa.VARCHAR(), nullable=False),
|
||||||
|
sa.Column('emoji', sa.VARCHAR(), nullable=False),
|
||||||
|
sa.Column('flow_id', sa.CHAR(length=32), nullable=True),
|
||||||
|
sa.Column('id', sa.CHAR(length=32), nullable=False),
|
||||||
|
sa.ForeignKeyConstraint(['flow_id'], ['flow.id'], ),
|
||||||
|
sa.PrimaryKeyConstraint('id'),
|
||||||
|
sa.UniqueConstraint('id')
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
"""New fixes
|
||||||
|
|
||||||
|
Revision ID: bc2f01c40e4a
|
||||||
|
Revises: b2fa308044b5
|
||||||
|
Create Date: 2024-01-26 13:34:14.496769
|
||||||
|
|
||||||
|
"""
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
import sqlalchemy as sa
|
||||||
|
import sqlmodel
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = 'bc2f01c40e4a'
|
||||||
|
down_revision: Union[str, None] = 'b2fa308044b5'
|
||||||
|
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! ###
|
||||||
|
try:
|
||||||
|
with op.batch_alter_table('flow', schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column('is_component', sa.Boolean(), nullable=True))
|
||||||
|
batch_op.add_column(sa.Column('updated_at', sa.DateTime(), nullable=True))
|
||||||
|
batch_op.add_column(sa.Column('folder', sqlmodel.sql.sqltypes.AutoString(), nullable=True))
|
||||||
|
batch_op.add_column(sa.Column('user_id', sqlmodel.sql.sqltypes.GUID(), nullable=True))
|
||||||
|
batch_op.create_index(batch_op.f('ix_flow_user_id'), ['user_id'], unique=False)
|
||||||
|
batch_op.create_foreign_key('flow_user_id_fkey'
|
||||||
|
, 'user', ['user_id'], ['id'])
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
try:
|
||||||
|
with op.batch_alter_table('flow', schema=None) as batch_op:
|
||||||
|
batch_op.drop_constraint('flow_user_id_fkey', type_='foreignkey')
|
||||||
|
batch_op.drop_index(batch_op.f('ix_flow_user_id'))
|
||||||
|
batch_op.drop_column('user_id')
|
||||||
|
batch_op.drop_column('folder')
|
||||||
|
batch_op.drop_column('updated_at')
|
||||||
|
batch_op.drop_column('is_component')
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from fastapi import Request, Response, APIRouter, Depends, HTTPException, status
|
from fastapi import APIRouter, Depends, HTTPException, Request, Response, status
|
||||||
from fastapi.security import OAuth2PasswordRequestForm
|
from fastapi.security import OAuth2PasswordRequestForm
|
||||||
from sqlmodel import Session
|
from sqlmodel import Session
|
||||||
|
|
||||||
|
|
@ -33,8 +33,8 @@ async def login_to_get_access_token(
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
tokens = create_user_tokens(user_id=user.id, db=db, update_last_login=True)
|
tokens = create_user_tokens(user_id=user.id, db=db, update_last_login=True)
|
||||||
response.set_cookie("refresh_token_lf", tokens["refresh_token"], httponly=True, secure=True, samesite="strict")
|
response.set_cookie("refresh_token_lf", tokens["refresh_token"], httponly=True)
|
||||||
response.set_cookie("access_token_lf", tokens["access_token"], httponly=False, secure=True, samesite="strict")
|
response.set_cookie("access_token_lf", tokens["access_token"], httponly=False)
|
||||||
return tokens
|
return tokens
|
||||||
else:
|
else:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
|
|
@ -50,7 +50,7 @@ async def auto_login(
|
||||||
):
|
):
|
||||||
if settings_service.auth_settings.AUTO_LOGIN:
|
if settings_service.auth_settings.AUTO_LOGIN:
|
||||||
tokens = create_user_longterm_token(db)
|
tokens = create_user_longterm_token(db)
|
||||||
response.set_cookie("access_token_lf", tokens["access_token"], httponly=False, secure=True, samesite="strict")
|
response.set_cookie("access_token_lf", tokens["access_token"], httponly=False)
|
||||||
return tokens
|
return tokens
|
||||||
|
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
|
|
@ -67,8 +67,8 @@ async def refresh_token(request: Request, response: Response):
|
||||||
token = request.cookies.get("refresh_token_lf")
|
token = request.cookies.get("refresh_token_lf")
|
||||||
if token:
|
if token:
|
||||||
tokens = create_refresh_token(token)
|
tokens = create_refresh_token(token)
|
||||||
response.set_cookie("refresh_token_lf", tokens["refresh_token"], httponly=True, secure=True, samesite="strict")
|
response.set_cookie("refresh_token_lf", tokens["refresh_token"], httponly=True)
|
||||||
response.set_cookie("access_token_lf", tokens["access_token"], httponly=False, secure=True, samesite="strict")
|
response.set_cookie("access_token_lf", tokens["access_token"], httponly=False)
|
||||||
return tokens
|
return tokens
|
||||||
else:
|
else:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,13 @@ export default function GenericNode({
|
||||||
countHandles();
|
countHandles();
|
||||||
}, [data, data.node]);
|
}, [data, data.node]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!selected) {
|
||||||
|
setInputName(false);
|
||||||
|
setInputDescription(false);
|
||||||
|
}
|
||||||
|
}, [selected]);
|
||||||
|
|
||||||
// State for outline color
|
// State for outline color
|
||||||
const isBuilding = useFlowStore((state) => state.isBuilding);
|
const isBuilding = useFlowStore((state) => state.isBuilding);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue