muk-it / muk_dms

MuK Document Management System
GNU Lesser General Public License v3.0
91 stars 143 forks source link

special characters in files or folders #4

Closed mcjulian1107 closed 6 years ago

mcjulian1107 commented 7 years ago

In the version for odoo 9, you can not create files or folders with special characters, such as ñ, á, é, í, ó, ú. Which are widely used in the Spanish language

Attempting to create a file or folder shows the following error

`Odoo Server Error

Traceback (most recent call last): File "D:\Odoo\odoo\odoo9\openerp\http.py", line 648, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "D:\Odoo\odoo\odoo9\openerp\http.py", line 685, in dispatch result = self._call_function(self.params) File "D:\Odoo\odoo\odoo9\openerp\http.py", line 321, in _call_function return checked_call(self.db, *args, *kwargs) File "D:\Odoo\odoo\odoo9\openerp\service\model.py", line 118, in wrapper return f(dbname, args, kwargs) File "D:\Odoo\odoo\odoo9\openerp\http.py", line 314, in checked_call result = self.endpoint(*a, kw) File "D:\Odoo\odoo\odoo9\openerp\http.py", line 964, in call return self.method(*args, *kw) File "D:\Odoo\odoo\odoo9\openerp\http.py", line 514, in response_wrap response = f(args, kw) File "D:\Odoo\odoo\odoo9\addons\web\controllers\main.py", line 888, in call_kw return self._call_kw(model, method, args, kwargs) File "D:\Odoo\odoo\odoo9\addons\web\controllers\main.py", line 880, in _call_kw return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, kwargs) File "D:\Odoo\odoo\odoo9\openerp\api.py", line 250, in wrapper return old_api(self, *args, *kwargs) File "D:\Odoo\odoo\odoo9\openerp\api.py", line 381, in old_api result = method(recs, args, kwargs) File "D:\Odoo\odoo\odoo9\openerp\models.py", line 6053, in onchange record.mapped(field_seq) File "D:\Odoo\odoo\odoo9\openerp\models.py", line 5551, in mapped recs = recs._mapped_func(operator.itemgetter(name)) File "D:\Odoo\odoo\odoo9\openerp\models.py", line 5531, in _mapped_func vals = [func(rec) for rec in self] File "D:\Odoo\odoo\odoo9\openerp\models.py", line 5769, in getitem return self._fields[key].get(self, type(self)) File "D:\Odoo\odoo\odoo9\openerp\fields.py", line 833, in get self.determine_draft_value(record) File "D:\Odoo\odoo\odoo9\openerp\fields.py", line 948, in determine_draft_value self._compute_value(record) File "D:\Odoo\odoo\odoo9\openerp\fields.py", line 884, in _compute_value getattr(records, self.compute)() File "D:\Odoo\odoo\odoo9\openerp\api.py", line 248, in wrapper return new_api(self, *args, *kwargs) File "D:\Odoo\odoo\odoo9\openerp\api.py", line 425, in new_api result = [method(rec, args, **kwargs) for rec in self] File "D:\Odoo\ceiinc\addons\addons-sgi\muk_dms\models\muk_dms_directory.py", line 167, in _compute_path_text self.path_text = self.get_path() File "D:\Odoo\ceiinc\addons\addons-sgi\muk_dms\models\muk_dms_directory.py", line 85, in get_path path = str(self.name) + "/" UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 0: ordinal not in range(128)`

keshrath commented 7 years ago

Hi, unfortunately as right now the module only supports the basic ascii symbols. Hopefully I will be able to fix this soon :)

VALID_NAMECHARS = "-.() %s%s" % (string.letters, string.digits)

RomanRcT commented 7 years ago

Hello, I found this solution. Maybe this will helpfull.

` def s3_filename(filename):

#Convert a string into a valid filename on all OS 
#http://stackoverflow.com/questions/295135/turn-a-string-into-a-valid-filename-in-python/698714#698714

import string
import unicodedata

validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)

filename = unicode(filename)
cleanedFilename = unicodedata.normalize("NFKD",
                                        filename).encode("ASCII", "ignore")

return "".join(c for c in cleanedFilename if c in validFilenameChars)

`

keshrath commented 6 years ago

Hi, try the version 1.0.2! :)