1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-04-27 22:16:13 +00:00
bramw_baserow/backend/src/baserow/contrib/builder/populate.py
2024-05-02 14:25:42 +00:00

342 lines
11 KiB
Python

from django.contrib.auth import get_user_model
from django.db import transaction
from faker import Faker
from baserow.contrib.builder.data_sources.handler import DataSourceHandler
from baserow.contrib.builder.domains.models import CustomDomain
from baserow.contrib.builder.elements.handler import ElementHandler
from baserow.contrib.builder.elements.models import CollectionField
from baserow.contrib.builder.elements.registries import element_type_registry
from baserow.contrib.builder.models import Builder
from baserow.contrib.builder.pages.handler import PageHandler
from baserow.contrib.builder.pages.models import Page
from baserow.contrib.database.fields.models import Field
from baserow.contrib.database.table.models import Table
from baserow.contrib.database.views.models import GridView
from baserow.core.handler import CoreHandler
from baserow.core.integrations.handler import IntegrationHandler
from baserow.core.integrations.models import Integration
from baserow.core.integrations.registries import integration_type_registry
from baserow.core.services.registries import service_type_registry
User = get_user_model()
@transaction.atomic
def load_test_data():
fake = Faker()
print("Add builder basic data...")
user = User.objects.get(email="admin@baserow.io")
workspace = user.workspaceuser_set.get(workspace__name="Acme Corp").workspace
try:
builder = Builder.objects.get(
name="Back to local website", workspace__isnull=False, trashed=False
)
except Builder.DoesNotExist:
builder = CoreHandler().create_application(
user, workspace, "builder", name="Back to local website"
)
CustomDomain.objects.filter(domain_name="test1.getbaserow.io").delete()
CustomDomain.objects.filter(domain_name="test2.getbaserow.io").delete()
CustomDomain.objects.filter(domain_name="test3.getbaserow.io").delete()
CustomDomain.objects.create(
builder=builder, domain_name="test1.getbaserow.io", order=1
)
CustomDomain.objects.create(
builder=builder, domain_name="test2.getbaserow.io", order=2
)
CustomDomain.objects.create(
builder=builder, domain_name="test3.getbaserow.io", order=3
)
integration_type = integration_type_registry.get("local_baserow")
try:
integration = Integration.objects.get(
name="Local baserow", application__trashed=False, application_id=builder.id
)
except Integration.DoesNotExist:
integration = IntegrationHandler().create_integration(
integration_type, builder, name="Local baserow", authorized_user=user
)
heading_element_type = element_type_registry.get("heading")
text_element_type = element_type_registry.get("text")
table_element_type = element_type_registry.get("table")
link_element_type = element_type_registry.get("link")
try:
homepage = Page.objects.get(name="Homepage", builder=builder)
except Page.DoesNotExist:
homepage = PageHandler().create_page(builder, "Homepage", "/")
ElementHandler().create_element(
heading_element_type, homepage, value='"Back to local"', level=1
)
ElementHandler().create_element(
heading_element_type, homepage, value='"Buy closer, Buy better"', level=2
)
content = "\n".join(fake.paragraphs(nb=2))
ElementHandler().create_element(
text_element_type,
homepage,
value=f'"{content}"',
)
ElementHandler().create_element(
heading_element_type,
homepage,
value='"Give more sense to what you eat"',
level=2,
)
content = "\n".join(fake.paragraphs(nb=2))
ElementHandler().create_element(
text_element_type,
homepage,
value=f'"{content}"',
)
try:
terms = Page.objects.get(name="Terms", builder=builder)
except Page.DoesNotExist:
terms = PageHandler().create_page(builder, "Terms", "/terms")
ElementHandler().create_element(
heading_element_type, terms, value='"Terms"', level=1
)
ElementHandler().create_element(
heading_element_type, terms, value='"Article 1. General"', level=2
)
content = "\n".join(fake.paragraphs(nb=3))
ElementHandler().create_element(
text_element_type,
terms,
value=f'"{content}"',
)
ElementHandler().create_element(
heading_element_type,
terms,
value='"Article 2. Services"',
level=2,
)
content = "\n".join(fake.paragraphs(nb=3))
ElementHandler().create_element(
text_element_type,
terms,
value=(f'"{content}"'),
)
ElementHandler().create_element(
heading_element_type,
terms,
value='"Article 3. Data"',
level=2,
)
content = "\n".join(fake.paragraphs(nb=3))
ElementHandler().create_element(
text_element_type,
terms,
value=(f'"{content}"'),
)
ElementHandler().create_element(
link_element_type,
terms,
value='"Home"',
variant="button",
alignment="right",
navigation_type="page",
navigate_to_page=homepage,
)
# Button for homepage
ElementHandler().create_element(
link_element_type,
homepage,
value='"See terms"',
variant="button",
alignment="right",
navigation_type="page",
navigate_to_page=terms,
)
ElementHandler().create_element(
link_element_type,
homepage,
value='"Visit Baserow"',
variant="link",
alignment="center",
navigation_type="custom",
target="blank",
navigate_to_url='"https://baserow.io"',
)
table = Table.objects.get(
name="Products",
database__workspace=workspace,
database__trashed=False,
)
field_name = Field.objects.get(table=table, name="Name")
field_notes = Field.objects.get(table=table, name="Notes")
field_category = Field.objects.get(table=table, name="Category")
try:
product_detail = Page.objects.get(name="Product detail", builder=builder)
except Page.DoesNotExist:
product_detail = PageHandler().create_page(
builder,
"Product detail",
"/product/:id/:name",
path_params=[
{"name": "id", "type": "numeric"},
{"name": "name", "type": "text"},
],
)
# Data source creation
service_type = service_type_registry.get("local_baserow_get_row")
table = Table.objects.get(
name="Products",
database__workspace=workspace,
database__trashed=False,
)
view = GridView.objects.create(table=table, order=0, name="Products Grid")
product_detail_data_source = DataSourceHandler().create_data_source(
product_detail,
"Product",
service_type=service_type,
view=view,
table=table,
integration=integration,
row_id='get("page_parameter.id")',
)
ElementHandler().create_element(
heading_element_type,
product_detail,
value=f'get("data_source.{product_detail_data_source.id}.{field_name.db_column}")',
level=1,
)
ElementHandler().create_element(
text_element_type,
product_detail,
value=(
f'get("data_source.{product_detail_data_source.id}.{field_notes.db_column}")'
),
)
try:
products = Page.objects.get(name="Products", builder=builder)
except Page.DoesNotExist:
products = PageHandler().create_page(builder, "Products", "/products")
# Data source creation
service_type = service_type_registry.get("local_baserow_list_rows")
view = GridView.objects.create(table=table, order=0, name="Products Grid 2")
products_data_source = DataSourceHandler().create_data_source(
products,
"Products",
service_type=service_type,
view=view,
table=table,
integration=integration,
)
ElementHandler().create_element(
heading_element_type, products, value='"All products"', level=1
)
table_element = ElementHandler().create_element(
table_element_type,
products,
data_source=products_data_source,
items_per_page=5,
)
fields = [
{
"name": "Name",
"type": "text",
"config": {
"value": f"get('current_record.{field_name.db_column}')",
},
},
{
"name": "Category",
"type": "text",
"config": {
"value": f"get('current_record.{field_category.db_column}.value')",
},
},
{
"name": "Notes",
"type": "text",
"config": {
"value": f"get('current_record.{field_notes.db_column}')",
},
},
{
"name": "Details",
"type": "link",
"config": {
"navigation_type": "page",
"navigate_to_page_id": product_detail.id,
"navigate_to_url": "",
"page_parameters": [
{"name": "id", "value": "get('current_record.id')"},
{
"name": "name",
"value": f"get('current_record.{field_name.db_column}')",
},
],
"link_name": f"get('current_record.{field_name.db_column}')",
"target": "self",
},
},
]
created_fields = CollectionField.objects.bulk_create(
[
CollectionField(**field, order=index)
for index, field in enumerate(fields)
]
)
table_element.fields.all().delete()
table_element.fields.add(*created_fields)
ElementHandler().create_element(
link_element_type,
products,
value='"Home"',
variant="button",
alignment="right",
navigation_type="page",
navigate_to_page=homepage,
)
# Button back from detail page
ElementHandler().create_element(
link_element_type,
product_detail,
value='"Back to list"',
variant="button",
alignment="left",
navigation_type="page",
navigate_to_page=products,
)
# Button back from detail page
ElementHandler().create_element(
link_element_type,
homepage,
value='"See product list"',
variant="button",
alignment="left",
navigation_type="page",
navigate_to_page=products,
)