Skip to content

Commit

Permalink
[IMP] global: refactor wallet data retrieval processes
Browse files Browse the repository at this point in the history
Refactors wallet data retrieval processes so that the data
normalization for the API is not managed by wallet and partner models anymore.
  • Loading branch information
Stéphan Sainléger committed Feb 12, 2024
1 parent df8bedb commit 2c34ca5
Show file tree
Hide file tree
Showing 13 changed files with 135 additions and 91 deletions.
34 changes: 0 additions & 34 deletions lcc_comchain_base/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,6 @@ class ResPartner(models.Model):

_inherit = "res.partner"

def _update_auth_data(self, password):
self.ensure_one()
data = super(ResPartner, self)._update_auth_data(password)
wallets = self.get_wallets("comchain")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data)
if wallets:
for wallet in wallets:
data.extend(wallet.comchain_backend_accounts_data)
return data

def _update_search_data(self, backend_keys):
self.ensure_one()
_logger.debug("SEARCH: backend_keys = %s" % backend_keys)
data = super(ResPartner, self)._update_search_data(backend_keys)
wallets = self.get_wallets("comchain")
for wallet in wallets:
if wallet.comchain_id:
for backend_key in backend_keys:
if backend_key.startswith("comchain:"):
data[backend_key] = [wallet.comchain_id]
_logger.debug("SEARCH: data %s" % data)
return data

def _get_backend_credentials(self):
self.ensure_one()
data = super(ResPartner, self)._get_backend_credentials()
wallets = self.get_wallets("comchain")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data)
for wallet in wallets:
data.extend(wallet.comchain_backend_accounts_data)
return data

def backends(self):
self.ensure_one()
backends = super(ResPartner, self).backends()
Expand Down
2 changes: 1 addition & 1 deletion lcc_comchain_base/models/res_partner_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def comchain_backend_accounts_data(self):
if not backend_id:
## Comchain financial backend is not configured in general settings
return []
comchain_product = self.env.ref("lcc_comchain_base.product_product_comchain")
comchain_product = self.env.ref("lcc_comchain_base.product_product_comchain").sudo()
data = {
"type": backend_id,
"accounts": [],
Expand Down
2 changes: 2 additions & 0 deletions lcc_comchain_base/services/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
from . import comchain_services
from . import auth_services
from . import partner_services
19 changes: 19 additions & 0 deletions lcc_comchain_base/services/auth_services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import logging

from odoo.addons.component.core import Component
from odoo.addons.lcc_lokavaluto_app_connection.services.auth_services import AuthService

_logger = logging.getLogger(__name__)


class AuthService(Component):
_inherit = "auth.service"

def _update_auth_data(self, partner, password):
data = super(AuthService, self)._update_auth_data(partner, password)
wallets = partner.get_wallets("comchain")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data)
for wallet in wallets:
data.extend(wallet.comchain_backend_accounts_data)
return data
33 changes: 33 additions & 0 deletions lcc_comchain_base/services/partner_services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import logging

from odoo.addons.component.core import Component
from odoo.addons.lcc_lokavaluto_app_connection.services.partner_services import (
PartnerService,
)

_logger = logging.getLogger(__name__)


class PartnerService(Component):
_inherit = "partner.service"

def _update_search_data(self, partner, backend_keys):
_logger.debug("SEARCH: backend_keys = %s" % backend_keys)
data = super(PartnerService, self)._update_search_data(partner, backend_keys)
wallets = partner.get_wallets("comchain")
for wallet in wallets:
if wallet.comchain_id:
for backend_key in backend_keys:
if backend_key.startswith("comchain:"):
data[backend_key] = [wallet.comchain_id]
_logger.debug("SEARCH: data %s" % data)
return data

def _get_backend_credentials(self, partner):
data = super(PartnerService, self)._get_backend_credentials(partner)
wallets = partner.get_wallets("comchain")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].comchain_backend_accounts_data)
for wallet in wallets:
data.extend(wallet.comchain_backend_accounts_data)
return data
38 changes: 0 additions & 38 deletions lcc_cyclos_base/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,44 +13,6 @@ class ResPartner(models.Model):

_inherit = "res.partner"

def _update_auth_data(self, password):
self.ensure_one()
data = super(ResPartner, self)._update_auth_data(password)
# Update cyclos password with odoo one from authenticate session
wallets = self.get_wallets("cyclos")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].cyclos_backend_json_data)
for wallet in wallets:
wallet_json_data = wallet.cyclos_backend_json_data
if wallet and wallet_json_data:
wallet.force_cyclos_password(password)
new_token = wallet.cyclos_create_user_token(self.id, password)
if new_token:
for ua in wallet_json_data[0]["accounts"]:
ua["token"] = new_token
data.extend(wallet_json_data)
return data

def _get_backend_credentials(self):
self.ensure_one()
data = super(ResPartner, self)._get_backend_credentials()
wallets = self.get_wallets("cyclos")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].cyclos_backend_json_data)
for wallet in wallets:
data.extend(wallet.cyclos_backend_json_data)
return data

def _update_search_data(self, backend_keys):
self.ensure_one()
data = super(ResPartner, self)._update_search_data(backend_keys)
wallets = self.get_wallets("cyclos")
for wallet in wallets:
for backend_key in backend_keys:
if backend_key.startswith("cyclos:") and wallets.cyclos_id:
data[backend_key] = [wallet.cyclos_id]
return data

