[FIX]Fixed code for python related problems as par review.
bzr revid: kch@tinyerp.com-20110908102400-7udk4wzl0blt7jgg
This commit is contained in:
parent
7fdb13dfff
commit
783904920a
|
@ -1369,19 +1369,18 @@ class Import(View):
|
|||
return fields
|
||||
|
||||
@openerpweb.httprequest
|
||||
def detect_data(self, req, **params):
|
||||
import StringIO
|
||||
def detect_data(self, req, csvfile, csvsep, csvdel, csvcode, csvskip, **params):
|
||||
|
||||
_fields = {}
|
||||
_fields_invert = {}
|
||||
req_field = []
|
||||
error = None
|
||||
all_fields = []
|
||||
fields = dict(req.session.model(params.get('model')).fields_get(False, req.session.eval_context(req.context)))
|
||||
fields = req.session.model(params.get('model')).fields_get(False, req.session.eval_context(req.context))
|
||||
fields.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}})
|
||||
|
||||
for field in fields:
|
||||
value = fields[field]
|
||||
if (value.get('required',False) == True):
|
||||
if value.get('required'):
|
||||
req_field.append(field)
|
||||
|
||||
def model_populate(fields, prefix_node='', prefix=None, prefix_value='', level=2):
|
||||
|
@ -1402,7 +1401,7 @@ class Import(View):
|
|||
_fields[prefix_node+field] = st_name
|
||||
_fields_invert[st_name] = prefix_node+field
|
||||
|
||||
if fields[field].get('type','')=='one2many' and level>0:
|
||||
if fields[field].get('type')=='one2many' and level>0:
|
||||
fields2 = self.fields_get(req, fields[field]['relation'])
|
||||
model_populate(fields2, prefix_node+field+'/', None, st_name+'/', level-1)
|
||||
|
||||
|
@ -1412,36 +1411,35 @@ class Import(View):
|
|||
fields.update({'id':{'string':'ID'},'.id':{'string':'Database ID'}})
|
||||
model_populate(fields)
|
||||
all_fields = fields.keys()
|
||||
all_fields.sort()
|
||||
|
||||
try:
|
||||
data = csv.reader(params.get('csvfile'), quotechar=str(params.get('csvdel')), delimiter=str(params.get('csvsep')))
|
||||
data = csv.reader(csvfile, quotechar=str(csvdel), delimiter=str(csvsep))
|
||||
except:
|
||||
error={'message': 'error opening .CSV file. Input Error.'}
|
||||
return simplejson.dumps({'error':error})
|
||||
|
||||
records = []
|
||||
fields = []
|
||||
word=''
|
||||
limit = 4
|
||||
count = 0
|
||||
try:
|
||||
for i, row in enumerate(data):
|
||||
records.append(row)
|
||||
if i == limit:
|
||||
break
|
||||
header_fields = []
|
||||
word=''
|
||||
|
||||
for j, line in enumerate(records):
|
||||
if j == 1:
|
||||
break
|
||||
for word in line:
|
||||
word = str(word.decode(params.get('csvcode')))
|
||||
if word in _fields:
|
||||
fields.append((word, _fields[word]))
|
||||
elif word in _fields_invert.keys():
|
||||
fields.append((_fields_invert[word], word))
|
||||
else:
|
||||
count = count + 1
|
||||
fields.append((word, word))
|
||||
try:
|
||||
for rec in itertools.islice(data,0,4):
|
||||
records.append(rec)
|
||||
|
||||
headers = itertools.islice(records,1)
|
||||
line = headers.next()
|
||||
|
||||
for word in line:
|
||||
word = str(word.decode(csvcode))
|
||||
if word in _fields:
|
||||
header_fields.append((word, _fields[word]))
|
||||
elif word in _fields_invert.keys():
|
||||
header_fields.append((_fields_invert[word], word))
|
||||
else:
|
||||
count = count + 1
|
||||
header_fields.append((word, word))
|
||||
|
||||
if len(line) == count:
|
||||
error = {'message':"File has not any column header."}
|
||||
|
@ -1449,15 +1447,15 @@ class Import(View):
|
|||
error = {'message':('Error processing the first line of the file. Field "%s" is unknown') % (word,)}
|
||||
|
||||
if error:
|
||||
params.get('csvfile').seek(0)
|
||||
error=dict(error, preview=params.get('csvfile').read(200))
|
||||
csvfile.seek(0)
|
||||
error=dict(error, preview=csvfile.read(200))
|
||||
return simplejson.dumps({'error':error})
|
||||
|
||||
return simplejson.dumps({'records':records[1:],'header':fields,'all_fields':all_fields,'req_field':req_field})
|
||||
return simplejson.dumps({'records':records[1:],'header':header_fields,'all_fields':all_fields,'req_field':req_field})
|
||||
|
||||
@openerpweb.httprequest
|
||||
def import_data(self, req, **params):
|
||||
import StringIO
|
||||
def import_data(self, req, csvfile, csvsep, csvdel, csvcode, csvskip, **params):
|
||||
|
||||
_fields = {}
|
||||
_fields_invert = {}
|
||||
prefix_node=''
|
||||
|
@ -1466,24 +1464,22 @@ class Import(View):
|
|||
context = req.session.eval_context(req.context)
|
||||
modle_obj = req.session.model(params.get('model'))
|
||||
res = None
|
||||
content = params.get('csvfile').read()
|
||||
input=StringIO.StringIO(content)
|
||||
|
||||
limit = 0
|
||||
data = []
|
||||
|
||||
if not (params.get('csvdel') and len(params.get('csvdel')) == 1):
|
||||
if not (csvdel and len(csvdel) == 1):
|
||||
error={'message': "The CSV delimiter must be a single character"}
|
||||
return simplejson.dumps({'error':error})
|
||||
|
||||
try:
|
||||
for j, line in enumerate(csv.reader(input, quotechar=str(params.get('csvdel')), delimiter=str(params.get('csvsep')))):
|
||||
# If the line contains no data, we should skip it.
|
||||
if not line:
|
||||
continue
|
||||
if j == limit:
|
||||
fields = line
|
||||
else:
|
||||
data.append(line)
|
||||
data_record = csv.reader(csvfile, quotechar=str(csvdel), delimiter=str(csvsep))
|
||||
for rec in itertools.islice(data_record,0,None):
|
||||
data.append(rec)
|
||||
|
||||
headers = itertools.islice(data,1)
|
||||
fields = headers.next()
|
||||
|
||||
except csv.Error, e:
|
||||
error={'message': str(e),'title': 'File Format Error'}
|
||||
return simplejson.dumps({'error':error})
|
||||
|
@ -1494,7 +1490,7 @@ class Import(View):
|
|||
if not isinstance(fields, list):
|
||||
fields = [fields]
|
||||
|
||||
flds = dict(req.session.model(params.get('model')).fields_get(False, req.session.eval_context(req.context)))
|
||||
flds = modle_obj.fields_get(False, req.session.eval_context(req.context))
|
||||
flds.update({'id':{'string':'ID'},'.id':{'string':'Database ID'}})
|
||||
fields_order = flds.keys()
|
||||
for field in fields_order:
|
||||
|
@ -1504,16 +1500,16 @@ class Import(View):
|
|||
|
||||
unmatch_field = []
|
||||
for fld in fields:
|
||||
if ((fld not in _fields.keys()) and (fld not in _fields_invert.keys())):
|
||||
if ((fld not in _fields) and (fld not in _fields_invert)):
|
||||
unmatch_field.append(fld)
|
||||
|
||||
if unmatch_field:
|
||||
error = {'message':("You cannot import the fields '%s',because we cannot auto-detect it." % (unmatch_field))}
|
||||
return simplejson.dumps({'error':error})
|
||||
|
||||
for line in data:
|
||||
for line in data[1:]:
|
||||
try:
|
||||
datas.append(map(lambda x:x.decode(params.get('csvcode')).encode('utf-8'), line))
|
||||
datas.append(map(lambda x:x.decode(csvcode).encode('utf-8'), line))
|
||||
except:
|
||||
datas.append(map(lambda x:x.decode('latin').encode('utf-8'), line))
|
||||
|
||||
|
|
|
@ -733,7 +733,7 @@ openerp.web.View = openerp.web.Widget.extend({
|
|||
},
|
||||
on_sidebar_import: function() {
|
||||
var import_view = new openerp.web.DataImport(this, this.dataset);
|
||||
import_view.start(false);
|
||||
import_view.start();
|
||||
},
|
||||
on_sidebar_export: function() {
|
||||
var export_view = new openerp.web.DataExport(this, this.dataset);
|
||||
|
|
Loading…
Reference in New Issue