[IMP] account_statement_import_online_wise: black, isort, prettier

This commit is contained in:
Emanuel Cino
2023-05-30 15:31:30 +02:00
parent 08fe16d2d6
commit e697099893
5 changed files with 56 additions and 17 deletions

View File

@@ -33,7 +33,10 @@ class OnlineBankStatementProviderTransferwise(models.Model):
# NOTE: This is needed to workaround possible multiple 'origin' fields
# present in the same view, resulting in wrong field view configuraion
# if more than one is widget="dynamic_dropdown"
transferwise_profile = fields.Char(related="origin", readonly=False,)
transferwise_profile = fields.Char(
related="origin",
readonly=False,
)
@api.model
def values_transferwise_profile(self):
@@ -52,7 +55,10 @@ class OnlineBankStatementProviderTransferwise(models.Model):
lambda entry: (
str(entry["id"]),
"%s %s (personal)"
% (entry["details"]["firstName"], entry["details"]["lastName"],)
% (
entry["details"]["firstName"],
entry["details"]["lastName"],
)
if entry["type"] == "personal"
else entry["details"]["name"],
),
@@ -70,7 +76,8 @@ class OnlineBankStatementProviderTransferwise(models.Model):
self.ensure_one()
if self.service != "transferwise":
return super()._obtain_statement_data(
date_since, date_until,
date_since,
date_until,
) # pragma: no cover
api_base = self.api_base or TRANSFERWISE_API_BASE
@@ -78,7 +85,9 @@ class OnlineBankStatementProviderTransferwise(models.Model):
private_key = self.certificate_private_key
if private_key:
private_key = serialization.load_pem_private_key(
private_key.encode(), password=None, backend=default_backend(),
private_key.encode(),
password=None,
backend=default_backend(),
)
currency = (self.currency_id or self.company_id.currency_id).name
@@ -187,7 +196,9 @@ class OnlineBankStatementProviderTransferwise(models.Model):
fees_value = fees_value.copy_sign(amount_value)
amount_value -= fees_value
unique_import_id = "{}-{}-{}".format(
transaction_type, reference_number, int(date.timestamp()),
transaction_type,
reference_number,
int(date.timestamp()),
)
line = {
"name": payment_reference or description or "",
@@ -275,11 +286,16 @@ class OnlineBankStatementProviderTransferwise(models.Model):
raise UserError(_("Strong Customer Authentication is not configured"))
one_time_token = e.headers["X-2FA-Approval"]
signature = private_key.sign(
one_time_token.encode(), padding.PKCS1v15(), hashes.SHA256(),
one_time_token.encode(),
padding.PKCS1v15(),
hashes.SHA256(),
)
with self._transferwise_urlopen(
url, api_key, one_time_token, b64encode(signature).decode(),
url,
api_key,
one_time_token,
b64encode(signature).decode(),
) as response:
content = response.read().decode(
response.headers.get_content_charset() or "utf-8"
@@ -316,7 +332,8 @@ class OnlineBankStatementProviderTransferwise(models.Model):
self.certificate_public_key = (
private_key.public_key()
.public_bytes(
serialization.Encoding.PEM, serialization.PublicFormat.PKCS1,
serialization.Encoding.PEM,
serialization.PublicFormat.PKCS1,
)
.decode()
)
@@ -328,7 +345,9 @@ class OnlineBankStatementProviderTransferwise(models.Model):
self.ensure_one()
private_key = rsa.generate_private_key(
public_exponent=65537, key_size=2048, backend=default_backend(),
public_exponent=65537,
key_size=2048,
backend=default_backend(),
)
self.certificate_private_key = private_key.private_bytes(
serialization.Encoding.PEM,
@@ -338,7 +357,10 @@ class OnlineBankStatementProviderTransferwise(models.Model):
self.certificate_public_key = (
private_key.public_key()
.public_bytes(serialization.Encoding.PEM, serialization.PublicFormat.PKCS1,)
.public_bytes(
serialization.Encoding.PEM,
serialization.PublicFormat.PKCS1,
)
.decode()
)

View File

@@ -60,7 +60,10 @@ class TestAccountBankAccountStatementImportOnlineTransferwise(common.Transaction
self.transferwise_parse_transaction = lambda payload: (
Provider._transferwise_transaction_to_lines(
Provider._transferwise_preparse_transaction(
json.loads(payload, parse_float=Decimal,)
json.loads(
payload,
parse_float=Decimal,
)
)
)
)
@@ -118,7 +121,8 @@ class TestAccountBankAccountStatementImportOnlineTransferwise(common.Transaction
)
values_transferwise_profile = []
with mock.patch(
_provider_class + "._transferwise_retrieve", return_value=mocked_response,
_provider_class + "._transferwise_retrieve",
return_value=mocked_response,
):
values_transferwise_profile = self.OnlineBankStatementProvider.with_context(
{"api_base": "https://example.com", "api_key": "dummy"}
@@ -186,10 +190,12 @@ class TestAccountBankAccountStatementImportOnlineTransferwise(common.Transaction
return json.loads(payload, parse_float=Decimal)
with mock.patch(
_provider_class + "._transferwise_retrieve", side_effect=mock_response,
_provider_class + "._transferwise_retrieve",
side_effect=mock_response,
):
data = provider._obtain_statement_data(
self.now - relativedelta(hours=1), self.now,
self.now - relativedelta(hours=1),
self.now,
)
self.assertEqual(len(data[0]), 0)
@@ -213,10 +219,12 @@ class TestAccountBankAccountStatementImportOnlineTransferwise(common.Transaction
provider.password = "API_KEY"
with mock.patch(
_provider_class + "._transferwise_retrieve", return_value=[],
_provider_class + "._transferwise_retrieve",
return_value=[],
):
data = provider._obtain_statement_data(
self.now - relativedelta(hours=1), self.now,
self.now - relativedelta(hours=1),
self.now,
)
self.assertFalse(data)
@@ -298,7 +306,8 @@ edF6byMgXSzgOWYuRPXwmHpBQV0GiexQUAxVyUzaVWfil69LaFfXaw==
],
):
data = provider._obtain_statement_data(
self.now - relativedelta(hours=1), self.now,
self.now - relativedelta(hours=1),
self.now,
)
self.assertEqual(len(data[0]), 0)

View File

@@ -1,4 +1,5 @@
# generated from manifests external_dependencies
chardet
cryptography
ofxparse
xlrd

View File

@@ -0,0 +1 @@
../../../../account_bank_statement_import_online_transferwise

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)