Source code for sni.uac.migration
"""
UAC specific migrations
"""
import logging
from sni.user.models import User
from sni.db.migration import (
ensure_minimum_version,
finalize_migration,
set_if_not_exist,
start_migration,
)
import sni.uac.token as token
from .models import StateCode
[docs]def ensure_root_per_token() -> None:
"""
Create a permanent app token owned by root, if none exist.
"""
root = User.objects.get(character_id=0)
if (
token.Token.objects(
owner=root, token_type=token.Token.TokenType.per
).count()
> 0
):
return
root_per_token = token.create_permanent_app_token(
root, comments="Primary token"
)
logging.info(
"No permanent app token owned by root, created one: %r",
token.to_jwt(root_per_token),
)
[docs]def ensure_root_dyn_token() -> None:
"""
Create a dynamic app token owned by root, if none exist.
"""
root = User.objects.get(character_id=0)
if (
token.Token.objects(
owner=root, token_type=token.Token.TokenType.dyn
).count()
> 0
):
return
root_dyn_token = token.create_dynamic_app_token(
root, comments="Primary token"
)
logging.info(
"No dynamic app token owned by root, created one: %r",
token.to_jwt(root_dyn_token),
)
[docs]def migrate():
"""
Migrates all schema and ensures basic documents
"""
ensure_root_dyn_token()
ensure_root_per_token()
[docs]def migrate_state_code():
"""
Migrates the ``state_code`` collection
"""
collection = start_migration(StateCode)
if collection is None:
return
# v0 to v1
# Set _version field to 1
set_if_not_exist(collection, "_version", 1)
# v1 to v2
# Set inviting_corporation field to None
set_if_not_exist(collection, "inviting_corporation", None, version=1)
ensure_minimum_version(collection, 2)
finalize_migration(StateCode)