def backends(self):
self.ensure_one()
backends = super(ResPartner, self).backends()
Expand Down
2 changes: 1 addition & 1 deletion lcc_cyclos_base/models/res_partner_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def cyclos_backend_json_data(self):
if not cyclos_server_url:
## Cyclos financial backend is not configured in general settings
return []
cyclos_product = self.env.ref("lcc_cyclos_base.product_product_cyclos")
cyclos_product = self.env.ref("lcc_cyclos_base.product_product_cyclos").sudo()
data = {
"type": "cyclos",
"accounts": [],
Expand Down
2 changes: 2 additions & 0 deletions lcc_cyclos_base/services/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
from . import cyclos_services
from . import auth_services
from . import partner_services
27 changes: 27 additions & 0 deletions lcc_cyclos_base/services/auth_services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import logging

from odoo.addons.component.core import Component
from odoo.addons.lcc_lokavaluto_app_connection.services.auth_services import AuthService

_logger = logging.getLogger(__name__)


class AuthService(Component):
_inherit = "auth.service"

def _update_auth_data(self, partner, password):
data = super(AuthService, self)._update_auth_data(partner, password)
# Update cyclos password with odoo one from authenticate session
wallets = partner.get_wallets("cyclos")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].cyclos_backend_json_data)
for wallet in wallets:
wallet_json_data = wallet.cyclos_backend_json_data
if wallet and wallet_json_data:
wallet.force_cyclos_password(password)
new_token = wallet.cyclos_create_user_token(partner.id, password)
if new_token:
for ua in wallet_json_data[0]["accounts"]:
ua["token"] = new_token
data.extend(wallet_json_data)
return data
30 changes: 30 additions & 0 deletions lcc_cyclos_base/services/partner_services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import logging

from odoo.addons.component.core import Component
from odoo.addons.lcc_lokavaluto_app_connection.services.partner_services import (
PartnerService,
)

_logger = logging.getLogger(__name__)


class PartnerService(Component):
_inherit = "partner.service"

def _update_search_data(self, partner, backend_keys):
data = super(PartnerService, self)._update_search_data(partner, backend_keys)
wallets = partner.get_wallets("cyclos")
for wallet in wallets:
for backend_key in backend_keys:
if backend_key.startswith("cyclos:") and wallets.cyclos_id:
data[backend_key] = [wallet.cyclos_id]
return data

def _get_backend_credentials(self, partner):
data = super(PartnerService, self)._get_backend_credentials(partner)
wallets = partner.get_wallets("cyclos")
if len(wallets) == 0:
data.extend(self.env["res.partner.backend"].cyclos_backend_json_data)
for wallet in wallets:
data.extend(wallet.cyclos_backend_json_data)
return data
9 changes: 0 additions & 9 deletions lcc_lokavaluto_app_connection/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,6 @@ def create_numeric_lcc_order(self, wallet_id, amount):
)
return order_id

def _update_auth_data(self, password):
return []

def _get_backend_credentials(self):
return []

def _update_search_data(self, backend_keys):
return {}

def backends(self):
return set()

Expand Down
8 changes: 6 additions & 2 deletions lcc_lokavaluto_app_connection/services/auth_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ def authenticate(self, **params):
_logger.debug("USER: %s" % current_user)
if current_user:
partner = current_user.partner_id
to_add = partner._update_auth_data(
request.httprequest.authorization.password
to_add = self._update_auth_data(
partner, request.httprequest.authorization.password
)
response["prefetch"] = {
"backend_credentials": to_add,
Expand Down Expand Up @@ -108,6 +108,10 @@ def reset_password(self):
return {"error": error, "status": "Error"}
return {"status": "OK"}

# Privates functions
def _update_auth_data(self, partner, password):
return []

# Validator
def _validator_authenticate(self):
return {
Expand Down
20 changes: 14 additions & 6 deletions lcc_lokavaluto_app_connection/services/partner_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def backend_credentials(self):
This method is used to authenticate and get the token for the user on mobile app.
"""
partner = self.env.user.partner_id
response = partner._get_backend_credentials()
response = self._get_backend_credentials(partner)
return response

@restapi.method(
Expand Down Expand Up @@ -247,8 +247,9 @@ def search_recipients(self, recipients_search_info):
for recipient in recipients:
partner = recipient.partner_id
row = partner.lcc_profile_info()[0]
row["monujo_backends"] = partner._update_search_data(
[k for k in backend_keys if k.startswith("%s:" % recipient.type)]
row["monujo_backends"] = self._update_search_data(
partner,
[k for k in backend_keys if k.startswith("%s:" % recipient.type)],
)
rows.append(row)

Expand Down Expand Up @@ -292,8 +293,9 @@ def search_recipient_by_uri(self):

partner = recipients[0].partner_id
recipient = partner.lcc_profile_info()[0]
recipient["monujo_backends"] = partner._update_search_data(
[k for k in backend_keys if k.startswith("%s:" % recipients[0].type)]
recipient["monujo_backends"] = self._update_search_data(
partner,
[k for k in backend_keys if k.startswith("%s:" % recipients[0].type)],
)

return recipient
Expand Down Expand Up @@ -393,7 +395,7 @@ def _get_formatted_recipients(self, recipients, backend_keys):
if backend_keys:
for partner in recipients:
row = partner.lcc_profile_info()[0]
row["monujo_backends"] = partner._update_search_data(backend_keys)
row["monujo_backends"] = self._update_search_data(partner, backend_keys)
rows.append(row)
return {"count": len(rows), "rows": rows}

Expand All @@ -405,6 +407,12 @@ def _prepare_params(self, params):
params["%s_id" % key] = val["id"]
return params

def _update_search_data(self, partner, backend_keys):
return {}

def _get_backend_credentials(self, partner):
return []

def _get_credit_requests(self, wallet, status):
"""Return data on all the opened requests of the wallets"""
CreditRequestSU = self.env["credit.request"].sudo()
Expand Down

0 comments on commit 2c34ca5

Please sign in to comment.