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
15105559
"git@developer.sourcefind.cn:wangsen/mineru.git" did not exist on "899c79189cd3af91337ca750639e61206bffc121"
Commit
15105559
authored
Apr 01, 2024
by
Jun Siang Cheah
Committed by
Timothy J. Baek
Apr 02, 2024
Browse files
feat: add ability to run db migrations
parent
7978adbf
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
175 additions
and
1 deletion
+175
-1
backend/apps/web/internal/db.py
backend/apps/web/internal/db.py
+4
-1
backend/apps/web/internal/migrations/001_initial_schema.py
backend/apps/web/internal/migrations/001_initial_schema.py
+149
-0
backend/apps/web/internal/migrations/README.md
backend/apps/web/internal/migrations/README.md
+21
-0
backend/requirements.txt
backend/requirements.txt
+1
-0
No files found.
backend/apps/web/internal/db.py
View file @
15105559
from
peewee
import
*
from
peewee_migrate
import
Router
from
config
import
SRC_LOG_LEVELS
,
DATA_DIR
import
os
import
logging
...
...
@@ -16,4 +17,6 @@ else:
DB
=
SqliteDatabase
(
f
"
{
DATA_DIR
}
/webui.db"
)
DB
.
connect
()
router
=
Router
(
DB
,
migrate_dir
=
"apps/web/internal/migrations"
,
logger
=
log
)
router
.
run
()
DB
.
connect
(
reuse_if_open
=
True
)
backend/apps/web/internal/migrations/001_initial_schema.py
0 → 100644
View file @
15105559
"""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."""
@
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
(
max_length
=
255
)
chat
=
pw
.
TextField
()
timestamp
=
pw
.
DateField
()
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
.
DateField
()
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
(
max_length
=
255
)
filename
=
pw
.
CharField
(
max_length
=
255
)
content
=
pw
.
TextField
(
null
=
True
)
user_id
=
pw
.
CharField
(
max_length
=
255
)
timestamp
=
pw
.
DateField
()
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
.
DateField
()
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
(
max_length
=
255
)
content
=
pw
.
TextField
()
timestamp
=
pw
.
DateField
()
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
.
DateField
()
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/web/internal/migrations/README.md
0 → 100644
View file @
15105559
# 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.web.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/requirements.txt
View file @
15105559
...
...
@@ -14,6 +14,7 @@ uuid
requests
aiohttp
peewee
peewee-migrate
bcrypt
litellm==1.30.7
...
...
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