Refactor usage of get_vendor() lookup
This commit is contained in:
parent
4607425f40
commit
7c76a7839e
5 changed files with 52 additions and 12 deletions
|
|
@ -507,7 +507,8 @@ class PurchaseBatchHandler(BatchHandler):
|
|||
Returns the "configured" vendor for the given invoice parser.
|
||||
"""
|
||||
session = self.app.get_session(batch)
|
||||
vendor = api.get_vendor(session, parser.vendor_key)
|
||||
vendor_handler = self.get_vendor_handler()
|
||||
vendor = vendor_handler.get_vendor(session, parser.vendor_key)
|
||||
if vendor is not batch.vendor:
|
||||
raise RuntimeError("Parser is for vendor '{}' "
|
||||
"but batch is for: {}".format(
|
||||
|
|
@ -730,7 +731,8 @@ class PurchaseBatchHandler(BatchHandler):
|
|||
parser = self.require_invoice_parser(batch)
|
||||
parser.session = session
|
||||
|
||||
parser.vendor = api.get_vendor(session, parser.vendor_key)
|
||||
vendor_handler = self.app.get_vendor_handler()
|
||||
parser.vendor = vendor_handler.get_vendor(session, parser.vendor_key)
|
||||
if parser.vendor is not child_batch.vendor:
|
||||
raise RuntimeError("Parser is for vendor '{}' but batch is for: {}".format(
|
||||
parser.vendor_key, child_batch.vendor))
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2021 Lance Edgar
|
||||
# Copyright © 2010-2022 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
|
@ -47,7 +47,8 @@ class VendorInvoiceHandler(BatchHandler):
|
|||
parser_key = kwargs.get('parser_key')
|
||||
if parser_key and not kwargs.get('vendor') and not kwargs.get('vendor_uuid'):
|
||||
parser = require_invoice_parser(self.config, parser_key)
|
||||
kwargs['vendor'] = api.get_vendor(session, parser.vendor_key)
|
||||
vendor_handler = self.app.get_vendor_handler()
|
||||
kwargs['vendor'] = vendor_handler.get_vendor(session, parser.vendor_key)
|
||||
return super(VendorInvoiceHandler, self).make_batch(session, progress=progress, **kwargs)
|
||||
|
||||
def should_populate(self, batch):
|
||||
|
|
@ -70,7 +71,8 @@ class VendorInvoiceHandler(BatchHandler):
|
|||
path = batch.filepath(self.config)
|
||||
parser = require_invoice_parser(self.config, batch.parser_key)
|
||||
parser.session = session
|
||||
parser.vendor = api.get_vendor(session, parser.vendor_key)
|
||||
vendor_handler = self.app.get_vendor_handler()
|
||||
parser.vendor = vendor_handler.get_vendor(session, parser.vendor_key)
|
||||
assert batch.vendor is parser.vendor
|
||||
batch.invoice_date = parser.parse_invoice_date(path)
|
||||
self.setup_populate(batch, progress=progress)
|
||||
|
|
|
|||
|
|
@ -26,16 +26,24 @@ Vendors API
|
|||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import warnings
|
||||
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
|
||||
from rattail.db import model
|
||||
|
||||
|
||||
# TODO: need to refactor this into the AppHandler, or..?
|
||||
# TODO: remove this
|
||||
def get_vendor(session, key):
|
||||
"""
|
||||
Locate and return a vendor for the given key, if possible.
|
||||
|
||||
.. warning::
|
||||
|
||||
This function is deprecated; use
|
||||
:meth:`rattail.vendors.handler.VendorHandler.get_vendor()`
|
||||
instead.
|
||||
|
||||
First the key is assumed to be a ``Vendor.id`` value. If no matches are
|
||||
found, then it looks for a special setting in the database. If one is
|
||||
found, ``get_vendor()`` is called again with its value.
|
||||
|
|
@ -47,6 +55,10 @@ def get_vendor(session, key):
|
|||
:returns: The :class:`rattail.db.model.Vendor` instance if found; otherwise
|
||||
``None``.
|
||||
"""
|
||||
warnings.warn("api.get_vendor() is a deprecated function; please "
|
||||
"use VendorHandler.get_vendor() method instead",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
|
||||
# Vendor.uuid match?
|
||||
vendor = session.query(model.Vendor).get(key)
|
||||
if vendor:
|
||||
|
|
|
|||
30
rattail/vendors/handler.py
vendored
30
rattail/vendors/handler.py
vendored
|
|
@ -28,6 +28,8 @@ from __future__ import unicode_literals, absolute_import
|
|||
|
||||
import six
|
||||
|
||||
from sqlalchemy import orm
|
||||
|
||||
from rattail.app import GenericHandler
|
||||
from rattail.util import load_entry_points
|
||||
|
||||
|
|
@ -76,9 +78,33 @@ class VendorHandler(GenericHandler):
|
|||
This is mainly useful to allow catalog and invoice parsers to
|
||||
"loosely" associate with a particular vendor by way of this
|
||||
key, which could be shared across organizations etc.
|
||||
|
||||
:param session: Active database session.
|
||||
|
||||
:param key: Value to use when searching for the vendor.
|
||||
|
||||
:returns: The :class:`~rattail.db.model.vendors.Vendor`
|
||||
instance if found; otherwise ``None``.
|
||||
"""
|
||||
from rattail.db.api.vendors import get_vendor
|
||||
return get_vendor(session, key)
|
||||
model = self.model
|
||||
|
||||
# Vendor.uuid match?
|
||||
vendor = session.query(model.Vendor).get(key)
|
||||
if vendor:
|
||||
return vendor
|
||||
|
||||
# Vendor.id match?
|
||||
try:
|
||||
return session.query(model.Vendor)\
|
||||
.filter(model.Vendor.id == key)\
|
||||
.one()
|
||||
except orm.exc.NoResultFound:
|
||||
pass
|
||||
|
||||
# try settings, if value then recurse
|
||||
key = self.app.get_setting(session, 'rattail.vendor.{}'.format(key))
|
||||
if key is not None:
|
||||
return self.get_vendor(session, key, **kwargs)
|
||||
|
||||
def render_vendor(self, vendor, **kwargs):
|
||||
return six.text_type(vendor)
|
||||
|
|
|
|||
6
rattail/vendors/invoices.py
vendored
6
rattail/vendors/invoices.py
vendored
|
|
@ -71,11 +71,9 @@ class InvoiceParser(object):
|
|||
Fetch the :class:~rattail.db.model.vendors.Vendor` record
|
||||
which is associated with the current parser, if any.
|
||||
"""
|
||||
from rattail.db import api
|
||||
|
||||
if self.vendor_key:
|
||||
vendor = api.get_vendor(session, self.vendor_key)
|
||||
return vendor
|
||||
vendor_handler = self.app.get_vendor_handler()
|
||||
return vendor_handler.get_vendor(session, self.vendor_key)
|
||||
|
||||
def parse_invoice_date(self, path):
|
||||
"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue