Commit 4a5b895a authored by Romain Bignon's avatar Romain Bignon

Weboob 1.4 released

parent afa96290
Pipeline #1919 passed with stages
in 18 minutes and 59 seconds
Weboob 1.4 (2019-01-06)
General
* Previously deprecated browser, named ”browser1”, is now removed.
* New anticaptcha module (CapCaptchaSolver)
* New asana module (CapBugTracker)
* New avendrealouer module (CapHousing)
* New bandcamp module (CapAudio, CapFile)
* New becm module (CapBank, CapBankTransfer, CapBankTransferAddRecipient, CapContact)
* New binck module (CapBank, CapBankWealth)
* New bnpcards module (CapBank)
* New bolden module (CapBank, CapBankWealth, CapDocument, CapProfile)
* New deathbycaptcha module (CapCaptchaSolver)
* New ekwateur module (CapDocument)
* New figgo module (CapCalendarEvent)
* New freeteknomusic module (CapAudio, CapFile)
* New gmf module (CapBank, CapBankWealth)
* New groupama module (CapBank, CapBankWealth)
* New infomaniak module (CapDocument)
* New journaldesfemmes module (CapRecipe)
* New limetorrents module (CapTorrent)
* New meslieuxparis module (CapDirectory)
* New myedenred module (CapBank)
* New nalo module (CapBank, CapBankWealth)
* New pagesjaunes module (CapDirectory)
* New peertube module (CapFile, CapImage, CapVideo)
* New reddit module (CapFile, CapImage, CapMessages)
* New relaiscolis module (CapParcel)
* New sprunge module (BasePasteModule, CapPaste)
* New suravenir module (CapBank, CapBankWealth)
* New xhamster module (CapFile, CapImage, CapVideo)
* New yggtorrent module (CapTorrent)
* Deleted alloresto module
* Deleted arretsurimages module
* Deleted attilasub module
* Deleted batoto module
* Deleted canaltp module
* Deleted cappedtv module
* Deleted eatmanga module
* Deleted ehentai module
* Deleted europarl module
* Deleted fourchan module
* Deleted gazelle module
* Deleted gdcvault module
* Deleted gdfsuez module
* Deleted geolocip module
* Deleted izneo module
* Deleted jacquieetmichel module
* Deleted jvmalin module
* Deleted leclercmobile module
* Deleted mangafox module
* Deleted mangago module
* Deleted mangahere module
* Deleted mangareader module
* Deleted nettokom module
* Deleted nihonnooto module
* Deleted nolifetv module
* Deleted opacwebaloes module
* Deleted quvi module
* Deleted sfr module
* Deleted simplyreadit module
* Deleted trictractv module
* Deleted unsee module
* Deleted ups module
* Deleted voyagessncf module
General: Core
* new application QBoobTracker
* add version information in weboob/__init__.py
* use release.py to generate ChangeLog
* ResultModel.setColumnFields should accept strings
* remove not used anymore weboob.tools.capabilities.messages
* Under Python 3, prefer Python 3 Qt
* Build universal wheel archive
* new BrowserRedirect exception meant to work with oAuth2 compliant modules. The module constructs the authorization_uri with every params it needs (at least client_id and redirect_uri), then raise BrowserRedirect with this uri.
* Modify and clean weboob.tools.decorators.retry
* include Value.description in the message displayed by console
* Create a welcoming and inclusive environment for new contributors
* deinit the browser even if dump_state fails
* Move README file to a README.md file rendered by Gitlab, with extra links to doc
* Value: add an "aliases" parameter to handle old "choices"
* depend on Pillow, don't do old debian stuff
* Captcha handling improvement, captcha type added
Browser
* redirect_uri has to be supplied
* remove ACCESS_TOKEN_METHOD, and create do_token_request() overridable method
* update to handle more oauth2 cases
* add OAuth2Mixin and OAuth2PKCEMixin classes
* add a method for clearing local storage
* map PR_END_OF_FILE_ERROR to socket.timeout
* force "sql:" prefix on newer versions
* disable OCSP temporarily
* set JsonPage encoding
* HasTextCondition did not use the given xpath
* add 'logger' attribute in SeleniumPage as others
* if nss error is not handled yet, raise it instead of ignoring it
* fix python3 compatibility in CsvPage
* PEP8 fixes
* also detect certifi path to detect module-pinning
* cache certificates fetched by AIA HTTP
* implement AIA support
* log URLs when testing pages, like standard weboob
* allow changing rendering window size
* fix certificate_db_filename nss version parsing
* Allow open to use callback
* Allow open to use is_async
* finally implement timeout support
* Use public get_policy if available
* add a mixin for doing login in selenium
* support on_load
* forking is not a problem
* save visited page content (and a quota)
* log path to avoid phantomjs logging anywhere
* compatibility with mini_jsonpath
* handle nested ListElement obj_x
* close requests session when switching browser
* add xpath function to get first non empty xpath result
* add localStorage manipulation methods
* new methods to scrape frames content
* let browser build options and capabilities
* fix usage of json parameter in go()
* fix usage of parameter 'json' on open() and location()
* quietly accept new 'json' location() param
* introduce weboob.browser.selenium
* ignore when OCSP is not responding
* fix fd leak
* in case of client cert, fall back to openssl
* Add 'Upgrade-Insecure-Requests' headers to the Firefox/IPhone/Android profiles. Fixes #97
* LoginPage should inherit object, like LoggedPage
* use a lock to prevent race condition when saving responses
* fixed KEEP_SESSION
* handle CA bundles and nss on centos
* if NextPage.request is an instance of Page, use it
* Copy cookie policy in copy()
* Add support for cookie policies
* Also copy cookie policy
* accept parameter 'page' to force à class to instanciate
* add the SwitchingBrowser class
* add a retry_on_logout_context context manager
* introduce 'retry' module and RetryLoginBrowser
* add "matches" XPath 2.0 function
* indicate class file and line when an attribute raises an error
* be more tolerant on HTTP-equiv refresh syntax
* Bump to current Firefox ESR
Browser: Filters
* keep compat behavior call_with_colspan for no td
* CleanDecimal now checks correct thousands separator use
* CleanDecimal should accept whitespace after sign
* new CleanDecimal form should return default value
* Add colspan attribute to TableCell class
* CleanDecimal should not accept mixed strings
* raise FilterError instead of ParseError directly
* move ItemNotFound error from standard
* if there is no group in regexp, return original string
* fix Decode because unquote differs in py versions
* fix missing ColumnNotFound import
* add more docstrings and examples
Capabilities
* Use DocumentTypes.BILL instead of u'bill' in Bill __init__
* add XPF currency
* use DecimalField + add latitude/longitude
* add new fields
* new capability for yellow pages and opening hours
* misc improvements
* add new recipient error class 'AddRecipientTimeout'
* Fix strict_find_object
* add strict_find_object to skip matching on paramaters with empty value
* add DocumentTypes to __all__
* add iter_documents_by_types
* apply same transformation on new label than old
* add AddRecipientBankError
* PEP8 fixes
* add valuation diff percent field to account
* remove all extra space like CleanText()
* New Capability for bank websites
* Add EUROS to currency
* use int.__str__ as IntEnum.__str__ for compat
* use compatible Enums in a few more capabilities
* use enums in Account, Transaction and Pockets
* Inverted iteration loops for get_currency
* Fix empty() for multiprocessing
* Account.iban and bank_name non-mandatory
* Prefill weboob.capabilities.bill.Bill type field
* Add new ProfileMissing exception in profile capabilities
* link Documents to Transactions
* fix exception_to_job for Nocaptcha
* add an exception_to_job to easily build solving jobs
* clarify percentage fields
* complete and reorder __all__
* Define default values for attributes of Subtitle class
* remove unused imports
* Fix CapRecipe comments #112
* delete LUF currency aliases
* Adding '()' to the EXCTRACTOR regex
* adding some account types for loans
* add a few more currencies
* add Account.opening_date field
* add a `parent` Field
* improve doc
* add a default get_account implementation
* make BaseImage.id optional in __init__ to use with ItemElement
* compare decoded version of labels
* update to a for/else clause
Documentation
* add fillobj tip and nested ListElement obj_x
* add another method for json + describe table parsing
* add pagination and http errors recipes
* include __init__ docstring in class docstring
* add a cookbook guide
* update URL to bug tracker
Applications: boobank
* account_type was not being initialized properly.
* handle multiple AddRecipientStep in succession
* Set proxy and logger in budgea command
* transfer command accepts an exec date param
* Update boobank.py to generate valid OFX files for CARD accounts. Only CHECKING and SAVINGS accounts were supported previously.
* don't crash on "investment" or "pocket" command if not implemented
* stop add_recipient command if there are multiple backends
* Issue #57 fix not unique OFX Fit ID in boobank
* make "transfer" command more interactive and add "recipients" command
* fix Transfer and Recipient formatters
* remove CapBankTransfer from Boobank.CAPS
Applications: boobcoming
* ICalFormatter now accepts dates (not datetimes)
Applications: boobill
* boobill handles profile
* handle CaptchaQuestion by using CapCaptchaSolver backends
* download all should use the correct backend of a document
Applications: boobooks
* add "search" command
Applications: boomoney
* Added unicode support to INIConfig
* MSMoney does not like when CHECKNUM is after MEMO
* Fixed pyflakes issues
* Added boomoney application
Applications: qboobtracker
* add a fancy tag list display
* display issue details and history
* support tag search
* new CapBugTracker app
Applications: qcineoob
* prefer getattr() over exec()
Applications: qflatboob
* fix compatibility with new enums
* fix issue #105
Applications: qgalleroob
* don't force thumbnail retrieving if xdg storage has it
* results can be fetched on-demand, and can be permanently hidden
* improve image info labels
* fix "browse" as iter_backends was misused
Applications: qhavedate
* do not crash if there is no description in a contact's profile
Applications: radioob
* do not force formatter for "search" command
* fix wrong help displayed for "search" command
Applications: videoob
* VideoListFormatter uses rating_max field
Applications: weboobcfg
* Remove the applications command of weboob-config
Applications: wetboobs
* fix reversed condition on unknown temperature
* Update wetboobs display of high and low values
Modules: 750g
* fix typo and missing duration
* fix module website got updated
* bump to https
Modules: adecco
* fix module: website got updated
* website got updated
* fiw module: website gor updated and bump to https
Modules: afer
* Add ActionNeeded to validate license agreement
* return message with wrongpass
* forcing cert file is now useless
* py3 port
* update AFER password length
* corrected iter_investment
* cleaning
* Handles BrowserUnavailable when account can't reach adhesion page
* add "raise BrowserUnavailable()" exception when website crash
Modules: agendadulibre
* fix parsing date
Modules: allocine
* pyflakes Python 3 fixes
Modules: alloresto
* remove broken module
Modules: amazon
* update xpath to get document
* do not redo login if it's already logged
* fix download document
* fix login
* get other subscription link xpath
* Fix issue #130
* handle xpath variation for documents date
* pass image data instead of image_url
* Corrected xpath for date
* better xpath to parse date
* Improve double auth managing
* Refactorized login to handle OTP + Captcha better
* New form for double auth
* Corrected way to go to login
* New way to handle OTP
* Can not handle OTP without StatesMixin
* OTP verification handling
* Added new security page to handle and better handling
* Corrected subscription label if we do not have user's name & module description
* Refactored the entire module. Added UK. Now based on FR site.
* Corrected xpath, added condition and xpath to match all possible buttons to download pdf
* Corrected to_login function to use the right variables
* check we are on home page before looking for identification link
* convert filter to list comprehension (py3 compat)
* Now donwloading as PDF (if key is activated)
* Comportement improvement, now handles text captcha
Modules: amazonstorecard
* flake8 fixes, Python 3
Modules: ameli
* handle unavailable page
* handle error on login
* add regex to login field
* PEP8 fixes
* py3 port
* raise ActionNeeded if handle cgu page
* go back to accounts page after history
* fix regexp in iter_history
* port to python3
* list max documents (6 months), not the default (1 month)
* Fix login page and a regex
Modules: americanexpress
* Handles temporarily unavailable pages
* Card typing
* Add: Id for transactions
* Clean for new website only
* only have card type
* don't yield coming without debit date
* Scrapping all accounts in the new website
* make transactions match with account by account owner name / fetch coming for old website accounts
* Add : Commission value
* Fix: Fake account
* Revert do_login
* Add: Mix of old and new account
* fix Decimal parsing error for CFA currency
* corrected balance and coming for multiaccount
* corected balance and coming
* Fix type test (basestring includes both str and unicode)
* length of account data list has changed
* fix index out of range on acc label parsing
* pass on 500 errors when fetching trs
* yield more than 1 card on new website
* fix missing label
* handling actionNeeded
* 'statement_start_date' key not always present in json
* fix crash on rupie indonésienne tr
* get currency on new website
* now using 'parse_decimal' to filter original_amount so as to keep decimal format consistent
* sign of transaction's original_amount fixed
* fallback on another json balance page
* fix debit date parsing for coming transactions
* set right type for summary card operations
Modules: amundi
* py3 port
* Added code_type for Investments
* handle PEI account
* removed obj_diff : it is wrong and doesn't exist on the website
* no longer yielding investments where amount is 0
* in account number, swap login and id
* prepend login to Account.number
* fix rounding transactions amount
* force TLSv1.0
Modules: apivie
* None page after login is now wrongpass
* remove "with" since it's for browser1
* quick port to browser2
* fix crash on iter sub
* Investments on unknown account
* handle vdate notavailable
* account types
* handle no invest on account
* portfolio_share
* fix account type for apivie
* adding investments to apivie
Modules: arte
* fix tests
* remove useless print()
* website and api were fully rewritten
* old video info url seems unavailable
Modules: asana
* new bugtracker module
Modules: aum
* fix compatibility with python3
* port module to browser2
* <3
Modules: avendrealouer
* Create housing module for avendrealouer.fr
Modules: axabanque
* update iban parsing
* Handle error 500 page
* Transfer: iban checking debug
* handle maintenance page with insecure HTTP
* Factorized liquidities with create_french_liquidity()
* origin account iban can be notAvailable
* Change AddRecipientError to AddRecipientBankError
* Add profile capability
* PEP8 fixes
* Typed Epargne Retraite Novialaccounts to "Life Insurance"
* Modified xpath for life insurances
* fix typo for recipient category
* add transfer virtualkeyboard hash
* use TransferBankError instead of TransferError
* need only the 5 first characters to validate transfer
* handle transfer error message
* handle new error message
* get pea history on netfinca bourse page
* Reload state only for add recipient step
* switch type card account balance to coming
* search for the last day of month to add debit date on coming transaction
* wealth and pea accounts don't have recipients
* Add new feature: add recipient
* parent for card account
* add deferred transfer
* add new features: iter recipient and immediate transfer
* handle life insurance new url
* There is an Assertion error when error page is empty
* catch browser unavailable message
* Fix life insurance xpath
* Skip debit card and no status card
* fix deferred card
* Clean 'get account list' code
* skip item if document can't be downloaded
* Get ISIN code in a weboobian way
* Implemented document download capability
* handle another actionNeeded
* fix itering on invest from axabanque website
* Rewrote xPath selector
* detailed_view is not always available
* fixing login
* fix investments parsing
* handle isin codes if available in href
* fetch investements from PEA accounts
Modules: bandcamp
* new audio module
Modules: banqueaccord
* Add missing CapBank to module
* Fusion with Oney module
* fix currency
* fetching currency
Modules: banquepopulaire
* type transactions for summary and deferred
* Fix login
* fix comment
* Added error message in french
* further fetch token when empty page
* Fix bug for rightless users
* Don't crash without simplejson
* Fix error on sudouest url from creditmaritime
* Changed iter_investments to create_french_liquidity()
* set form parameters properly for Gocardless transactions
* Included "Compte Titres PEA" into PEA accounts
* Update regions from creditmaritime
* Update region websites
* handle browserunavailable
* foreign currencies : currency and account type added
* Remove obsolete VERIFY and ssl certificate
* retry posting on keyerror
* handles new browser unavailable page
* wrong catching of the login page
* handle linebourse landing page to avoid being delogged
* Removed certificate verification for banquepopulaire
* Remove call to set_gocardless_transaction_details
* Revert "[banquepopulaire] Changed get_history return to prevent gocardless crash"
* Changed get_history return to prevent gocardless crash
* Handle gocardless transactions that have hyperlink
* fix transactions page getting handled by ErrorPage
* get references on gocardless transactions
* completed profile
* manually added cookies should be on origin domain only
* implement CapProfile
* fixed regex in get_investment_page_params
* retry to go on accounts page
* bypass browserunavailable when going on investments.
* add "Plan Epargne Enfant Msu" as "TYPE_LIFE_INSURANCE"
* handling new json structure to by pass user action needed
* fix for 'HomePage object has no attribute login'
* Add regions to website choices
* Fix: wrong account_type was raised
* Browser tried to call a method on a page that didn't implemented it
* handle unavailable page
* some regions has been renamed
* ActionNeeded on temporary password
* rename some regions
* loirelyonnais region has been renamed to bpaura
* use dates for investments vdate
* fix crash when there is a 'Contrat Prévoyance'
* fix natixis life insurances fetching
* fixing xpath to get currency on cards
Modules: barclays
* Adde fault=NotAvailable to Regexp
* Corrected removal of untyped accounts
* cert pinning is no longer needed
* fix debit date for deferred debit transactions and rdate
* return credit card history
* don't cache history
* Changed URLs from Barclays to Milleis
* Changed immediate cards to TYPE_CHECKING
* Corrected coming and balance for DIFF cards
* Not raise BrowserIncorrectPassword when there is ' ' in secret
* add "B. GESTION VIE" as TYPE_LIFE_INSURANCE
* fix portfolio
* detect more transaction patterns
* fetch Transaction.raw from expanded transaction text
* there may be no history for life insurances
* add iter_investment
Modules: becm
* Added ActionNeeded when website does not respond to login process
* Set version to 1.4
Modules: bforbank
* Avoid re_login upon checking market invesments
* Exceptions added for checking accounts
* raises an ActionNeeded when trading password needs creation/update
* Fetch liquidities with create_french_liquidities()
* Retry added because document won't load sometimes.
* card with no transactions
* change to the url to enter the Espace Bourse
* baseurl changed
* fetching previous month deffered card history
* fix coming patch which was merged too quickly
* set deferred card parent and coming instead of balance
* handling transition period between last accounting day and debit date for deffered card accounts
* handling certification needed by the user
* ignore card when cancelled by bforbank
* add liquidity invest on bourse account
* go to lifeinsurance page after logout
* Adding details on transactions raw
* Scrapping details on 'prelevements' and 'virements' transactions
* login images are now inline
* recognize "Crédit" accounts as loans
Modules: bibliothequesparis
* implement search
* fix missing renewal data and alert if missing
* login requires an Accept json header
Modules: binck
* Get missing ISIN codes from invest detail page
* Corrected details for new Binck website & improved navigation
* Corrected navigation for new website
* Rewrote module according to website changes
* Corrected obj_code and added obj_code_type
* Handle new informative page
* Handles new informative page
* any() takes exactly one argument
* actionNeeded for frozen or closed accounts
* Informations added for investments in foreign currencies
* Factorized iter_investments with create_french_liquidity()
* fix login error handling
* py3 compat (already compatible)
* handle an other account url
* Add XX-liquidity investment
* add ActionNeeded when ServerError with message is raised
* use CapBankWealth
* import TableCell from filters.html instead of filters.standard
* actionneeded and coding style
* handle expired password
* skip customer quiz
* fix 404 with non-invest accounts
* fix investment xpath
* don't log off when the browser is not on a known page to avoid deinit crash
* adding binck module
* pyflakes
* add CapBank binck module
Modules: biplan
* bump to https
Modules: bnpcards
* Correct duplicate account's id
* corpo/titulaire: fetch coming balance (if available)
* non-corp/gestionnaire: go back to accounts page after balance
* use SwitchingBrowser
* detect expired password url for titulaire non-corporate
* get coming balance for non-corporate gestionnaire
* try to avoid duplicate ids in non-corporate/manager space
* add currency to titulaire accounts (EUR)
* bump version to 1.4
* use a proxy browser to avoid do_login in __init__
* fix handling multiple cases
* fetch transactions for accounts with duplicate account number
* fixing duplicate accounts
* handle ti corporate page to avoid crash
* fix going to transactions first page
* update versions to 1.3
* currency for bnpcards
* fix non corporate manager iter accounts
* handle rib pagination
* yield all cards
* update modules version to 1.2
* fix accounts is not a class constant
* refactor and fix bad transactions landing page
* fixing parsing transaction
* using number in place of id
* get rid of useless variable
* handling pagination for account page
* caching account for better handling id
* fix duplicates with payroll number field
* add missing detail page
* fixing missing import
* adding softcap for bnpcards
* fixing commission already in total amount
* new page to navigate in coming pages
* prevent crash when you have to change the password on holder accounts
* bnpcards handle new navagiation
* handling correctly coming for manager account
* bnpcards module now handles Holders besides Managers
* increase timeout to 60seconds
* handling 3rd coming page
* fix bnpcards with BrowserPasswordExpired
* correctly limit history period to exclude coming transactions
* remove accueilInternetGe.builder.do from error pages as we go on even on success
* fix bnpcards change pass crash
* change timeout to 30 seconds
* fix name of module
* rename module to bnpcards, add fields to Transaction, and force sort
Modules: bnporc
* rename 'get_accounts_list' to 'iter_accounts'
* error with code 1001 is now a website unavailable error
* use only recipient id on new recipient
* too late to check transfer date *after* validation
* fix usage of rotating password
* 'ibanCompteCrediteur' key in init transfer response is empty
* transfer fees are not always available
* add parameter to disable password rotation
* [bnporc-entreprise] Fix Market page when no account is present
* Add try/except on old BNP website request to prevent error 500
* [bnporc-entreprises] Split market account from checking account
* add new wrongpass code and action needed code
* fail on unknown error codes
* add comments
* do not log rotating passwords
* support triple rotations of password
* keep in priority localized messages from returned message
* Handling list error page with abstract children
* Handle new error at login with website error message
* get rid of rotation password
* Change AddRecipientError to AddRecipientBankError
* handle another url for 100 connections limit
* fixed tabs in pp/pages.py to pass pyflakes3
* Included the "Assurance Vie" domain to BNP iter_accounts
* py3 port
* handles cases when bnporc's api sends empty json fields for profile
* get rid of bad history for enterprise
* market account if only one account
* message for BrowserPasswordExpired
* raises an actionneeded when account is blocked
* [bnporc-entreprise] fix regex error
* fusion between checking and card accounts
* Add invest for BNP entreprise
* resolved json parsing problems
* pp: fix mistake in eddcfc607961bf54cd8e017c26dd426654d91eca
* pp: parse listDetailCartes to type coming card trs
* use default when advisor email is empty on site
* detect one more card summary pattern
* add deferred transfer
* force ProfilePage to utf-8 since response doesn't have info
* entreprise fix rdate parsing in history
* raise ProfileUnavailable when profile is not accessible
* transfer, might have multiple recipients with same iban
* return correct type of object for advisor
* handle connection without profile
* fix typo in recipient otp message
* load coming details to get card information
* implement CapProfile on pp and entreprise
* fix deferred_cb and summary
* change AddRecipientError parameter
* share BNP recipients and transfers source code
* In transactions main JSON page, get coming details page crash
* fix json key error
* just let some code crash if it has to
* changed card transaction detection
* enterprise: fix keyerror on card summary
* ent: fix TYPE_CARD and TYPE_DEFERRED_CARD for history
* ent: try to detect immediate debit cards and not create accounts
* entreprise: yield card history on card account
* ent: json "aVenir" was renamed to "avenir"
* Getting vdate on lifeinsurance accounts
* Changed data on transfer validation
* Key error when getting investments on transactions
* Handle iban when not available
* entreprise site: type tweaks for card transactions
* fix transfers, recipient iban isn't in API response anymore
* set Account.parent for card accounts
* entreprise site: remove useless accounts/transactions cache
* don't return history or investments on "pea espèces"
* handle unauthorized to access on ent
* merge list of cards
* fix colliding card number
* fix the mapping between an account and market_data
* fix timestamp regex
* update fromtimestamp function
* pep8
Modules: bnppere
* visiogo config handling
* Visiogo module
Modules: bolden
* Remodelled module with one main account and investments
* new CapBank/CapDocument module for crowlending site
Modules: boursorama
* Included diff cards, ignored inactive cards and deleted dead code
* Fix check transfer label
* some life insurrance were skipped
* Added 'assurance/famille' to ignored insurances
* Added Consumer Credits to the list of ignored Loans
* Add default values for Loan dates and Decimals
* handle transfer url page
* Fix differed transfer
* Exec transfer: Retry page
* update liquidities xpath
* Included "assurance/comptes" in ignored accounts
* Include personal insurances in ignored accounts
* Handle users without accounts
* Avoid iter_recipients for Loan and Life insurance
* Corrected URLs for Loans
* Corrected indentation mistake
* handle paid off loans / no next_payement_date
* Account.id should be str, not Decimal
* Fetch card numbers according to the new website
* get rate with the highest precision
* retry when par accounts seem unavailable with unexpected error