uncloud/uncloud_v3/app/management/commands/test-data.py

111 lines
4.8 KiB
Python

from django.core.management.base import BaseCommand
from app.models import *
class Command(BaseCommand):
help = 'Add test data'
# def add_arguments(self, parser):
#parser.add_argument('--username', type=str, required=True)
def handle(self, *args, **options):
# Add CHF as currency
currency, created = Currency.objects.get_or_create(defaults=
{
"slug": "CHF",
"name": "Swiss Franc",
"short_name": "CHF"
})
# Add standard timeframes
for timeframe in [ (3600, "1 hour", "1-hour"),
(86400, "1 day", "1-day"),
(7*86400, "7 days", "7-days"),
(30*86400, "30 days", "30-days"),
(365*86400, "365 days", "365 days") ]:
TimeFrame.objects.get_or_create(slug=timeframe[2],
defaults=
{
"name": timeframe[1],
"seconds": timeframe[0]
})
tf_30d = TimeFrame.objects.get(slug='30-days')
# Add typical prices per timeframe
for ppt in [
("1-day", 1, currency),
("1-day", 2, currency),
("30-days", 2, currency), # HDD 100 GB
("30-days", 3, currency), # CPU
("30-days", 3.5, currency), # SSD Storage
("30-days", 4, currency), # RAM
("30-days", 10, currency), # Nextcloud
("30-days", 15, currency), # Gitea
("30-days", 35, currency), # Matrix
("30-days", 29, currency),
("30-days", 55, currency) ]:
tf = TimeFrame.objects.get(slug=ppt[0])
PricePerTime.objects.get_or_create(timeframe=tf,
value=ppt[1],
defaults=
{
"currency": currency
})
# Add typical resources
for res in [
# slug name description min max step-size price per 30days
("cpu-1", "CPU", "Core(s)", None, None, 0.5, 3),
("cpu-min-max", "CPU", "Core(s)", 1, 20, 0.5, 3),
("ram-1", "RAM", "GB", None, None, 0.5, 4),
("ram-min-max", "RAM", "GB", 1, 200, 0.5, 4),
("storage-db", "Database-Storage", "GB", 10, None, 10, 3.5),
("storage-ssd", "SSD-Storage", "GB", 10, None, 10, 3.5),
("storage-hdd", "HDD-Storage", "GB", 100, None, 100, 2),
("matrix-maintenance", "Matrix Maintenance Fee", "", 1, 1, None, 35),
("nextcloud-maintenance", "Nextcloud Maintenance Fee", "", 1, 1, None, 10),
("gitea-maintenance", "Gitea Maintenance Fee", "", 1, 1, None, 15),
]:
this_res, created = Resource.objects.get_or_create(slug=res[0],
defaults=
{
"name": res[1],
"unit": res[2],
"minimum_units": res[3],
"maximum_units": res[4],
"step_size": res[5]
})
# If price is given, assign it
if res[6]:
ppt = PricePerTime.objects.get(timeframe=tf_30d, value=res[6])
this_res.price_per_time.add(ppt)
# Link resources to prices per time frame
# Link to PPT -- later
# for ppt_res in res[5]:
# ppt = PricePerTime.objects.get(
# Add test products
for product in [
("matrix", "Matrix"),
("nextcloud", "Nextcloud"),
("gitea", "Gitea") ]:
p, created = Product.objects.get_or_create(slug=product[0],
defaults = { "name": product[1] })
for req_res in [ "cpu-min-max",
"ram-min-max",
"storage-db",
"storage-hdd" ]:
print(f"Adding {req_res} to {p}")
p.resources.add(Resource.objects.get(slug=req_res))
p.resources.add(Resource.objects.get(slug=f"{product[0]}-maintenance"))
# Every test product can be bought for the 30d timeframe
p.timeframes.add(tf_30d)