Files
suite/connector_amazon_sp/components/backend_adapter.py
2022-02-04 13:25:45 -08:00

80 lines
2.7 KiB
Python

# © 2021 Hibou Corp.
from odoo.addons.component.core import AbstractComponent
# Feed API
from datetime import datetime
from xml.etree import ElementTree
class BaseAmazonConnectorComponent(AbstractComponent):
""" Base Amazon Connector Component
All components of this connector should inherit from it.
"""
_name = 'base.amazon.connector'
_inherit = 'base.connector'
_collection = 'amazon.backend'
class AmazonAdapter(AbstractComponent):
_name = 'amazon.adapter'
_inherit = ['base.backend.adapter', 'base.amazon.connector']
ElementTree = ElementTree
FEED_ENCODING = 'iso-8859-1'
def search(self, filters=None):
""" Search records according to some criterias
and returns a list of ids """
raise NotImplementedError
def read(self, id, attributes=None):
""" Returns the information of a record """
raise NotImplementedError
def search_read(self, filters=None):
""" Search records according to some criterias
and returns their information"""
raise NotImplementedError
def create(self, data):
""" Create a record on the external system """
raise NotImplementedError
def write(self, id, data):
""" Update records on the external system """
raise NotImplementedError
def delete(self, id):
""" Delete a record on the external system """
raise NotImplementedError
def _feed(self, message_type, backend):
root = self.ElementTree.Element('AmazonEnvelope',
{'{http://www.w3.org/2001/XMLSchema-instance}noNamespaceSchemaLocation': 'amzn-envelope.xsd'})
header = self.ElementTree.SubElement(root, 'Header')
self.ElementTree.SubElement(header, 'DocumentVersion').text = '1.01'
self.ElementTree.SubElement(header, 'MerchantIdentifier').text = backend.merchant_id
self.ElementTree.SubElement(root, 'MessageType').text = message_type
# note that you can remove and add your own Message node
message = self.ElementTree.SubElement(root, 'Message')
self.ElementTree.SubElement(message, 'MessageID').text = str(int(datetime.now().timestamp()))
return root, message
def _feed_string(self, node):
return self.ElementTree.tostring(node, encoding=self.FEED_ENCODING, method='xml')
@property
def api_instance(self):
try:
amazon_api = getattr(self.work, 'amazon_api')
except AttributeError:
raise AttributeError(
'You must provide a amazon_api attribute with a '
'Amazon instance to be able to use the '
'Backend Adapter.'
)
return amazon_api