def init()

in modular.py [0:0]


def init():
    """
    Separate init for docker container. This method just skips if necessary
    items already exist. So, 1 exit code will be only if something really fails
    :return:
    """
    # TODO maybe some to click
    from modular_api.helpers.password_util import generate_password, secure_string
    from modular_api.services import SERVICE_PROVIDER as SP
    policy = SP.policy_service.describe_policy('admin_policy')
    if not policy:
        _LOG.info('admin policy does not exist. Creating')
        policy = SP.policy_service.create_policy_entity(
            policy_name='admin_policy',
            policy_content=[{
                "Description": "Admin policy",
                "Module": "*",
                "Effect": "Allow",
                "Resources": ["*"]
            }]
        )
        policy.hash = SP.policy_service.calculate_policy_hash(
            policy_item=policy
        )
        SP.policy_service.save_policy(policy_item=policy)
    else:
        _LOG.info('admin policy already exists. Skipping')
    group = SP.group_service.describe_group('admin_group')
    if not group:
        _LOG.info('admin group does not exist. Creating')
        group = SP.group_service.create_group_entity(
            group_name='admin_group',
            policies=['admin_policy']
        )

        group.hash = SP.group_service.calculate_group_hash(
            group_item=group
        )
        SP.group_service.save_group(group_item=group)
    else:
        _LOG.info('admin group already exists. Skipping')
    user = SP.user_service.describe_user('admin')
    if not user:
        _LOG.info('admin user does not exist. Creating')
        user_password = os.getenv('MODULAR_API_INIT_PASSWORD')
        if user_password:
            is_autogenerated = False
        else:
            user_password = generate_password()
            is_autogenerated = True

        user = SP.user_service.create_user_entity(
            username='admin',
            password=secure_string(user_password),
            group=['admin_group']
        )

        user.hash = SP.user_service.calculate_user_hash(user)
        SP.user_service.save_user(user_item=user)

        if is_autogenerated:
            print(f'Autogenerated password: {user_password}')
    else:
        _LOG.info('admin user already exists. Skipping')

    _LOG.debug('Initialization finished')