class WebDAVSettings(ConnectionSettings):

    ns = "webdav:"
    prefix = "webdav_"
    keys = {
        'hostname', 'login', 'password', 'token', 'root', 'cert_path',
        'key_path', 'recv_speed', 'send_speed', 'verbose'
    }

    def __init__(self, options):

        self.options = dict()

        for key in self.keys:
            value = options.get(key, '')
            self.options[key] = value
            self.__dict__[key] = value

        self.root = Urn(self.root).quote() if self.root else ''
        self.root = self.root.rstrip(Urn.separate)

    def is_valid(self):

        if not self.hostname:
            raise OptionNotValid(name="hostname",
                                 value=self.hostname,
                                 ns=self.ns)

        if self.cert_path and not exists(self.cert_path):
            raise OptionNotValid(name="cert_path",
                                 value=self.cert_path,
                                 ns=self.ns)

        if self.key_path and not exists(self.key_path):
            raise OptionNotValid(name="key_path",
                                 value=self.key_path,
                                 ns=self.ns)

        if self.key_path and not self.cert_path:
            raise OptionNotValid(name="cert_path",
                                 value=self.cert_path,
                                 ns=self.ns)

        if self.password and not self.login:
            raise OptionNotValid(name="login", value=self.login, ns=self.ns)

        if not self.token and not self.login:
            raise OptionNotValid(name="login", value=self.login, ns=self.ns)
class WebDAVSettings(ConnectionSettings):
    ns = 'webdav:'
    prefix = 'webdav_'
    keys = {'hostname', 'auth', 'token', 'root', 'cert_path', 'key_path', 'recv_speed', 'send_speed',
            'verbose'}

    hostname = None
    auth = None
    token = None
    root = None
    cert_path = None
    key_path = None
    recv_speed = None
    send_speed = None
    verbose = None

    def __init__(self, options):

        self.options = dict()

        for key in self.keys:
            value = options.get(key, '')
            self.options[key] = value
            self.__dict__[key] = value

        self.root = Urn(self.root).quote() if self.root else ''
        self.root = self.root.rstrip(Urn.separate)

    def is_valid(self):

        if not self.hostname:
            raise OptionNotValid(name='hostname', value=self.hostname, ns=self.ns)

        if self.cert_path and not exists(self.cert_path):
            raise OptionNotValid(name='cert_path', value=self.cert_path, ns=self.ns)

        if self.key_path and not exists(self.key_path):
            raise OptionNotValid(name='key_path', value=self.key_path, ns=self.ns)

        if self.key_path and not self.cert_path:
            raise OptionNotValid(name='cert_path', value=self.cert_path, ns=self.ns)

        if not self.token and not self.auth:
            raise OptionNotValid(name='auth', value=self.auth, ns=self.ns)
class WebDAVSettings(ConnectionSettings):

    ns = "webdav:"
    prefix = "webdav_"
    keys = {'hostname', 'login', 'password', 'token', 'root', 'cert_path', 'key_path', 'recv_speed', 'send_speed', 'verbose'}

    def __init__(self, options):

        self.options = dict()

        for key in self.keys:
            value = options.get(key, '')
            self.options[key] = value
            self.__dict__[key] = value

        self.root = Urn(self.root).quote() if self.root else ''
        self.root = self.root.rstrip(Urn.separate)

    def is_valid(self):

        if not self.hostname:
            raise OptionNotValid(name="hostname", value=self.hostname, ns=self.ns)

        if self.cert_path and not exists(self.cert_path):
            raise OptionNotValid(name="cert_path", value=self.cert_path, ns=self.ns)

        if self.key_path and not exists(self.key_path):
            raise OptionNotValid(name="key_path", value=self.key_path, ns=self.ns)

        if self.key_path and not self.cert_path:
            raise OptionNotValid(name="cert_path", value=self.cert_path, ns=self.ns)

        if self.password and not self.login:
            raise OptionNotValid(name="login", value=self.login, ns=self.ns)

        if not self.token and not self.login:
            raise OptionNotValid(name="login", value=self.login, ns=self.ns)