Source code for woob.capabilities.account

# Copyright(C) 2010-2011 Romain Bignon
#
# This file is part of woob.
#
# woob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# woob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with woob. If not, see <http://www.gnu.org/licenses/>.

from __future__ import annotations

from typing import List

from .base import (
    Capability, BaseObject, StringField, IntField, Field, UserError,
    NotLoadedType, NotAvailableType, NotLoaded
)


__all__ = ['AccountRegisterError', 'Account', 'StatusField', 'CapAccount', 'CapCredentialsCheck']


[docs]class AccountRegisterError(UserError): """ Raised when there is an error during registration. """
[docs]class Account(BaseObject): """ Describe an account and its properties. """ login = StringField('Login') password = StringField('Password') properties = Field('List of key/value properties', dict) def __init__( self, id: str = '', url: str | NotLoadedType | NotAvailableType = NotLoaded ): super().__init__(id, url)
[docs]class StatusField(BaseObject): """ Field of an account staeobjectus. """ FIELD_TEXT = 0x001 # the value is a long text FIELD_HTML = 0x002 # the value is HTML formated key = StringField('Key') label = StringField('Label') value = StringField('Value') flags = IntField('Flags') def __init__( self, key: str, label: str, value: str, flags: int = 0, url: str | NotLoadedType | NotAvailableType = NotLoaded ): super().__init__(key, url) self.__setattr__('key', key) self.__setattr__('label', label) self.__setattr__('value', value) self.__setattr__('flags', flags)
[docs]class CapAccount(Capability): """ Capability for websites when you can create and manage accounts. :var ACCOUNT_REGISTER_PROPERTIES: This class constant may be a list of :class:`woob.tools.value.Value` objects. If the value remains None, woob considers that :func:`register_account` isn't supported. """ ACCOUNT_REGISTER_PROPERTIES = None
[docs] @staticmethod def register_account(account: Account): """ Register an account on website This is a static method, it would be called even if the backend is instancied. :param account: describe the account to create :type account: :class:`Account` :raises: :class:`AccountRegisterError` """ raise NotImplementedError()
[docs] def confirm_account(self, mail: str): """ From an email go to the confirm link. """ raise NotImplementedError()
[docs] def get_account(self) -> Account: """ Get the current account. """ raise NotImplementedError()
[docs] def update_account(self, account: Account): """ Update the current account. """ raise NotImplementedError()
[docs] def get_account_status(self) -> List[StatusField]: """ Get status of the current account. :returns: a list of fields :rtype: list[StatusField] """ raise NotImplementedError()
[docs]class CapCredentialsCheck(Capability):
[docs] def check_credentials(self) -> bool: """ Its purpose is to check that the credentials (in the config) are valid for the module's website, API, whatever requires credentials to be accessed. """ raise NotImplementedError()