garage_project/server/populate_data.py
2023-12-05 15:00:17 -05:00

237 lines
7.3 KiB
Python

import os
import django
from django.db import transaction
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
django.setup()
from server.models import (
Game,
Guild,
Player,
PlayerGuild,
PlayerGameData,
GuildGameDataSchema,
WowClasses,
User,
)
def populate_games():
games = ["World of Warcraft", "Counter Strike: Global Offensive"]
for game in games:
g = Game.objects.get_or_create(name=game)[0]
def populate_guilds():
guilds = ["Gamers", "Epic Nerds"]
for guild in guilds:
g = Guild.objects.get_or_create(name=guild)[0]
def populate_users():
users = [
{"username": "Skip", "password": "password"},
{"username": "Zman", "password": "password"},
{"username": "Pixel", "password": "password"},
]
for user in users:
u = User.objects.get_or_create(username=user["username"])[0]
u.set_password(user["password"])
u.save()
def populate_player_guilds():
player_guilds = [
{"player": "Pixel", "guild": "Gamers"},
{"player": "Zman", "guild": "Gamers"},
{"player": "Skip", "guild": "Epic Nerds"},
]
for profile in player_guilds:
p = PlayerGuild.objects.get_or_create(
player=Player.objects.get(name=profile["player"]),
guild=Guild.objects.get(name=profile["guild"]),
)[0]
def populate_wow_classes():
wow_classes = [
"Warrior",
"Mage",
"Rogue",
"Priest",
"Warlock",
"Druid",
"Hunter",
"Shaman",
"Paladin",
]
for wow_class in wow_classes:
w = WowClasses.objects.get_or_create(name=wow_class)[0]
def populate_guild_game_data_schema():
wow_gamer_schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"playerName": {"type": "string"},
"playerDiscordId": {"type": "string"},
"playerAvailabilities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"day": {"type": "string"},
"time": {"type": "string"},
"timeZone": {"type": "string"},
},
"required": ["day", "time", "timeZone"],
},
},
"playerRaids": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
},
"required": ["name"],
},
},
"characters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"class": {"type": "string"},
"level": {"type": "number"},
},
"required": ["name", "class", "level"],
},
},
},
"required": ["playerName"],
}
wow_gamer1 = {
"playerName": "Pixel",
"discordId": "sseagull_caw",
"playerAvailabilities": [
{"day": "Monday", "time": "20:00", "timeZone": "America/New_York"},
{"day": "Wednesday", "time": "20:00", "timeZone": "America/New_York"},
{"day": "Friday", "time": "20:00", "timeZone": "America/New_York"},
],
"playerRaids": [{"name": "Molten Core"}, {"name": "Blackwing Lair"}],
"characters": [
{"name": "Pixelwar", "class": "Warrior", "level": 60},
{"name": "Pixelmage", "class": "Mage", "level": 60},
],
}
wow_gamer2 = {
"playerName": "Zman",
"discordId": "zmanplex",
"playerAvailabilities": [
{"day": "Monday", "time": "20:30", "timeZone": "America/Chicago"},
{"day": "Wednesday", "time": "20:30", "timeZone": "America/Chicago"},
{"day": "Friday", "time": "20:30", "timeZone": "America/Chicago"},
],
"playerRaids": [{"name": "Naxxramas"}, {"name": "Blackwing Lair"}],
"characters": [
{"name": "Zmanlock", "class": "Warlock", "level": 60},
{"name": "Zmanhunt", "class": "Hunter", "level": 60},
],
}
csgo_epic_nerd_schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"playerName": {"type": "string"},
"playerDiscordId": {"type": "string"},
"playerRank": {"type": "string"},
"playerFavoriteMaps": {
"type": "array",
"items": {"type": "string"},
},
"playerFavoriteWeapons": {
"type": "array",
"items": {"type": "string"},
},
"playerAvailabilities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"day": {"type": "string"},
"time": {"type": "string"},
"timeZone": {"type": "string"},
},
"required": ["day", "time", "timeZone"],
},
},
},
"required": ["playerName"],
}
csgo_epic_nerd1 = {
"playerName": "Skip",
"discordId": "tenpull",
"playerRank": "Global Elite",
"playerFavoriteMaps": ["Dust 2", "Mirage"],
"playerFavoriteWeapons": ["AWP", "AK-47"],
"playerAvailabilities": [
{"day": "Monday", "time": "20:00", "timeZone": "America/New_York"},
{"day": "Wednesday", "time": "20:00", "timeZone": "America/New_York"},
{"day": "Friday", "time": "20:00", "timeZone": "America/New_York"},
],
}
# get or create schema
s = GuildGameDataSchema.objects.get_or_create(
game=Game.objects.get(name="World of Warcraft"),
guild=Guild.objects.get(name="Gamers"),
schema=wow_gamer_schema,
)[0]
# get or create player game data
p1 = PlayerGameData.objects.get_or_create(
player=Player.objects.get(name=wow_gamer1["playerName"]),
schema=s,
data=wow_gamer1,
)[0]
p2 = PlayerGameData.objects.get_or_create(
player=Player.objects.get(name=wow_gamer2["playerName"]),
schema=s,
data=wow_gamer2,
)[0]
# get or create schema
s = GuildGameDataSchema.objects.get_or_create(
game=Game.objects.get(name="Counter Strike: Global Offensive"),
guild=Guild.objects.get(name="Epic Nerds"),
schema=csgo_epic_nerd_schema,
)[0]
# get or create player game data
p1 = PlayerGameData.objects.get_or_create(
player=Player.objects.get(name=csgo_epic_nerd1["playerName"]),
schema=s,
data=csgo_epic_nerd1,
)[0]
def populate():
with transaction.atomic():
populate_games()
populate_guilds()
populate_users()
populate_player_guilds()
populate_wow_classes()
populate_guild_game_data_schema()
if __name__ == "__main__":
print("Populating script!")
populate()
print("Population complete!")