mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-13 00:38:06 +00:00
364 lines
13 KiB
Python
364 lines
13 KiB
Python
from io import BytesIO
|
|
|
|
from django.contrib.auth import get_user_model
|
|
from django.contrib.auth.hashers import make_password
|
|
from django.db import transaction
|
|
|
|
from faker import Faker
|
|
|
|
from baserow.contrib.database.fields.models import Field, SelectOption
|
|
from baserow.contrib.database.fields.registries import field_type_registry
|
|
from baserow.contrib.database.models import Database
|
|
from baserow.contrib.database.rows.handler import RowHandler
|
|
from baserow.contrib.database.table.handler import TableHandler
|
|
from baserow.contrib.database.table.models import Table
|
|
from baserow.core.handler import CoreHandler
|
|
from baserow.core.user_files.handler import UserFileHandler
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
@transaction.atomic
|
|
def load_test_data():
|
|
fake = Faker()
|
|
print("Add basic data...")
|
|
|
|
user = User.objects.get(email="admin@baserow.io")
|
|
workspace = user.workspaceuser_set.get(workspace__name="Acme Corp").workspace
|
|
|
|
try:
|
|
database = Database.objects.get(name="Back to local", trashed=False)
|
|
except Database.DoesNotExist:
|
|
database = CoreHandler().create_application(
|
|
user, workspace, "database", name="Back to local"
|
|
)
|
|
|
|
try:
|
|
products_table = Table.objects.get(name="Products", database=database)
|
|
except Table.DoesNotExist:
|
|
products_table = TableHandler().create_table_and_fields(
|
|
user,
|
|
database,
|
|
name="Products",
|
|
fields=[
|
|
("Name", "text", {}),
|
|
(
|
|
"Category",
|
|
"single_select",
|
|
{},
|
|
),
|
|
("Notes", "long_text", {"field_options": {"width": 400}}),
|
|
],
|
|
)
|
|
|
|
select_field = Field.objects.get(table=products_table, name="Category")
|
|
select_by_name = {}
|
|
|
|
for order, option in enumerate(
|
|
[
|
|
{"color": "dark-green", "value": "Fruit & Vegetable"},
|
|
{"color": "light-orange", "value": "Dairy"},
|
|
{"color": "dark-red", "value": "Meat"},
|
|
{"color": "blue", "value": "Fish"},
|
|
{"color": "dark-gray", "value": "Bakery"},
|
|
{"color": "dark-blue", "value": "Beverage"},
|
|
{"color": "light-green", "value": "Grocery"},
|
|
]
|
|
):
|
|
select_option = SelectOption.objects.create(
|
|
field=select_field,
|
|
order=order,
|
|
value=option["value"],
|
|
color=option["color"],
|
|
)
|
|
select_by_name[select_option.value] = select_option.id
|
|
|
|
data = [
|
|
("Bread", select_by_name["Bakery"], fake.sentence(nb_words=10)),
|
|
("Croissant", select_by_name["Bakery"], fake.sentence(nb_words=10)),
|
|
("Vine", select_by_name["Beverage"], fake.sentence(nb_words=10)),
|
|
("Beer", select_by_name["Beverage"], fake.sentence(nb_words=5)),
|
|
("Milk", select_by_name["Dairy"], fake.sentence(nb_words=10)),
|
|
("Cheese", select_by_name["Dairy"], fake.sentence(nb_words=10)),
|
|
("Butter", select_by_name["Dairy"], fake.sentence(nb_words=15)),
|
|
("Fish", select_by_name["Fish"], fake.sentence(nb_words=10)),
|
|
("Apple", select_by_name["Fruit & Vegetable"], fake.sentence(nb_words=10)),
|
|
("Grapes", select_by_name["Fruit & Vegetable"], fake.sentence(nb_words=3)),
|
|
("Carrot", select_by_name["Fruit & Vegetable"], fake.sentence(nb_words=10)),
|
|
("Onion", select_by_name["Fruit & Vegetable"], fake.sentence(nb_words=10)),
|
|
("Flour", select_by_name["Grocery"], fake.sentence(nb_words=10)),
|
|
("Honey", select_by_name["Grocery"], fake.sentence(nb_words=5)),
|
|
("Oil", select_by_name["Grocery"], fake.sentence(nb_words=10)),
|
|
("Pork", select_by_name["Meat"], fake.sentence(nb_words=10)),
|
|
("Beef", select_by_name["Meat"], fake.sentence(nb_words=5)),
|
|
("Chicken", select_by_name["Meat"], fake.sentence(nb_words=10)),
|
|
("Rabbit", select_by_name["Meat"], fake.sentence(nb_words=10)),
|
|
]
|
|
|
|
RowHandler().import_rows(
|
|
user, products_table, data=data, send_realtime_update=False
|
|
)
|
|
|
|
try:
|
|
suppliers_table = Table.objects.get(name="Suppliers", database=database)
|
|
except Table.DoesNotExist:
|
|
suppliers_table = TableHandler().create_table_and_fields(
|
|
user,
|
|
database,
|
|
name="Suppliers",
|
|
fields=[
|
|
("Name", "text", {}),
|
|
("Products", "link_row", {"link_row_table": products_table}),
|
|
("Production", "rating", {}),
|
|
("Certification", "multiple_select", {}),
|
|
("Image", "file", {}),
|
|
("Notes", "long_text", {"field_options": {"width": 400}}),
|
|
],
|
|
)
|
|
|
|
for i in range(20):
|
|
image = fake.image()
|
|
UserFileHandler().upload_user_file(user, f"image_{i}.png", BytesIO(image))
|
|
|
|
products = products_table.get_model(attribute_names=True)
|
|
|
|
select_field = Field.objects.get(table=suppliers_table, name="Certification")
|
|
for order, option in enumerate(
|
|
[
|
|
{"color": "dark-green", "value": "Organic"},
|
|
{"color": "light-orange", "value": "Fair trade"},
|
|
{"color": "light-green", "value": "Natural"},
|
|
{"color": "light-blue", "value": "Animal protection"},
|
|
{"color": "blue", "value": "Eco"},
|
|
{"color": "dark-blue", "value": "Equitable"},
|
|
]
|
|
):
|
|
select_option = SelectOption.objects.create(
|
|
field=select_field,
|
|
order=order,
|
|
value=option["value"],
|
|
color=option["color"],
|
|
)
|
|
select_by_name[select_option.value] = select_option.id
|
|
|
|
products_by_name = {p.name: p.id for p in products.objects.all()}
|
|
certif_by_name = {p.value: p.id for p in select_field.select_options.all()}
|
|
|
|
image_field = Field.objects.get(table=suppliers_table, name="Image")
|
|
file_field_type = field_type_registry.get("file")
|
|
|
|
cache = {}
|
|
|
|
random_file_1 = file_field_type.random_value(image_field, fake, cache)
|
|
random_file_2 = file_field_type.random_value(image_field, fake, cache)
|
|
random_file_3 = file_field_type.random_value(image_field, fake, cache)
|
|
random_file_4 = file_field_type.random_value(image_field, fake, cache)
|
|
|
|
data = [
|
|
(
|
|
"The happy cow",
|
|
[products_by_name["Milk"], products_by_name["Butter"]],
|
|
3,
|
|
[certif_by_name["Animal protection"]],
|
|
random_file_1,
|
|
"Animals here are happy.",
|
|
),
|
|
(
|
|
"Jack's farm",
|
|
[
|
|
products_by_name["Carrot"],
|
|
products_by_name["Onion"],
|
|
products_by_name["Chicken"],
|
|
],
|
|
5,
|
|
[certif_by_name["Organic"], certif_by_name["Equitable"]],
|
|
random_file_2,
|
|
"Good guy.",
|
|
),
|
|
(
|
|
"Horse & crocodile",
|
|
[products_by_name["Beef"]],
|
|
2,
|
|
[certif_by_name["Fair trade"]],
|
|
random_file_3,
|
|
"",
|
|
),
|
|
(
|
|
"Vines LTD",
|
|
[products_by_name["Vine"], products_by_name["Grapes"]],
|
|
4,
|
|
[
|
|
certif_by_name["Organic"],
|
|
certif_by_name["Natural"],
|
|
],
|
|
random_file_4,
|
|
"Excellent white & red wines.",
|
|
),
|
|
]
|
|
|
|
RowHandler().import_rows(
|
|
user, suppliers_table, data=data, send_realtime_update=False
|
|
)
|
|
|
|
try:
|
|
retailers_table = Table.objects.get(name="Retailers", database=database)
|
|
except Table.DoesNotExist:
|
|
retailers_table = TableHandler().create_table_and_fields(
|
|
user,
|
|
database,
|
|
name="Retailers",
|
|
fields=[
|
|
("Name", "text", {}),
|
|
("Suppliers", "link_row", {"link_row_table": suppliers_table}),
|
|
("Rating", "rating", {}),
|
|
("Notes", "long_text", {"field_options": {"width": 400}}),
|
|
],
|
|
)
|
|
|
|
suppliers = suppliers_table.get_model(attribute_names=True)
|
|
suppliers_by_name = {p.name: p.id for p in suppliers.objects.all()}
|
|
|
|
data = [
|
|
(
|
|
"All from the farm",
|
|
[suppliers_by_name["The happy cow"], suppliers_by_name["Jack's farm"]],
|
|
3,
|
|
fake.sentence(nb_words=10),
|
|
),
|
|
(
|
|
"My little supermarket",
|
|
[suppliers_by_name["Vines LTD"]],
|
|
1,
|
|
fake.sentence(nb_words=10),
|
|
),
|
|
(
|
|
"Organic4U",
|
|
[suppliers_by_name["The happy cow"]],
|
|
5,
|
|
fake.sentence(nb_words=10),
|
|
),
|
|
(
|
|
"Ecomarket",
|
|
[
|
|
suppliers_by_name["Horse & crocodile"],
|
|
suppliers_by_name["Jack's farm"],
|
|
],
|
|
3,
|
|
fake.sentence(nb_words=10),
|
|
),
|
|
(
|
|
"Welcome to the farm",
|
|
[suppliers_by_name["The happy cow"]],
|
|
4,
|
|
fake.sentence(nb_words=10),
|
|
),
|
|
]
|
|
|
|
RowHandler().import_rows(
|
|
user, retailers_table, data=data, send_realtime_update=False
|
|
)
|
|
|
|
try:
|
|
user_accounts_table = Table.objects.get(name="User Accounts", database=database)
|
|
except Table.DoesNotExist:
|
|
user_accounts_table = TableHandler().create_table_and_fields(
|
|
user,
|
|
database,
|
|
name="User Accounts",
|
|
fields=[
|
|
("Username", "text", {}),
|
|
("Email", "email", {}),
|
|
("Password", "password", {}),
|
|
("Role", "text", {}),
|
|
("Date Joined", "date", {}),
|
|
("Subscription Type", "single_select", {}),
|
|
("Profile Picture", "file", {}),
|
|
("Bio", "long_text", {"field_options": {"width": 400}}),
|
|
],
|
|
)
|
|
|
|
for i in range(20):
|
|
image = fake.image()
|
|
UserFileHandler().upload_user_file(
|
|
user, f"profile_pic_{i}.png", BytesIO(image)
|
|
)
|
|
|
|
select_field = Field.objects.get(
|
|
table=user_accounts_table, name="Subscription Type"
|
|
)
|
|
for order, option in enumerate(
|
|
[
|
|
{"color": "gold", "value": "Gold"},
|
|
{"color": "silver", "value": "Silver"},
|
|
{"color": "bronze", "value": "Bronze"},
|
|
]
|
|
):
|
|
SelectOption.objects.create(
|
|
field=select_field,
|
|
order=order,
|
|
value=option["value"],
|
|
color=option["color"],
|
|
)
|
|
|
|
subscription_by_name = {
|
|
p.value: p.id for p in select_field.select_options.all()
|
|
}
|
|
|
|
image_field = Field.objects.get(
|
|
table=user_accounts_table, name="Profile Picture"
|
|
)
|
|
file_field_type = field_type_registry.get("file")
|
|
|
|
cache = {}
|
|
|
|
random_file_1 = file_field_type.random_value(image_field, fake, cache)
|
|
random_file_2 = file_field_type.random_value(image_field, fake, cache)
|
|
random_file_3 = file_field_type.random_value(image_field, fake, cache)
|
|
random_file_4 = file_field_type.random_value(image_field, fake, cache)
|
|
|
|
data = [
|
|
(
|
|
"user1",
|
|
"user1@baserow.io",
|
|
make_password("password"),
|
|
"admin",
|
|
"2020-01-01",
|
|
subscription_by_name["Gold"],
|
|
random_file_1,
|
|
"Just a user bio.",
|
|
),
|
|
(
|
|
"user2",
|
|
"user2@baserow.io",
|
|
make_password("password"),
|
|
"student",
|
|
"2021-02-02",
|
|
subscription_by_name["Silver"],
|
|
random_file_2,
|
|
"Another user bio.",
|
|
),
|
|
(
|
|
"user3",
|
|
"user3@baserow.io",
|
|
make_password("password"),
|
|
"teacher",
|
|
"2022-03-03",
|
|
subscription_by_name["Bronze"],
|
|
random_file_3,
|
|
"",
|
|
),
|
|
(
|
|
"user4",
|
|
"user4@baserow.io",
|
|
make_password("password"),
|
|
"student",
|
|
"2023-04-04",
|
|
subscription_by_name["Gold"],
|
|
random_file_4,
|
|
"Loves coding and cats.",
|
|
),
|
|
]
|
|
|
|
RowHandler().import_rows(
|
|
user, user_accounts_table, data=data, send_realtime_update=False
|
|
)
|