<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
# coding=utf-8

from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from clcommon import FormattedException

# Possible interpreter statuses
ENABLED_STATUS = 'enabled'
DISABLED_STATUS = 'disabled'
NOT_INSTALLED_STATUS = 'not_installed'
INSTALLING_STATUS = 'installing'
REMOVING_STATUS = 'removing'

# Means that cache update process is currently running
CACHE_UPDATING_YUM_STATUS = "cache_updating"

# possible application states
APP_STARTED_CONST = 'started'
APP_STOPPED_CONST = 'stopped'


class BaseSelectorError(FormattedException):
    """Top level error class for admin's part of selector"""
    pass


class AcquireInterpreterLockError(BaseSelectorError):
    """Error raised when we are unable to lock interpreter version"""
    def __init__(self, version):
        super(AcquireInterpreterLockError, self).__init__({
            "message":
                "Unable to lock specified interpreter version %(version)s. Probably it's not "
                "installed at this moment",
            "context": {
                'version': version
            },
        })


class AcquireApplicationLockError(BaseSelectorError):
    """Error raised when we are unable to lock application"""
    def __init__(self, app_root, reason=None):
        message = "Can't acquire lock for app: %(app)s"
        if reason:
            message += " Reason is: {}".format(reason)
        super(AcquireApplicationLockError, self).__init__({
            'message': message,
            'context': {
                'app': app_root,
            },
        })


class MissingVirtualenvError(BaseSelectorError):
    """Error raised when virtualenv directory is absent"""
    def __init__(self, app_venv):
        super(MissingVirtualenvError, self).__init__({
            'message':
                "No such application or it's broken. "
                "Unable to find app venv folder by this path: '%(app_venv)s'",
            'context': {
                'app_venv': app_venv,
            },
        })


class MissingAppRootError(BaseSelectorError):
    """Error raised when application root directory is absent"""
    def __init__(self, app_root):
        super(MissingAppRootError, self).__init__({
            'message':
                "No such application or it's broken. "
                "Unable to find app-root folder by this path: '%(app_root)s'",
            'context': {
                'app_root': app_root,
            },
        })


class AbsentFileError(BaseSelectorError):
    """Error raised when some file does not exist"""
    def __init__(self, filepath):
        super(AbsentFileError, self).__init__(
            {'message': "File %(file)s is absent.",
             'context': {'file': filepath}}
        )


class UnsupportedSelectorError(BaseSelectorError):
    def __init__(self, interpreter):
        super(UnsupportedSelectorError, self).__init__(
            {'message': 'Unsupported interpreter was passed: "%(interpreter)s"',
             'context': {'interpreter': interpreter}}
        )
