Add export-rattail command, plus ProductImage support for Rattail->Rattail
				
					
				
			This commit is contained in:
		
							parent
							
								
									6c697c1bd1
								
							
						
					
					
						commit
						7c481d3481
					
				
					 3 changed files with 77 additions and 13 deletions
				
			
		|  | @ -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) | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										1
									
								
								setup.py
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								setup.py
									
										
									
									
									
								
							|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar