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

View File

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

View File

@@ -1,4 +1,5 @@
# generated from manifests external_dependencies # generated from manifests external_dependencies
chardet chardet
cryptography
ofxparse ofxparse
xlrd 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,
)