Skip to content

Commit

Permalink
[IMP] connector_carepoint: Add FDB Image import
Browse files Browse the repository at this point in the history
* Update importers for proper sync and inheritance logic
  • Loading branch information
lasley committed Sep 8, 2016
1 parent 481aa53 commit f8f5e0d
Show file tree
Hide file tree
Showing 8 changed files with 230 additions and 19 deletions.
27 changes: 16 additions & 11 deletions connector_carepoint/models/fdb_img.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from openerp.addons.connector.unit.mapper import (mapping,
)
from ..unit.backend_adapter import CarepointCRUDAdapter
from ..unit.mapper import CarepointImportMapper
from ..unit.mapper import CarepointImportMapper, trim
from ..backend import carepoint
from ..unit.import_synchronizer import (DelayedBatchImporter,
CarepointImporter,
Expand Down Expand Up @@ -59,13 +59,20 @@ class FdbImgBatchImporter(DelayedBatchImporter):
class FdbImgImportMapper(CarepointImportMapper):
_model_name = 'carepoint.fdb.img'
direct = [
('IMGFILENM', 'file_name'),
('data', 'data'),
(trim('IMGFILENM'), 'name'),
]

@mapping
def data(self, record):
return {'data': record['data'].decode('base64')}
def datas(self, record):
return {'datas': record['data']}

@mapping
def mimetype(self, record):
return {'mimetype': 'image/jpeg'}

@mapping
def type(self, record):
return {'type': 'binary'}

@mapping
def carepoint_id(self, record):
Expand All @@ -75,14 +82,12 @@ def carepoint_id(self, record):
@carepoint
class FdbImgImporter(CarepointImporter):
_model_name = ['carepoint.fdb.img']

_base_mapper = FdbImgImportMapper

def _get_carepoint_data(self):
""" Return the raw Carepoint data for ``self.carepoint_id`` """
_logger.debug('Getting CP data for %s', self.carepoint_id)
record = self.backend_adapter.read(self.carepoint_id, [
'IMGFILENM', 'IMAGE_PATH', 'IMGID'
])
record['data'] = self.backend_adapter.read_image(record['IMAGE_PATH'])
record = super(FdbImgImporter, self)._get_carepoint_data()
record.data = self.backend_adapter.read_image(
record['IMAGE_PATH'],
)
return record
37 changes: 35 additions & 2 deletions connector_carepoint/models/fdb_img_date.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import logging
from openerp import models, fields
from openerp.addons.connector.connector import ConnectorUnit
from openerp.addons.connector.unit.mapper import (mapping,
)
from ..unit.backend_adapter import CarepointCRUDAdapter
Expand Down Expand Up @@ -46,6 +47,18 @@ class FdbImgDateAdapter(CarepointCRUDAdapter):
_model_name = 'carepoint.fdb.img.date'


@carepoint
class FdbImgDateUnit(ConnectorUnit):
_model_name = 'carepoint.fdb.img.date'

def _import_by_unique_id(self, unique_id):
""" It imports by CP col ``IMGUNIQID`` """
adapter = self.unit_for(FdbImgDateAdapter)
importer = self.unit_for(FdbImgDateImporter)
for record in adapter.search(IMGUNIQID=unique_id):
importer.run(record)


@carepoint
class FdbImgDateBatchImporter(DelayedBatchImporter):
""" Import the Carepoint FdbImgDates.
Expand All @@ -61,15 +74,35 @@ class FdbImgDateImportMapper(CarepointImportMapper):
direct = [
('IMGSTRTDT', 'start_date'),
('IMGSTOPDT', 'stop_date'),
('IMGID', 'img_id'),
]

@mapping
def relation_id(self, record):
binder = self.binder_for('carepoint.fdb.img.id')
relation_id = binder.to_odoo(record['IMGUNIQID'])
return {'relation_id': relation_id}

@mapping
def image_id(self, record):
binder = self.binder_for('carepoint.fdb.img')
img_id = binder.to_odoo(record['IMGID'])
return {'image_id': img_id}

@mapping
def carepoint_id(self, record):
return {'carepoint_id': record['IMGUNIQID']}
return {'carepoint_id': '%s,%s' % (record['IMGUNIQID'],
record['IMGSTRTDT'],
)}


@carepoint
class FdbImgDateImporter(CarepointImporter):
_model_name = ['carepoint.fdb.img.date']
_base_mapper = FdbImgDateImportMapper

def _import_dependencies(self):
""" It imports depends for record """
self._import_dependency(self.carepoint_record['IMGUNIQID'],
'carepoint.fdb.img.id')
self._import_dependency(self.carepoint_record['IMGID'],
'carepoint.fdb.img')
54 changes: 52 additions & 2 deletions connector_carepoint/models/fdb_img_id.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

import logging
from openerp import models, fields
from openerp.addons.connector.connector import ConnectorUnit
from openerp.addons.connector.unit.mapper import (mapping,
only_create,
)
from ..unit.backend_adapter import CarepointCRUDAdapter
from ..unit.mapper import CarepointImportMapper
Expand All @@ -13,6 +15,9 @@
CarepointImporter,
)

from .fdb_img_date import FdbImgDateUnit


_logger = logging.getLogger(__name__)


Expand Down Expand Up @@ -46,6 +51,21 @@ class FdbImgIdAdapter(CarepointCRUDAdapter):
_model_name = 'carepoint.fdb.img.id'


@carepoint
class FdbImgIdUnit(ConnectorUnit):
_model_name = 'carepoint.fdb.img.id'

def _import_by_ndc(self, ndc):
""" It should search for records w/ ndc and import
Params:
ndc: :type:str NDC to seartch for
"""
adapter = self.unit_for(FdbImgIdAdapter)
importer = self.unit_for(FdbImgIdImporter)
for record in adapter.search(IMGNDC=ndc):
importer.run(record)


@carepoint
class FdbImgIdBatchImporter(DelayedBatchImporter):
""" Import the Carepoint FdbImgIds.
Expand All @@ -58,12 +78,25 @@ class FdbImgIdBatchImporter(DelayedBatchImporter):
@carepoint
class FdbImgIdImportMapper(CarepointImportMapper):
_model_name = 'carepoint.fdb.img.id'

direct = [
('IMGDFID', 'df_id'),
('IMGNDC', 'ndc'),
('IMGMFGID', 'mfg_id'),
]

@mapping
@only_create
def ndc_id(self, record):
binder = self.binder_for('carepoint.fdb.ndc')
ndc_id = binder.to_odoo(record['IMGNDC'])
return {'ndc_id': ndc_id}

@mapping
@only_create
def manufacturer_id(self, record):
binder = self.binder_for('carepoint.fdb.img.mfg')
mfg_id = binder.to_odoo(record['IMGMFGID'])
return {'manufacturer_id': mfg_id}

@mapping
def carepoint_id(self, record):
return {'carepoint_id': record['IMGUNIQID']}
Expand All @@ -73,3 +106,20 @@ def carepoint_id(self, record):
class FdbImgIdImporter(CarepointImporter):
_model_name = ['carepoint.fdb.img.id']
_base_mapper = FdbImgIdImportMapper

def _import_dependencies(self):
""" Import depends for record """
record = self.carepoint_record
self._import_dependency(record['IMGNDC'].strip(),
'carepoint.fdb.ndc')
self._import_dependency(record['IMGMFGID'],
'carepoint.fdb.img.mfg')

def _after_import(self, binding):
img_unit = self.unit_for(
FdbImgDateUnit,
model='carepoint.fdb.img.date',
)
img_unit._import_by_unique_id(
self.carepoint_record['IMGUNIQID'],
)
17 changes: 14 additions & 3 deletions connector_carepoint/models/fdb_img_mfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
import logging
from openerp import models, fields
from openerp.addons.connector.unit.mapper import (mapping,
only_create,
)
from ..unit.backend_adapter import CarepointCRUDAdapter
from ..unit.mapper import PartnerImportMapper
from ..unit.mapper import trim_and_titleize
from ..unit.mapper import PartnerImportMapper, trim
from ..backend import carepoint
from ..unit.import_synchronizer import (DelayedBatchImporter,
CarepointImporter,
Expand Down Expand Up @@ -60,9 +60,20 @@ class FdbImgMfgBatchImporter(DelayedBatchImporter):
class FdbImgMfgImportMapper(PartnerImportMapper):
_model_name = 'carepoint.fdb.img.mfg'
direct = [
(trim_and_titleize('IMGMFGNAME'), 'name'),
(trim('IMGMFGNAME'), 'name'),
]

@mapping
@only_create
def manufacturer_id(self, record):
""" It finds Manufacturer of same name and binds on it """
manufacturer = self.env['medical.manufacturer'].search(
[('name', 'ilike', record['IMGMFGNAME'].strip())],
limit=1,
)
if len(manufacturer):
return {'manufacturer_id': manufacturer.id}

@mapping
def carepoint_id(self, record):
return {'carepoint_id': record['IMGMFGID']}
Expand Down
18 changes: 18 additions & 0 deletions connector_carepoint/models/fdb_ndc.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
from psycopg2 import IntegrityError
from openerp.exceptions import ValidationError

from .fdb_img_id import FdbImgIdUnit


_logger = logging.getLogger(__name__)


Expand Down Expand Up @@ -289,6 +292,12 @@ def medicament_id(self, record):

return {'medicament_id': medicament_id[0].id}

@mapping
def lbl_mfg_id(self, record):
binder = self.binder_for('carepoint.fdb.lbl.rid')
lbl_rid = binder.to_odoo(record['lblrid'].strip())
return {'lbl_mfg_id': lbl_rid}

@mapping
def carepoint_id(self, record):
return {'carepoint_id': record['ndc'].strip()}
Expand All @@ -310,3 +319,12 @@ def _import_dependencies(self):
pass
self._import_dependency(record['gcn_seqno'],
'carepoint.fdb.gcn')

def _after_import(self, binding):
img_unit = self.unit_for(
FdbImgIdUnit,
model='carepoint.fdb.img.id',
)
img_unit._import_by_ndc(
self.carepoint_record['ndc'].strip(),
)
1 change: 1 addition & 0 deletions connector_carepoint/tests/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@
from . import test_address_abstract
from . import test_address
from . import test_address_patient
from . import test_fdb_img
93 changes: 93 additions & 0 deletions connector_carepoint/tests/models/test_fdb_img.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2016 LasLabs Inc.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp.addons.connector_carepoint.models import fdb_img

from ..common import SetUpCarepointBase


model = 'openerp.addons.connector_carepoint.models.fdb_img'


class EndTestException(Exception):
pass


class FdbImgTestBase(SetUpCarepointBase):

def setUp(self):
super(FdbImgTestBase, self).setUp()
self.model = 'carepoint.fdb.img'
self.mock_env = self.get_carepoint_helper(
self.model
)

@property
def record(self):
""" Model record fixture """
return {
'data': 'I am data'.encode('base64'),
'IMGID': 123,
'IMGFILENM': 'filename',
'IMAGE_PATH': '/this/is/a/path.jpg',
}


class TestFdbImgImportMapper(FdbImgTestBase):

def setUp(self):
super(TestFdbImgImportMapper, self).setUp()
self.Unit = fdb_img.FdbImgImportMapper
self.unit = self.Unit(self.mock_env)

def test_carepoint_id(self):
""" It should return correct attribute """
expect = {'carepoint_id': self.record['IMGID']}
res = self.unit.carepoint_id(self.record)
self.assertDictEqual(expect, res)

def test_datas(self):
""" It should return correct attribute """
expect = {'datas': self.record['data']}
res = self.unit.datas(self.record)
self.assertDictEqual(expect, res)

def test_mimetype(self):
""" It should return correct attribute """
expect = {'mimetype': 'image/jpeg'}
res = self.unit.mimetype(self.record)
self.assertDictEqual(expect, res)

def test_type(self):
""" It should return correct attribute """
expect = {'type': 'binary'}
res = self.unit.type(self.record)
self.assertDictEqual(expect, res)


class TestFdbImgImporter(FdbImgTestBase):

def setUp(self):
super(TestFdbImgImporter, self).setUp()
self.Unit = fdb_img.FdbImgImporter
self.unit = self.Unit(self.mock_env)
self.unit.carepoint_record = self.record

def test_get_carepoint_data_read_image(self):
""" It should obtain image from remote Carepoint server """
with self.mock_adapter(self.unit):
self.unit._get_carepoint_data()
read = self.unit.backend_adapter.read_image
read.assert_called_once_with(
self.unit.backend_adapter.read()['IMAGE_PATH'],
)

def test_get_carepoint_data_return(self):
""" It should return result of image read from server """
with self.mock_adapter(self.unit):
res = self.unit._get_carepoint_data()
self.assertEqual(
self.unit.backend_adapter.read_image(),
res.data,
)
2 changes: 1 addition & 1 deletion connector_carepoint/unit/backend_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def read_image(self, path):
path: :type:`str` SMB path of image
Returns:
:type:`str` Binary string representation of file
:type:`str` Base64 encoded binary file
"""
return self.carepoint.get_file(path).read().encode('base64')

Expand Down

0 comments on commit f8f5e0d

Please sign in to comment.