From da7389ed3abebbeb2666a4b5e78ff101164abbd6 Mon Sep 17 00:00:00 2001 From: Dave Lasley Date: Mon, 24 Oct 2016 18:13:34 -0700 Subject: [PATCH] [IMP] connector_carepoint: Add session reconnect handling * Add support to reconnect sessions on certain errors * Bump `carepoint` lib version for `_init_env` method --- connector_carepoint/unit/backend_adapter.py | 19 +++++++++++++++++-- requirements.txt | 2 +- test_requirements.txt | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/connector_carepoint/unit/backend_adapter.py b/connector_carepoint/unit/backend_adapter.py index d872119..eb55526 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 self.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