diff --git a/muk_utils/__manifest__.py b/muk_utils/__manifest__.py index 235041b..6702873 100644 --- a/muk_utils/__manifest__.py +++ b/muk_utils/__manifest__.py @@ -20,7 +20,7 @@ { "name": "MuK Utils", "summary": """Utility Features""", - "version": '12.0.1.0.14', + "version": '12.0.1.0.15', "category": 'Extra Tools', "license": "AGPL-3", "author": "MuK IT", diff --git a/muk_utils/tools/__init__.py b/muk_utils/tools/__init__.py index d4aaa2c..894817f 100644 --- a/muk_utils/tools/__init__.py +++ b/muk_utils/tools/__init__.py @@ -17,4 +17,5 @@ # ################################################################################### +from . import file from . import json \ No newline at end of file diff --git a/muk_utils/tools/file.py b/muk_utils/tools/file.py new file mode 100644 index 0000000..a7348e5 --- /dev/null +++ b/muk_utils/tools/file.py @@ -0,0 +1,61 @@ +################################################################################### +# +# Copyright (C) 2018 MuK IT GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +import os +import io +import base64 +import shutil +import urllib +import logging +import tempfile +import mimetypes + +from odoo.tools import config +from odoo.tools.mimetypes import guess_mimetype + +_logger = logging.getLogger(__name__) + +def unique_name(name, names, escape_suffix=False): + def compute_name(name, suffix, escape_suffix): + if escape_suffix: + name, extension = os.path.splitext(name) + return "%s(%s)%s" % (name, suffix, extension) + else: + return "%s(%s)" % (name, suffix) + if not name in names: + return name + else: + suffix = 1 + name = compute_name(name, suffix, escape_suffix) + while name in names: + suffix += 1 + name = compute_name(name, suffix, escape_suffix) + return name + +def guess_extension(binary, filename, mimetype): + extension = None + if not mimetype and not filename: + mimetype = guess_mimetype(binary, default=False) + if not mimetype and filename: + mimetype = mimetypes.guess_type(urllib.request.pathname2url(filename))[0] + if filename: + extension = os.path.splitext(filename)[1][1:].strip().lower() + if not extension and mimetype and mimetype != 'application/octet-stream': + extension = mimetypes.guess_extension(mimetype)[1:].strip().lower() + return extension \ No newline at end of file