Add better support for "make import batch from file" pattern
This commit is contained in:
parent
0375d66b91
commit
4fa9ab3c6e
6 changed files with 80 additions and 6 deletions
|
@ -89,6 +89,7 @@ class MasterView(View):
|
|||
execute_progress_template = None
|
||||
execute_progress_initial_msg = None
|
||||
supports_prev_next = False
|
||||
supports_import_batch_from_file = False
|
||||
|
||||
supports_mobile = False
|
||||
mobile_creatable = False
|
||||
|
@ -705,7 +706,11 @@ class MasterView(View):
|
|||
if isinstance(node.typ, deform.FileData):
|
||||
if skip and node.name in skip:
|
||||
continue
|
||||
filedict = self.form_deserialized.get(node.name)
|
||||
# TODO: does form ever *not* have 'validated' attr here?
|
||||
if hasattr(form, 'validated'):
|
||||
filedict = form.validated.get(node.name)
|
||||
else:
|
||||
filedict = self.form_deserialized.get(node.name)
|
||||
if filedict:
|
||||
tempdir = tempfile.mkdtemp()
|
||||
filepath = os.path.join(tempdir, filedict['filename'])
|
||||
|
@ -722,6 +727,38 @@ class MasterView(View):
|
|||
def process_uploads(self, obj, form, uploads):
|
||||
pass
|
||||
|
||||
def import_batch_from_file(self, handler_factory, model_name,
|
||||
delete=False, schema=None, importer_host_title=None):
|
||||
|
||||
handler = handler_factory(self.rattail_config)
|
||||
|
||||
if not schema:
|
||||
schema = forms.SimpleFileImport().bind(request=self.request)
|
||||
form = forms.Form(schema=schema, request=self.request)
|
||||
form.save_label = "Upload"
|
||||
form.cancel_url = self.get_index_url()
|
||||
if form.validate(newstyle=True):
|
||||
|
||||
uploads = self.normalize_uploads(form)
|
||||
filepath = uploads['filename']['temp_path']
|
||||
batches = handler.make_batches(model_name,
|
||||
delete=delete,
|
||||
# tdc_input_path=filepath,
|
||||
# source_csv_path=filepath,
|
||||
source_data_path=filepath,
|
||||
runas_user=self.request.user)
|
||||
batch = batches[0]
|
||||
return self.redirect(self.request.route_url('batch.importer.view', uuid=batch.uuid))
|
||||
|
||||
if not importer_host_title:
|
||||
importer_host_title = handler.host_title
|
||||
|
||||
return self.render_to_response('import_file', {
|
||||
'form': form,
|
||||
'dform': form.make_deform_form(),
|
||||
'importer_host_title': importer_host_title,
|
||||
})
|
||||
|
||||
def render_product_key_value(self, obj):
|
||||
"""
|
||||
Render the "canonical" product key value for the given object.
|
||||
|
@ -3087,6 +3124,11 @@ class MasterView(View):
|
|||
config.add_tailbone_permission(permission_prefix, '{0}.delete'.format(permission_prefix),
|
||||
"Delete {0}".format(model_title))
|
||||
|
||||
# import batch from file
|
||||
if cls.supports_import_batch_from_file:
|
||||
config.add_tailbone_permission(permission_prefix, '{}.import_file'.format(permission_prefix),
|
||||
"Create a new import batch from data file")
|
||||
|
||||
### sub-rows stuff follows
|
||||
|
||||
# download row results as CSV
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue