diff --git a/connector_carepoint/unit/backend_adapter.py b/connector_carepoint/unit/backend_adapter.py index d872119..f208308 100644 --- a/connector_carepoint/unit/backend_adapter.py +++ b/connector_carepoint/unit/backend_adapter.py @@ -4,6 +4,11 @@ from openerp.addons.connector.unit.backend_adapter import CRUDAdapter +try: + from sqlalchemy.exc import InvalidRequestError +except ImportError: + pass + try: from carepoint import Carepoint except ImportError: @@ -13,6 +18,10 @@ class CarepointCRUDAdapter(CRUDAdapter): """ External Records Adapter for Carepoint """ + RECONNECT_EXCEPTIONS = [ + InvalidRequestError, + ] + def __init__(self, connector_env): """ Ready the DB adapter :param connector_env: current environment (backend, session, ...) @@ -36,13 +45,19 @@ def __to_camel_case(self, snake_case): parts = snake_case.split('_') return "".join(x.title() for x in parts) - def __get_cp_model(self): + def __get_cp_model(self, retry=True): """ Get the correct model object by name from Carepoint lib :rtype: :class:`sqlalchemy.schema.Table` """ name = self.connector_env.model._cp_lib camel_name = self.__to_camel_case(name) - return self.carepoint[camel_name] + try: + return self.carepoint[camel_name] + except RECONNECT_EXCEPTIONS: + if retry: + self.carepoint._init_env(True) + return self.__get_cp_model(False) + raise def search(self, **filters): """ Search table by filters and return record ids diff --git a/requirements.txt b/requirements.txt index dbce327..d98799e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,4 @@ pint>=0.7.2 SQLAlchemy>=1.1.1 pysmb>=1.1.18 phonenumbers>=7.7.2 -carepoint>=0.1.3.dev170 +carepoint>=0.1.7 diff --git a/test_requirements.txt b/test_requirements.txt index 48a68f7..6f6536c 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -11,4 +11,4 @@ xmlrunner>=1.7.7 pysmb>=1.1.18 pint>=0.7.2 phonenumbers>=7.7.2 -carepoint>=0.1.3.dev170 +carepoint>=0.1.7