diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-06-27 17:24:24 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-06-27 17:24:24 +0200 |
| commit | cd21c016b0652f2fc36a33690f676ba6e2f113f1 (patch) | |
| tree | 102d74f5eba4e432e6eae5822a22f0b68f48587e /odoo | |
| parent | 52749f9a02b5e2b8db4c6a5f6b17a8846da73287 (diff) | |
| parent | 2f2bc67c06781d5072ed904c441b31d80675fe9c (diff) | |
[MERGE] forward port branch saas-11.3 up to 2f2bc67c067
Diffstat (limited to 'odoo')
| -rw-r--r-- | odoo/addons/base/models/ir_http.py | 9 | ||||
| -rw-r--r-- | odoo/modules/migration.py | 18 |
2 files changed, 22 insertions, 5 deletions
diff --git a/odoo/addons/base/models/ir_http.py b/odoo/addons/base/models/ir_http.py index 205be37929e..cbd6a0d90c3 100644 --- a/odoo/addons/base/models/ir_http.py +++ b/odoo/addons/base/models/ir_http.py @@ -347,9 +347,9 @@ class IrHttp(models.AbstractModel): if not filename: if filename_field in obj: filename = obj[filename_field] - elif module_resource_path: + if not filename and module_resource_path: filename = os.path.basename(module_resource_path) - else: + if not filename: filename = "%s-%s-%s" % (obj._name, obj.id, field) # mimetype @@ -364,6 +364,11 @@ class IrHttp(models.AbstractModel): if not mimetype: mimetype = guess_mimetype(base64.b64decode(content), default=default_mimetype) + # extension + extension = mimetypes.guess_extension(mimetype) + if extension and not filename.endswith(extension): + filename = "%s%s" % (filename, extension) + headers += [('Content-Type', mimetype), ('X-Content-Type-Options', 'nosniff')] # cache diff --git a/odoo/modules/migration.py b/odoo/modules/migration.py index 57d217e770d..f401760b88a 100644 --- a/odoo/modules/migration.py +++ b/odoo/modules/migration.py @@ -59,6 +59,8 @@ class MigrationManager(object): Python file names must start by `pre-` or `post-` and will be executed, respectively, before and after the module initialisation. `end-` scripts are run after all modules have been updated. + A special folder named `0.0.0` can contain scripts that will be run on any version change. + In `pre` stage, `0.0.0` scripts are run first, while in `post` and `end`, they are run last. Example: <moduledir> `-- migrations @@ -71,6 +73,8 @@ class MigrationManager(object): |-- 9.0.1.1 # processed only on a 9.0 server | |-- pre-delete_table_z.py | `-- post-clean-data.py + |-- 0.0.0 + | `-- end-invariants.py # processed on all version update `-- foo.py # not processed """ @@ -117,13 +121,20 @@ class MigrationManager(object): return version # the version number already containt the server version return "%s.%s" % (release.major_version, version) - def _get_migration_versions(pkg): + def _get_migration_versions(pkg, stage): versions = sorted({ ver for lv in self.migrations[pkg.name].values() for ver, lf in lv.items() if lf }, key=lambda k: parse_version(convert_version(k))) + if "0.0.0" in versions: + # reorder versions + versions.remove("0.0.0") + if stage == "pre": + versions.insert(0, "0.0.0") + else: + versions.append("0.0.0") return versions def _get_migration_files(pkg, version, stage): @@ -150,10 +161,11 @@ class MigrationManager(object): parsed_installed_version = parse_version(installed_version) current_version = parse_version(convert_version(pkg.data['version'])) - versions = _get_migration_versions(pkg) + versions = _get_migration_versions(pkg, stage) for version in versions: - if parsed_installed_version < parse_version(convert_version(version)) <= current_version: + if ((version == "0.0.0" and parsed_installed_version < current_version) + or parsed_installed_version < parse_version(convert_version(version)) <= current_version): strfmt = {'addon': pkg.name, 'stage': stage, |
