Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
642c352c
Commit
642c352c
authored
Jun 25, 2024
by
Jonathan Rohde
Browse files
feat(sqlalchemy): rebase
parent
d88bd51e
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
2 additions
and
1372 deletions
+2
-1372
backend/apps/webui/internal/migrations/001_initial_schema.py
backend/apps/webui/internal/migrations/001_initial_schema.py
+0
-254
backend/apps/webui/internal/migrations/002_add_local_sharing.py
...d/apps/webui/internal/migrations/002_add_local_sharing.py
+0
-48
backend/apps/webui/internal/migrations/003_add_auth_api_key.py
...nd/apps/webui/internal/migrations/003_add_auth_api_key.py
+0
-48
backend/apps/webui/internal/migrations/004_add_archived.py
backend/apps/webui/internal/migrations/004_add_archived.py
+0
-46
backend/apps/webui/internal/migrations/005_add_updated_at.py
backend/apps/webui/internal/migrations/005_add_updated_at.py
+0
-130
backend/apps/webui/internal/migrations/006_migrate_timestamps_and_charfields.py
...ernal/migrations/006_migrate_timestamps_and_charfields.py
+0
-130
backend/apps/webui/internal/migrations/007_add_user_last_active_at.py
.../webui/internal/migrations/007_add_user_last_active_at.py
+0
-79
backend/apps/webui/internal/migrations/008_add_memory.py
backend/apps/webui/internal/migrations/008_add_memory.py
+0
-53
backend/apps/webui/internal/migrations/009_add_models.py
backend/apps/webui/internal/migrations/009_add_models.py
+0
-61
backend/apps/webui/internal/migrations/010_migrate_modelfiles_to_models.py
...i/internal/migrations/010_migrate_modelfiles_to_models.py
+0
-130
backend/apps/webui/internal/migrations/011_add_user_settings.py
...d/apps/webui/internal/migrations/011_add_user_settings.py
+0
-48
backend/apps/webui/internal/migrations/012_add_tools.py
backend/apps/webui/internal/migrations/012_add_tools.py
+0
-61
backend/apps/webui/internal/migrations/013_add_user_info.py
backend/apps/webui/internal/migrations/013_add_user_info.py
+0
-48
backend/apps/webui/internal/migrations/014_add_files.py
backend/apps/webui/internal/migrations/014_add_files.py
+0
-55
backend/apps/webui/internal/migrations/015_add_functions.py
backend/apps/webui/internal/migrations/015_add_functions.py
+0
-61
backend/apps/webui/internal/migrations/016_add_valves_and_is_active.py
...webui/internal/migrations/016_add_valves_and_is_active.py
+0
-50
backend/apps/webui/internal/migrations/017_add_user_oauth_sub.py
.../apps/webui/internal/migrations/017_add_user_oauth_sub.py
+0
-49
backend/apps/webui/internal/migrations/README.md
backend/apps/webui/internal/migrations/README.md
+0
-21
backend/migrations/versions/7e5b5dc7342b_init.py
backend/migrations/versions/7e5b5dc7342b_init.py
+2
-0
No files found.
backend/apps/webui/internal/migrations/001_initial_schema.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 001_initial_schema.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
# We perform different migrations for SQLite and other databases
# This is because SQLite is very loose with enforcing its schema, and trying to migrate other databases like SQLite
# will require per-database SQL queries.
# Instead, we assume that because external DB support was added at a later date, it is safe to assume a newer base
# schema instead of trying to migrate from an older schema.
if
isinstance
(
database
,
pw
.
SqliteDatabase
):
migrate_sqlite
(
migrator
,
database
,
fake
=
fake
)
else
:
migrate_external
(
migrator
,
database
,
fake
=
fake
)
def
migrate_sqlite
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
@
migrator
.
create_model
class
Auth
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
email
=
pw
.
CharField
(
max_length
=
255
)
password
=
pw
.
CharField
(
max_length
=
255
)
active
=
pw
.
BooleanField
()
class
Meta
:
table_name
=
"auth"
@
migrator
.
create_model
class
Chat
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
title
=
pw
.
CharField
()
chat
=
pw
.
TextField
()
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"chat"
@
migrator
.
create_model
class
ChatIdTag
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
tag_name
=
pw
.
CharField
(
max_length
=
255
)
chat_id
=
pw
.
CharField
(
max_length
=
255
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"chatidtag"
@
migrator
.
create_model
class
Document
(
pw
.
Model
):
id
=
pw
.
AutoField
()
collection_name
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
name
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
title
=
pw
.
CharField
()
filename
=
pw
.
CharField
()
content
=
pw
.
TextField
(
null
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"document"
@
migrator
.
create_model
class
Modelfile
(
pw
.
Model
):
id
=
pw
.
AutoField
()
tag_name
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
modelfile
=
pw
.
TextField
()
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"modelfile"
@
migrator
.
create_model
class
Prompt
(
pw
.
Model
):
id
=
pw
.
AutoField
()
command
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
title
=
pw
.
CharField
()
content
=
pw
.
TextField
()
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"prompt"
@
migrator
.
create_model
class
Tag
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
name
=
pw
.
CharField
(
max_length
=
255
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
data
=
pw
.
TextField
(
null
=
True
)
class
Meta
:
table_name
=
"tag"
@
migrator
.
create_model
class
User
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
name
=
pw
.
CharField
(
max_length
=
255
)
email
=
pw
.
CharField
(
max_length
=
255
)
role
=
pw
.
CharField
(
max_length
=
255
)
profile_image_url
=
pw
.
CharField
(
max_length
=
255
)
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"user"
def
migrate_external
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
@
migrator
.
create_model
class
Auth
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
email
=
pw
.
CharField
(
max_length
=
255
)
password
=
pw
.
TextField
()
active
=
pw
.
BooleanField
()
class
Meta
:
table_name
=
"auth"
@
migrator
.
create_model
class
Chat
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
title
=
pw
.
TextField
()
chat
=
pw
.
TextField
()
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"chat"
@
migrator
.
create_model
class
ChatIdTag
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
tag_name
=
pw
.
CharField
(
max_length
=
255
)
chat_id
=
pw
.
CharField
(
max_length
=
255
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"chatidtag"
@
migrator
.
create_model
class
Document
(
pw
.
Model
):
id
=
pw
.
AutoField
()
collection_name
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
name
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
title
=
pw
.
TextField
()
filename
=
pw
.
TextField
()
content
=
pw
.
TextField
(
null
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"document"
@
migrator
.
create_model
class
Modelfile
(
pw
.
Model
):
id
=
pw
.
AutoField
()
tag_name
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
modelfile
=
pw
.
TextField
()
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"modelfile"
@
migrator
.
create_model
class
Prompt
(
pw
.
Model
):
id
=
pw
.
AutoField
()
command
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
title
=
pw
.
TextField
()
content
=
pw
.
TextField
()
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"prompt"
@
migrator
.
create_model
class
Tag
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
name
=
pw
.
CharField
(
max_length
=
255
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
data
=
pw
.
TextField
(
null
=
True
)
class
Meta
:
table_name
=
"tag"
@
migrator
.
create_model
class
User
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
name
=
pw
.
CharField
(
max_length
=
255
)
email
=
pw
.
CharField
(
max_length
=
255
)
role
=
pw
.
CharField
(
max_length
=
255
)
profile_image_url
=
pw
.
TextField
()
timestamp
=
pw
.
BigIntegerField
()
class
Meta
:
table_name
=
"user"
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_model
(
"user"
)
migrator
.
remove_model
(
"tag"
)
migrator
.
remove_model
(
"prompt"
)
migrator
.
remove_model
(
"modelfile"
)
migrator
.
remove_model
(
"document"
)
migrator
.
remove_model
(
"chatidtag"
)
migrator
.
remove_model
(
"chat"
)
migrator
.
remove_model
(
"auth"
)
backend/apps/webui/internal/migrations/002_add_local_sharing.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
migrator
.
add_fields
(
"chat"
,
share_id
=
pw
.
CharField
(
max_length
=
255
,
null
=
True
,
unique
=
True
)
)
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_fields
(
"chat"
,
"share_id"
)
backend/apps/webui/internal/migrations/003_add_auth_api_key.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
migrator
.
add_fields
(
"user"
,
api_key
=
pw
.
CharField
(
max_length
=
255
,
null
=
True
,
unique
=
True
)
)
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_fields
(
"user"
,
"api_key"
)
backend/apps/webui/internal/migrations/004_add_archived.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
migrator
.
add_fields
(
"chat"
,
archived
=
pw
.
BooleanField
(
default
=
False
))
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_fields
(
"chat"
,
"archived"
)
backend/apps/webui/internal/migrations/005_add_updated_at.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
if
isinstance
(
database
,
pw
.
SqliteDatabase
):
migrate_sqlite
(
migrator
,
database
,
fake
=
fake
)
else
:
migrate_external
(
migrator
,
database
,
fake
=
fake
)
def
migrate_sqlite
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
# Adding fields created_at and updated_at to the 'chat' table
migrator
.
add_fields
(
"chat"
,
created_at
=
pw
.
DateTimeField
(
null
=
True
),
# Allow null for transition
updated_at
=
pw
.
DateTimeField
(
null
=
True
),
# Allow null for transition
)
# Populate the new fields from an existing 'timestamp' field
migrator
.
sql
(
"UPDATE chat SET created_at = timestamp, updated_at = timestamp WHERE timestamp IS NOT NULL"
)
# Now that the data has been copied, remove the original 'timestamp' field
migrator
.
remove_fields
(
"chat"
,
"timestamp"
)
# Update the fields to be not null now that they are populated
migrator
.
change_fields
(
"chat"
,
created_at
=
pw
.
DateTimeField
(
null
=
False
),
updated_at
=
pw
.
DateTimeField
(
null
=
False
),
)
def
migrate_external
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
# Adding fields created_at and updated_at to the 'chat' table
migrator
.
add_fields
(
"chat"
,
created_at
=
pw
.
BigIntegerField
(
null
=
True
),
# Allow null for transition
updated_at
=
pw
.
BigIntegerField
(
null
=
True
),
# Allow null for transition
)
# Populate the new fields from an existing 'timestamp' field
migrator
.
sql
(
"UPDATE chat SET created_at = timestamp, updated_at = timestamp WHERE timestamp IS NOT NULL"
)
# Now that the data has been copied, remove the original 'timestamp' field
migrator
.
remove_fields
(
"chat"
,
"timestamp"
)
# Update the fields to be not null now that they are populated
migrator
.
change_fields
(
"chat"
,
created_at
=
pw
.
BigIntegerField
(
null
=
False
),
updated_at
=
pw
.
BigIntegerField
(
null
=
False
),
)
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
if
isinstance
(
database
,
pw
.
SqliteDatabase
):
rollback_sqlite
(
migrator
,
database
,
fake
=
fake
)
else
:
rollback_external
(
migrator
,
database
,
fake
=
fake
)
def
rollback_sqlite
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
# Recreate the timestamp field initially allowing null values for safe transition
migrator
.
add_fields
(
"chat"
,
timestamp
=
pw
.
DateTimeField
(
null
=
True
))
# Copy the earliest created_at date back into the new timestamp field
# This assumes created_at was originally a copy of timestamp
migrator
.
sql
(
"UPDATE chat SET timestamp = created_at"
)
# Remove the created_at and updated_at fields
migrator
.
remove_fields
(
"chat"
,
"created_at"
,
"updated_at"
)
# Finally, alter the timestamp field to not allow nulls if that was the original setting
migrator
.
change_fields
(
"chat"
,
timestamp
=
pw
.
DateTimeField
(
null
=
False
))
def
rollback_external
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
# Recreate the timestamp field initially allowing null values for safe transition
migrator
.
add_fields
(
"chat"
,
timestamp
=
pw
.
BigIntegerField
(
null
=
True
))
# Copy the earliest created_at date back into the new timestamp field
# This assumes created_at was originally a copy of timestamp
migrator
.
sql
(
"UPDATE chat SET timestamp = created_at"
)
# Remove the created_at and updated_at fields
migrator
.
remove_fields
(
"chat"
,
"created_at"
,
"updated_at"
)
# Finally, alter the timestamp field to not allow nulls if that was the original setting
migrator
.
change_fields
(
"chat"
,
timestamp
=
pw
.
BigIntegerField
(
null
=
False
))
backend/apps/webui/internal/migrations/006_migrate_timestamps_and_charfields.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 006_migrate_timestamps_and_charfields.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
# Alter the tables with timestamps
migrator
.
change_fields
(
"chatidtag"
,
timestamp
=
pw
.
BigIntegerField
(),
)
migrator
.
change_fields
(
"document"
,
timestamp
=
pw
.
BigIntegerField
(),
)
migrator
.
change_fields
(
"modelfile"
,
timestamp
=
pw
.
BigIntegerField
(),
)
migrator
.
change_fields
(
"prompt"
,
timestamp
=
pw
.
BigIntegerField
(),
)
migrator
.
change_fields
(
"user"
,
timestamp
=
pw
.
BigIntegerField
(),
)
# Alter the tables with varchar to text where necessary
migrator
.
change_fields
(
"auth"
,
password
=
pw
.
TextField
(),
)
migrator
.
change_fields
(
"chat"
,
title
=
pw
.
TextField
(),
)
migrator
.
change_fields
(
"document"
,
title
=
pw
.
TextField
(),
filename
=
pw
.
TextField
(),
)
migrator
.
change_fields
(
"prompt"
,
title
=
pw
.
TextField
(),
)
migrator
.
change_fields
(
"user"
,
profile_image_url
=
pw
.
TextField
(),
)
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
if
isinstance
(
database
,
pw
.
SqliteDatabase
):
# Alter the tables with timestamps
migrator
.
change_fields
(
"chatidtag"
,
timestamp
=
pw
.
DateField
(),
)
migrator
.
change_fields
(
"document"
,
timestamp
=
pw
.
DateField
(),
)
migrator
.
change_fields
(
"modelfile"
,
timestamp
=
pw
.
DateField
(),
)
migrator
.
change_fields
(
"prompt"
,
timestamp
=
pw
.
DateField
(),
)
migrator
.
change_fields
(
"user"
,
timestamp
=
pw
.
DateField
(),
)
migrator
.
change_fields
(
"auth"
,
password
=
pw
.
CharField
(
max_length
=
255
),
)
migrator
.
change_fields
(
"chat"
,
title
=
pw
.
CharField
(),
)
migrator
.
change_fields
(
"document"
,
title
=
pw
.
CharField
(),
filename
=
pw
.
CharField
(),
)
migrator
.
change_fields
(
"prompt"
,
title
=
pw
.
CharField
(),
)
migrator
.
change_fields
(
"user"
,
profile_image_url
=
pw
.
CharField
(),
)
backend/apps/webui/internal/migrations/007_add_user_last_active_at.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
# Adding fields created_at and updated_at to the 'user' table
migrator
.
add_fields
(
"user"
,
created_at
=
pw
.
BigIntegerField
(
null
=
True
),
# Allow null for transition
updated_at
=
pw
.
BigIntegerField
(
null
=
True
),
# Allow null for transition
last_active_at
=
pw
.
BigIntegerField
(
null
=
True
),
# Allow null for transition
)
# Populate the new fields from an existing 'timestamp' field
migrator
.
sql
(
'UPDATE "user" SET created_at = timestamp, updated_at = timestamp, last_active_at = timestamp WHERE timestamp IS NOT NULL'
)
# Now that the data has been copied, remove the original 'timestamp' field
migrator
.
remove_fields
(
"user"
,
"timestamp"
)
# Update the fields to be not null now that they are populated
migrator
.
change_fields
(
"user"
,
created_at
=
pw
.
BigIntegerField
(
null
=
False
),
updated_at
=
pw
.
BigIntegerField
(
null
=
False
),
last_active_at
=
pw
.
BigIntegerField
(
null
=
False
),
)
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
# Recreate the timestamp field initially allowing null values for safe transition
migrator
.
add_fields
(
"user"
,
timestamp
=
pw
.
BigIntegerField
(
null
=
True
))
# Copy the earliest created_at date back into the new timestamp field
# This assumes created_at was originally a copy of timestamp
migrator
.
sql
(
'UPDATE "user" SET timestamp = created_at'
)
# Remove the created_at and updated_at fields
migrator
.
remove_fields
(
"user"
,
"created_at"
,
"updated_at"
,
"last_active_at"
)
# Finally, alter the timestamp field to not allow nulls if that was the original setting
migrator
.
change_fields
(
"user"
,
timestamp
=
pw
.
BigIntegerField
(
null
=
False
))
backend/apps/webui/internal/migrations/008_add_memory.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
@
migrator
.
create_model
class
Memory
(
pw
.
Model
):
id
=
pw
.
CharField
(
max_length
=
255
,
unique
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
content
=
pw
.
TextField
(
null
=
False
)
updated_at
=
pw
.
BigIntegerField
(
null
=
False
)
created_at
=
pw
.
BigIntegerField
(
null
=
False
)
class
Meta
:
table_name
=
"memory"
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_model
(
"memory"
)
backend/apps/webui/internal/migrations/009_add_models.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
@
migrator
.
create_model
class
Model
(
pw
.
Model
):
id
=
pw
.
TextField
(
unique
=
True
)
user_id
=
pw
.
TextField
()
base_model_id
=
pw
.
TextField
(
null
=
True
)
name
=
pw
.
TextField
()
meta
=
pw
.
TextField
()
params
=
pw
.
TextField
()
created_at
=
pw
.
BigIntegerField
(
null
=
False
)
updated_at
=
pw
.
BigIntegerField
(
null
=
False
)
class
Meta
:
table_name
=
"model"
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_model
(
"model"
)
backend/apps/webui/internal/migrations/010_migrate_modelfiles_to_models.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
import
json
from
utils.misc
import
parse_ollama_modelfile
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
# Fetch data from 'modelfile' table and insert into 'model' table
migrate_modelfile_to_model
(
migrator
,
database
)
# Drop the 'modelfile' table
migrator
.
remove_model
(
"modelfile"
)
def
migrate_modelfile_to_model
(
migrator
:
Migrator
,
database
:
pw
.
Database
):
ModelFile
=
migrator
.
orm
[
"modelfile"
]
Model
=
migrator
.
orm
[
"model"
]
modelfiles
=
ModelFile
.
select
()
for
modelfile
in
modelfiles
:
# Extract and transform data in Python
modelfile
.
modelfile
=
json
.
loads
(
modelfile
.
modelfile
)
meta
=
json
.
dumps
(
{
"description"
:
modelfile
.
modelfile
.
get
(
"desc"
),
"profile_image_url"
:
modelfile
.
modelfile
.
get
(
"imageUrl"
),
"ollama"
:
{
"modelfile"
:
modelfile
.
modelfile
.
get
(
"content"
)},
"suggestion_prompts"
:
modelfile
.
modelfile
.
get
(
"suggestionPrompts"
),
"categories"
:
modelfile
.
modelfile
.
get
(
"categories"
),
"user"
:
{
**
modelfile
.
modelfile
.
get
(
"user"
,
{}),
"community"
:
True
},
}
)
info
=
parse_ollama_modelfile
(
modelfile
.
modelfile
.
get
(
"content"
))
# Insert the processed data into the 'model' table
Model
.
create
(
id
=
f
"ollama-
{
modelfile
.
tag_name
}
"
,
user_id
=
modelfile
.
user_id
,
base_model_id
=
info
.
get
(
"base_model_id"
),
name
=
modelfile
.
modelfile
.
get
(
"title"
),
meta
=
meta
,
params
=
json
.
dumps
(
info
.
get
(
"params"
,
{})),
created_at
=
modelfile
.
timestamp
,
updated_at
=
modelfile
.
timestamp
,
)
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
recreate_modelfile_table
(
migrator
,
database
)
move_data_back_to_modelfile
(
migrator
,
database
)
migrator
.
remove_model
(
"model"
)
def
recreate_modelfile_table
(
migrator
:
Migrator
,
database
:
pw
.
Database
):
query
=
"""
CREATE TABLE IF NOT EXISTS modelfile (
user_id TEXT,
tag_name TEXT,
modelfile JSON,
timestamp BIGINT
)
"""
migrator
.
sql
(
query
)
def
move_data_back_to_modelfile
(
migrator
:
Migrator
,
database
:
pw
.
Database
):
Model
=
migrator
.
orm
[
"model"
]
Modelfile
=
migrator
.
orm
[
"modelfile"
]
models
=
Model
.
select
()
for
model
in
models
:
# Extract and transform data in Python
meta
=
json
.
loads
(
model
.
meta
)
modelfile_data
=
{
"title"
:
model
.
name
,
"desc"
:
meta
.
get
(
"description"
),
"imageUrl"
:
meta
.
get
(
"profile_image_url"
),
"content"
:
meta
.
get
(
"ollama"
,
{}).
get
(
"modelfile"
),
"suggestionPrompts"
:
meta
.
get
(
"suggestion_prompts"
),
"categories"
:
meta
.
get
(
"categories"
),
"user"
:
{
k
:
v
for
k
,
v
in
meta
.
get
(
"user"
,
{}).
items
()
if
k
!=
"community"
},
}
# Insert the processed data back into the 'modelfile' table
Modelfile
.
create
(
user_id
=
model
.
user_id
,
tag_name
=
model
.
id
,
modelfile
=
modelfile_data
,
timestamp
=
model
.
created_at
,
)
backend/apps/webui/internal/migrations/011_add_user_settings.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
# Adding fields settings to the 'user' table
migrator
.
add_fields
(
"user"
,
settings
=
pw
.
TextField
(
null
=
True
))
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
# Remove the settings field
migrator
.
remove_fields
(
"user"
,
"settings"
)
backend/apps/webui/internal/migrations/012_add_tools.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
@
migrator
.
create_model
class
Tool
(
pw
.
Model
):
id
=
pw
.
TextField
(
unique
=
True
)
user_id
=
pw
.
TextField
()
name
=
pw
.
TextField
()
content
=
pw
.
TextField
()
specs
=
pw
.
TextField
()
meta
=
pw
.
TextField
()
created_at
=
pw
.
BigIntegerField
(
null
=
False
)
updated_at
=
pw
.
BigIntegerField
(
null
=
False
)
class
Meta
:
table_name
=
"tool"
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_model
(
"tool"
)
backend/apps/webui/internal/migrations/013_add_user_info.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 002_add_local_sharing.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
# Adding fields info to the 'user' table
migrator
.
add_fields
(
"user"
,
info
=
pw
.
TextField
(
null
=
True
))
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
# Remove the settings field
migrator
.
remove_fields
(
"user"
,
"info"
)
backend/apps/webui/internal/migrations/014_add_files.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
@
migrator
.
create_model
class
File
(
pw
.
Model
):
id
=
pw
.
TextField
(
unique
=
True
)
user_id
=
pw
.
TextField
()
filename
=
pw
.
TextField
()
meta
=
pw
.
TextField
()
created_at
=
pw
.
BigIntegerField
(
null
=
False
)
class
Meta
:
table_name
=
"file"
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_model
(
"file"
)
backend/apps/webui/internal/migrations/015_add_functions.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
@
migrator
.
create_model
class
Function
(
pw
.
Model
):
id
=
pw
.
TextField
(
unique
=
True
)
user_id
=
pw
.
TextField
()
name
=
pw
.
TextField
()
type
=
pw
.
TextField
()
content
=
pw
.
TextField
()
meta
=
pw
.
TextField
()
created_at
=
pw
.
BigIntegerField
(
null
=
False
)
updated_at
=
pw
.
BigIntegerField
(
null
=
False
)
class
Meta
:
table_name
=
"function"
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_model
(
"function"
)
backend/apps/webui/internal/migrations/016_add_valves_and_is_active.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 009_add_models.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
migrator
.
add_fields
(
"tool"
,
valves
=
pw
.
TextField
(
null
=
True
))
migrator
.
add_fields
(
"function"
,
valves
=
pw
.
TextField
(
null
=
True
))
migrator
.
add_fields
(
"function"
,
is_active
=
pw
.
BooleanField
(
default
=
False
))
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_fields
(
"tool"
,
"valves"
)
migrator
.
remove_fields
(
"function"
,
"valves"
)
migrator
.
remove_fields
(
"function"
,
"is_active"
)
backend/apps/webui/internal/migrations/017_add_user_oauth_sub.py
deleted
100644 → 0
View file @
d88bd51e
"""Peewee migrations -- 017_add_user_oauth_sub.py.
Some examples (model - class or model name)::
> Model = migrator.orm['table_name'] # Return model in current state by name
> Model = migrator.ModelClass # Return model in current state by name
> migrator.sql(sql) # Run custom SQL
> migrator.run(func, *args, **kwargs) # Run python function with the given args
> migrator.create_model(Model) # Create a model (could be used as decorator)
> migrator.remove_model(model, cascade=True) # Remove a model
> migrator.add_fields(model, **fields) # Add fields to a model
> migrator.change_fields(model, **fields) # Change fields
> migrator.remove_fields(model, *field_names, cascade=True)
> migrator.rename_field(model, old_field_name, new_field_name)
> migrator.rename_table(model, new_table_name)
> migrator.add_index(model, *col_names, unique=False)
> migrator.add_not_null(model, *field_names)
> migrator.add_default(model, field_name, default)
> migrator.add_constraint(model, name, sql)
> migrator.drop_index(model, *col_names)
> migrator.drop_not_null(model, *field_names)
> migrator.drop_constraints(model, *constraints)
"""
from
contextlib
import
suppress
import
peewee
as
pw
from
peewee_migrate
import
Migrator
with
suppress
(
ImportError
):
import
playhouse.postgres_ext
as
pw_pext
def
migrate
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your migrations here."""
migrator
.
add_fields
(
"user"
,
oauth_sub
=
pw
.
TextField
(
null
=
True
,
unique
=
True
),
)
def
rollback
(
migrator
:
Migrator
,
database
:
pw
.
Database
,
*
,
fake
=
False
):
"""Write your rollback migrations here."""
migrator
.
remove_fields
(
"user"
,
"oauth_sub"
)
backend/apps/webui/internal/migrations/README.md
deleted
100644 → 0
View file @
d88bd51e
# Database Migrations
This directory contains all the database migrations for the web app.
Migrations are done using the
[
`peewee-migrate`
](
https://github.com/klen/peewee_migrate
)
library.
Migrations are automatically ran at app startup.
## Creating a migration
Have you made a change to the schema of an existing model?
You will need to create a migration file to ensure that existing databases are updated for backwards compatibility.
1.
Have a database file (
`webui.db`
) that has the old schema prior to any of your changes.
2.
Make your changes to the models.
3.
From the
`backend`
directory, run the following command:
```
bash
pw_migrate create
--auto
--auto-source
apps.webui.models
--database
sqlite:///
${
SQLITE_DB
}
--directory
apps/web/internal/migrations
${
MIGRATION_NAME
}
```
-
`$SQLITE_DB`
should be the path to the database file.
-
`$MIGRATION_NAME`
should be a descriptive name for the migration.
4.
The migration file will be created in the
`apps/web/internal/migrations`
directory.
backend/migrations/versions/7e5b5dc7342b_init.py
View file @
642c352c
...
...
@@ -176,8 +176,10 @@ def upgrade() -> None:
sa
.
Column
(
"api_key"
,
sa
.
String
(),
nullable
=
True
),
sa
.
Column
(
"settings"
,
apps
.
webui
.
internal
.
db
.
JSONField
(),
nullable
=
True
),
sa
.
Column
(
"info"
,
apps
.
webui
.
internal
.
db
.
JSONField
(),
nullable
=
True
),
sa
.
Column
(
'oauth_sub'
,
sa
.
Text
(),
nullable
=
True
),
sa
.
PrimaryKeyConstraint
(
"id"
),
sa
.
UniqueConstraint
(
"api_key"
),
sa
.
UniqueConstraint
(
"oauth_sub"
),
)
# ### end Alembic commands ###
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment