Add export-rattail command, plus ProductImage support for Rattail->Rattail

This commit is contained in:
Lance Edgar 2017-02-23 15:06:31 -06:00
parent 6c697c1bd1
commit 7c481d3481
3 changed files with 77 additions and 13 deletions

View file

@ -194,6 +194,32 @@ class ImportSubcommand(Subcommand):
log.info("transaction was committed")
class ExportRattail(ImportSubcommand):
"""
Export data to another Rattail database
"""
name = 'export-rattail'
description = __doc__.strip()
default_handler_spec = 'rattail.importing.rattail:FromRattailToRattailExport'
def get_handler_factory(self):
spec = self.config.get('rattail.exporting', 'rattail.handler',
default=self.default_handler_spec)
return load_object(spec)
def add_parser_args(self, parser):
super(ExportRattail, self).add_parser_args(parser)
parser.add_argument('--dbkey', metavar='KEY', default='host',
help="Config key for database engine to be used as the \"target\" "
"Rattail system, i.e. where data will be exported. This key must "
"be defined in the [rattail.db] section of your config file.")
def get_handler_kwargs(self, **kwargs):
if 'args' in kwargs:
kwargs['dbkey'] = kwargs['args'].dbkey
return kwargs
class ImportToRattail(ImportSubcommand):
"""
Generic base class for commands which import *to* a Rattail system.
@ -215,7 +241,7 @@ class ImportRattail(ImportToRattail):
name = 'import-rattail'
description = __doc__.strip()
handler_key = 'rattail'
default_handler_spec = 'rattail.importing.rattail:FromRattailToRattail'
default_handler_spec = 'rattail.importing.rattail:FromRattailToRattailImport'
def add_parser_args(self, parser):
super(ImportRattail, self).add_parser_args(parser)

View file

@ -53,19 +53,10 @@ class ToRattailHandler(ToSQLAlchemyHandler):
return Session()
class FromRattailToRattail(FromRattailHandler, ToRattailHandler):
class FromRattailToRattailBase(object):
"""
Handler for Rattail -> Rattail data import.
Common base class for Rattail -> Rattail data import/export handlers.
"""
local_title = "Rattail (local)"
dbkey = 'host'
@property
def host_title(self):
return "Rattail ({})".format(self.dbkey)
def make_host_session(self):
return Session(bind=self.config.rattail_engines[self.dbkey])
def get_importers(self):
importers = OrderedDict()
@ -108,15 +99,49 @@ class FromRattailToRattail(FromRattailHandler, ToRattailHandler):
importers['ProductCode'] = ProductCodeImporter
importers['ProductCost'] = ProductCostImporter
importers['ProductPrice'] = ProductPriceImporter
importers['ProductImage'] = ProductImageImporter
return importers
def get_default_keys(self):
keys = self.get_importer_keys()
if 'AdminUser' in keys:
keys.remove('AdminUser')
keys.remove('ProductImage')
return keys
class FromRattailToRattailImport(FromRattailToRattailBase, FromRattailHandler, ToRattailHandler):
"""
Handler for Rattail -> Rattail data import.
"""
local_title = "Rattail (local)"
dbkey = 'host'
@property
def host_title(self):
return "Rattail ({})".format(self.dbkey)
def make_host_session(self):
return Session(bind=self.config.rattail_engines[self.dbkey])
# TODO: deprecate/remove this?
FromRattailToRattail = FromRattailToRattailImport
class FromRattailToRattailExport(FromRattailToRattailBase, FromRattailHandler, ToRattailHandler):
"""
Handler for Rattail -> Rattail data import.
"""
host_title = "Rattail (default)"
@property
def local_title(self):
return "Rattail ({})".format(self.dbkey)
def make_session(self):
return Session(bind=self.config.rattail_engines[self.dbkey])
class FromRattail(FromSQLAlchemy):
"""
Base class for Rattail -> Rattail data importers.
@ -272,7 +297,16 @@ class BrandImporter(FromRattail, model.BrandImporter):
pass
class ProductImporter(FromRattail, model.ProductImporter):
pass
# TODO...
@property
def simple_fields(self):
fields = super(ProductImporter, self).simple_fields
fields.remove('unit_uuid')
fields.remove('regular_price_uuid')
fields.remove('current_price_uuid')
return fields
class ProductCodeImporter(FromRattail, model.ProductCodeImporter):
pass
@ -282,3 +316,6 @@ class ProductCostImporter(FromRattail, model.ProductCostImporter):
class ProductPriceImporter(FromRattail, model.ProductPriceImporter):
pass
class ProductImageImporter(FromRattail, model.ProductImageImporter):
pass

View file

@ -218,6 +218,7 @@ datasync = rattail.commands.core:DataSync
date-organize = rattail.commands.core:DateOrganize
dbsync = rattail.commands.core:DatabaseSyncCommand
dump = rattail.commands.core:Dump
export-rattail = rattail.commands.importing:ExportRattail
filemon = rattail.commands.core:FileMonitorCommand
import-csv = rattail.commands.core:ImportCSV
import-rattail = rattail.commands.importing:ImportRattail