moviewyrm/bookwyrm/management/commands/initdb.py

122 lines
3.7 KiB
Python
Raw Normal View History

2020-11-08 18:29:33 +00:00
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
2020-12-13 00:01:43 +00:00
from bookwyrm.models import Connector, SiteSettings, User
2020-11-08 18:29:33 +00:00
from bookwyrm.settings import DOMAIN
2021-03-08 16:49:10 +00:00
2020-11-08 18:29:33 +00:00
def init_groups():
2021-03-08 16:49:10 +00:00
groups = ["admin", "moderator", "editor"]
2020-11-08 18:29:33 +00:00
for group in groups:
Group.objects.create(name=group)
2021-03-08 16:49:10 +00:00
2020-11-08 18:29:33 +00:00
def init_permissions():
2021-03-08 16:49:10 +00:00
permissions = [
{
"codename": "edit_instance_settings",
"name": "change the instance info",
"groups": [
"admin",
],
},
{
"codename": "set_user_group",
"name": "change what group a user is in",
"groups": ["admin", "moderator"],
},
{
"codename": "control_federation",
"name": "control who to federate with",
"groups": ["admin", "moderator"],
},
{
"codename": "create_invites",
"name": "issue invitations to join",
"groups": ["admin", "moderator"],
},
{
"codename": "moderate_user",
"name": "deactivate or silence a user",
"groups": ["admin", "moderator"],
},
{
"codename": "moderate_post",
"name": "delete other users' posts",
"groups": ["admin", "moderator"],
},
{
"codename": "edit_book",
"name": "edit book info",
"groups": ["admin", "moderator", "editor"],
},
]
2020-11-08 18:29:33 +00:00
content_type = ContentType.objects.get_for_model(User)
for permission in permissions:
permission_obj = Permission.objects.create(
2021-03-08 16:49:10 +00:00
codename=permission["codename"],
name=permission["name"],
2020-11-08 18:29:33 +00:00
content_type=content_type,
)
# add the permission to the appropriate groups
2021-03-08 16:49:10 +00:00
for group_name in permission["groups"]:
2020-11-08 18:29:33 +00:00
Group.objects.get(name=group_name).permissions.add(permission_obj)
# while the groups and permissions shouldn't be changed because the code
# depends on them, what permissions go with what groups should be editable
def init_connectors():
Connector.objects.create(
identifier=DOMAIN,
2021-03-08 16:49:10 +00:00
name="Local",
2020-11-08 18:29:33 +00:00
local=True,
2021-03-08 16:49:10 +00:00
connector_file="self_connector",
base_url="https://%s" % DOMAIN,
books_url="https://%s/book" % DOMAIN,
2021-03-13 21:55:20 +00:00
covers_url="https://%s/images/" % DOMAIN,
2021-03-08 16:49:10 +00:00
search_url="https://%s/search?q=" % DOMAIN,
isbn_search_url="https://%s/isbn/" % DOMAIN,
2020-11-08 18:29:33 +00:00
priority=1,
)
Connector.objects.create(
2021-03-08 16:49:10 +00:00
identifier="bookwyrm.social",
name="BookWyrm dot Social",
connector_file="bookwyrm_connector",
base_url="https://bookwyrm.social",
books_url="https://bookwyrm.social/book",
2021-03-13 21:55:20 +00:00
covers_url="https://bookwyrm.social/images/",
2021-03-08 16:49:10 +00:00
search_url="https://bookwyrm.social/search?q=",
isbn_search_url="https://bookwyrm.social/isbn/",
2020-11-08 18:29:33 +00:00
priority=2,
)
Connector.objects.create(
2021-03-08 16:49:10 +00:00
identifier="openlibrary.org",
name="OpenLibrary",
connector_file="openlibrary",
base_url="https://openlibrary.org",
books_url="https://openlibrary.org",
covers_url="https://covers.openlibrary.org",
search_url="https://openlibrary.org/search?q=",
isbn_search_url="https://openlibrary.org/api/books?jscmd=data&format=json&bibkeys=ISBN:",
2020-11-08 18:29:33 +00:00
priority=3,
)
2021-03-08 16:49:10 +00:00
2020-12-13 00:01:43 +00:00
def init_settings():
SiteSettings.objects.create()
2021-03-08 16:49:10 +00:00
2020-11-08 18:29:33 +00:00
class Command(BaseCommand):
2021-03-08 16:49:10 +00:00
help = "Initializes the database with starter data"
2020-11-08 18:29:33 +00:00
def handle(self, *args, **options):
init_groups()
init_permissions()
2020-12-13 00:01:43 +00:00
init_connectors()
init_settings()