summaryrefslogtreecommitdiff
path: root/odoo
diff options
context:
space:
mode:
authorxmo-odoo <xmo@odoo.com>2017-04-28 09:06:53 +0200
committerGitHub <noreply@github.com>2017-04-28 09:06:53 +0200
commitb4429c2a91889bf60b56e0c7909c844d357363f7 (patch)
tree1ae879a60a34454b4a93425f0ebe7d5ccd029c03 /odoo
parentc5579ef89e2a595893d0959bef6fddfdbfb6d697 (diff)
[FIX] Various P3-related import changes
* LDAP import: python-ldap is not python3-compatible, pyldap is Warning: only supported from debian Stretch (current testing)? https://packages.debian.org/search?searchon=names&keywords=pyldap * implicitly relative imports * imports of moved or removed stdlib modules issue #8530
Diffstat (limited to 'odoo')
-rw-r--r--odoo/__init__.py26
-rw-r--r--odoo/addons/base/__init__.py9
-rw-r--r--odoo/addons/base/ir/__init__.py38
-rw-r--r--odoo/addons/base/ir/ir_http.py1
-rw-r--r--odoo/addons/base/ir/ir_qweb/fields.py4
-rw-r--r--odoo/addons/base/ir/ir_qweb/ir_qweb.py22
-rw-r--r--odoo/addons/base/ir/ir_qweb/qweb.py23
-rw-r--r--odoo/addons/base/module/__init__.py6
-rw-r--r--odoo/addons/base/module/module.py20
-rw-r--r--odoo/addons/base/module/report/__init__.py2
-rw-r--r--odoo/addons/base/module/wizard/__init__.py14
-rw-r--r--odoo/addons/base/module/wizard/base_export_language.py4
-rw-r--r--odoo/addons/base/module/wizard/base_update_translations.py4
-rw-r--r--odoo/addons/base/report/__init__.py2
-rw-r--r--odoo/addons/base/res/__init__.py22
-rw-r--r--odoo/addons/base/res/res_partner.py13
-rw-r--r--odoo/addons/base/tests/__init__.py66
-rw-r--r--odoo/addons/base/tests/test_view_validation.py14
-rw-r--r--odoo/addons/test_access_rights/__init__.py2
-rw-r--r--odoo/addons/test_access_rights/tests/__init__.py2
-rw-r--r--odoo/addons/test_assetsbundle/__init__.py2
-rw-r--r--odoo/addons/test_impex/__init__.py2
-rw-r--r--odoo/addons/test_inherit/__init__.py2
-rw-r--r--odoo/addons/test_new_api/__init__.py3
-rw-r--r--odoo/addons/test_pylint/tests/__init__.py2
-rw-r--r--odoo/addons/test_pylint/tests/test_pylint.py8
-rw-r--r--odoo/cli/__init__.py12
-rw-r--r--odoo/conf/__init__.py2
-rw-r--r--odoo/exceptions.py2
-rw-r--r--odoo/fields.py8
-rw-r--r--odoo/http.py14
-rw-r--r--odoo/modules/graph.py17
-rw-r--r--odoo/netsvc.py8
-rw-r--r--odoo/osv/__init__.py2
-rw-r--r--odoo/service/__init__.py12
-rw-r--r--odoo/service/common.py2
-rw-r--r--odoo/service/model.py2
-rw-r--r--odoo/service/report.py2
-rw-r--r--odoo/service/wsgi_server.py14
-rw-r--r--odoo/sql_db.py10
-rw-r--r--odoo/tests/__init__.py4
-rw-r--r--odoo/tests/addons/test_translation_import/__init__.py2
-rw-r--r--odoo/tests/common.py9
-rw-r--r--odoo/tools/__init__.py36
-rw-r--r--odoo/tools/amount_to_text_en.py2
-rw-r--r--odoo/tools/appdirs.py6
-rw-r--r--odoo/tools/config.py7
-rw-r--r--odoo/tools/convert.py4
-rw-r--r--odoo/tools/import_email.py148
-rw-r--r--odoo/tools/lru.py2
-rw-r--r--odoo/tools/misc.py34
-rw-r--r--odoo/tools/test_config.py2
-rw-r--r--odoo/tools/translate.py17
53 files changed, 290 insertions, 403 deletions
diff --git a/odoo/__init__.py b/odoo/__init__.py
index dbf17c02200..4c074c9beb3 100644
--- a/odoo/__init__.py
+++ b/odoo/__init__.py
@@ -54,17 +54,17 @@ def registry(database_name=None):
#----------------------------------------------------------
# Imports
#----------------------------------------------------------
-import addons
-import conf
-import loglevels
-import modules
-import netsvc
-import osv
-import release
-import report
-import service
-import sql_db
-import tools
+from . import addons
+from . import conf
+from . import loglevels
+from . import modules
+from . import netsvc
+from . import osv
+from . import release
+from . import report
+from . import service
+from . import sql_db
+from . import tools
#----------------------------------------------------------
# Model classes, fields, api decorators, and translations
@@ -77,5 +77,5 @@ from odoo.tools.translate import _
#----------------------------------------------------------
# Other imports, which may require stuff from above
#----------------------------------------------------------
-import cli
-import http
+from . import cli
+from . import http
diff --git a/odoo/addons/base/__init__.py b/odoo/addons/base/__init__.py
index 2defb05a2a7..12f085fadc9 100644
--- a/odoo/addons/base/__init__.py
+++ b/odoo/addons/base/__init__.py
@@ -1,11 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import ir
-import module
-import res
-import report
-import tests
+from . import ir
+from . import module
+from . import res
+from . import report
def post_init(cr, registry):
"""Rewrite ICP's to force groups"""
diff --git a/odoo/addons/base/ir/__init__.py b/odoo/addons/base/ir/__init__.py
index 9de55cfaff7..0b99d65f2bf 100644
--- a/odoo/addons/base/ir/__init__.py
+++ b/odoo/addons/base/ir/__init__.py
@@ -1,22 +1,22 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import ir_model
-import ir_sequence
-import ir_ui_menu
-import ir_ui_view
-import ir_actions
-import ir_attachment
-import ir_cron
-import ir_filters
-import ir_values
-import ir_translation
-import ir_exports
-import ir_rule
-import ir_config_parameter
-import ir_autovacuum
-import ir_mail_server
-import ir_fields
-import ir_qweb
-import ir_http
-import ir_logging
+from . import ir_model
+from . import ir_sequence
+from . import ir_ui_menu
+from . import ir_ui_view
+from . import ir_actions
+from . import ir_attachment
+from . import ir_cron
+from . import ir_filters
+from . import ir_values
+from . import ir_translation
+from . import ir_exports
+from . import ir_rule
+from . import ir_config_parameter
+from . import ir_autovacuum
+from . import ir_mail_server
+from . import ir_fields
+from . import ir_qweb
+from . import ir_http
+from . import ir_logging
diff --git a/odoo/addons/base/ir/ir_http.py b/odoo/addons/base/ir/ir_http.py
index 75676910461..3d9c72aec60 100644
--- a/odoo/addons/base/ir/ir_http.py
+++ b/odoo/addons/base/ir/ir_http.py
@@ -10,7 +10,6 @@ import mimetypes
import os
import re
import sys
-import urllib2
import werkzeug
import werkzeug.exceptions
diff --git a/odoo/addons/base/ir/ir_qweb/fields.py b/odoo/addons/base/ir/ir_qweb/fields.py
index e40f64c3937..a1f9014b6d8 100644
--- a/odoo/addons/base/ir/ir_qweb/fields.py
+++ b/odoo/addons/base/ir/ir_qweb/fields.py
@@ -1,9 +1,9 @@
# -*- coding: utf-8 -*-
import re
from collections import OrderedDict
+from io import BytesIO
from odoo import api, fields, models, _
from PIL import Image
-from cStringIO import StringIO
import babel
from odoo.tools import html_escape as escape, posix_to_ldml, safe_eval, float_utils, format_date
from .qweb import unicodifier
@@ -269,7 +269,7 @@ class ImageConverter(models.AbstractModel):
@api.model
def value_to_html(self, value, options):
try:
- image = Image.open(StringIO(value.decode('base64')))
+ image = Image.open(BytesIO(value.decode('base64')))
image.verify()
except IOError:
raise ValueError("Non-image binary fields can not be converted to HTML")
diff --git a/odoo/addons/base/ir/ir_qweb/ir_qweb.py b/odoo/addons/base/ir/ir_qweb/ir_qweb.py
index 20a640be8d4..68c4bf048d7 100644
--- a/odoo/addons/base/ir/ir_qweb/ir_qweb.py
+++ b/odoo/addons/base/ir/ir_qweb/ir_qweb.py
@@ -1,23 +1,29 @@
# -*- coding: utf-8 -*-
from __future__ import print_function
import ast
-from urlparse import urlparse
+import json
+import logging
+from collections import OrderedDict
+from time import time
+try:
+ from urllib.parse import urlparse
+except ImportError:
+ # pylint: disable=bad-python3-import
+ from urlparse import urlparse
+
from lxml import html
+from lxml import etree
from odoo.tools import pycompat
-from .qweb import QWeb, Contextifier
-from .assetsbundle import AssetsBundle
-from lxml import etree
-from collections import OrderedDict
from odoo import api, models, tools
from odoo.tools.safe_eval import assert_valid_codeobj, _BUILTINS, _SAFE_OPCODES
from odoo.http import request
from odoo.modules.module import get_resource_path
-import json
-from time import time
-import logging
+from .qweb import QWeb, Contextifier
+from .assetsbundle import AssetsBundle
+
_logger = logging.getLogger(__name__)
diff --git a/odoo/addons/base/ir/ir_qweb/qweb.py b/odoo/addons/base/ir/ir_qweb/qweb.py
index a4204326344..b395dfb7698 100644
--- a/odoo/addons/base/ir/ir_qweb/qweb.py
+++ b/odoo/addons/base/ir/ir_qweb/qweb.py
@@ -1,28 +1,33 @@
# -*- coding: utf-8 -*-
import ast
-from collections import OrderedDict, Sized, Mapping, defaultdict
-from lxml import etree, html
+import logging
import re
import traceback
-from itertools import count
+
+from collections import OrderedDict, Sized, Mapping, defaultdict
+from functools import reduce
+from itertools import chain, izip, tee, count
from textwrap import dedent
+
+from lxml import etree, html
import werkzeug
from werkzeug.utils import escape as _escape
-from itertools import chain, izip, tee
-import __builtin__
-from functools import reduce
from odoo.tools import pycompat
-builtin_defaults = {name: getattr(__builtin__, name) for name in dir(__builtin__)}
+try:
+ import builtins
+ builtin_defaults = {name: getattr(builtins, name) for name in dir(builtins)}
+except ImportError:
+ # pylint: disable=bad-python3-import
+ import __builtin__
+ builtin_defaults = {name: getattr(__builtin__, name) for name in dir(__builtin__)}
try:
import astor
except ImportError:
astor = None
-import logging
-
unsafe_eval = eval
_logger = logging.getLogger(__name__)
diff --git a/odoo/addons/base/module/__init__.py b/odoo/addons/base/module/__init__.py
index 8d1010ae88a..e455df15182 100644
--- a/odoo/addons/base/module/__init__.py
+++ b/odoo/addons/base/module/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import module
-import wizard
-import report
+from . import module
+from . import wizard
+from . import report
diff --git a/odoo/addons/base/module/module.py b/odoo/addons/base/module/module.py
index 1178fcca49f..f95c2b07dc1 100644
--- a/odoo/addons/base/module/module.py
+++ b/odoo/addons/base/module/module.py
@@ -3,25 +3,27 @@
from collections import defaultdict
from operator import attrgetter
import importlib
+import io
import logging
import os
import shutil
import tempfile
-import urllib2
-import urlparse
import zipfile
+try:
+ from urllib import parse as urlparse
+ from urllib.request import urlopen
+except ImportError:
+ # pylint: disable=bad-python3-import
+ import urlparse
+ from urllib2 import urlopen
+
from docutils import nodes
from docutils.core import publish_string
from docutils.transforms import Transform, writer_aux
from docutils.writers.html4css1 import Writer
import lxml.html
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO # NOQA
-
import odoo
from odoo import api, fields, models, modules, tools, _
from odoo.exceptions import AccessDenied, UserError
@@ -676,12 +678,12 @@ class Module(models.Model):
try:
_logger.info('Downloading module `%s` from OpenERP Apps', module_name)
- content = urllib2.urlopen(url).read()
+ content = urlopen(url).read()
except Exception:
_logger.exception('Failed to fetch module %s', module_name)
raise UserError(_('The `%s` module appears to be unavailable at the moment, please try again later.') % module_name)
else:
- zipfile.ZipFile(StringIO(content)).extractall(tmp)
+ zipfile.ZipFile(io.BytesIO(content)).extractall(tmp)
assert os.path.isdir(os.path.join(tmp, module_name))
# 2a. Copy/Replace module source in addons path
diff --git a/odoo/addons/base/module/report/__init__.py b/odoo/addons/base/module/report/__init__.py
index 3354d265c76..1d8f3aef4da 100644
--- a/odoo/addons/base/module/report/__init__.py
+++ b/odoo/addons/base/module/report/__init__.py
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import ir_module_reference_print
+from . import ir_module_reference_print
diff --git a/odoo/addons/base/module/wizard/__init__.py b/odoo/addons/base/module/wizard/__init__.py
index 35d85e5e002..a0d693f948d 100644
--- a/odoo/addons/base/module/wizard/__init__.py
+++ b/odoo/addons/base/module/wizard/__init__.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import base_module_update
-import base_language_install
-import base_import_language
-import base_module_upgrade
-import base_module_configuration
-import base_export_language
-import base_update_translations
+from . import base_module_update
+from . import base_language_install
+from . import base_import_language
+from . import base_module_upgrade
+from . import base_module_configuration
+from . import base_export_language
+from . import base_update_translations
diff --git a/odoo/addons/base/module/wizard/base_export_language.py b/odoo/addons/base/module/wizard/base_export_language.py
index cd19222af14..50c57bb870e 100644
--- a/odoo/addons/base/module/wizard/base_export_language.py
+++ b/odoo/addons/base/module/wizard/base_export_language.py
@@ -3,7 +3,7 @@
import base64
import contextlib
-import cStringIO
+import io
from odoo import api, fields, models, tools, _
@@ -34,7 +34,7 @@ class BaseLanguageExport(models.TransientModel):
lang = this.lang if this.lang != NEW_LANG_KEY else False
mods = sorted(this.mapped('modules.name')) or ['all']
- with contextlib.closing(cStringIO.StringIO()) as buf:
+ with contextlib.closing(io.BytesIO()) as buf:
tools.trans_export(lang, mods, buf, this.format, self._cr)
out = base64.encodestring(buf.getvalue())
diff --git a/odoo/addons/base/module/wizard/base_update_translations.py b/odoo/addons/base/module/wizard/base_update_translations.py
index c5057a01fff..8f487dbbafe 100644
--- a/odoo/addons/base/module/wizard/base_update_translations.py
+++ b/odoo/addons/base/module/wizard/base_update_translations.py
@@ -2,7 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import contextlib
-import cStringIO
+import io
from odoo import api, fields, models, tools, _
from odoo.exceptions import UserError
@@ -37,7 +37,7 @@ class BaseUpdateTranslations(models.TransientModel):
def act_update(self):
this = self[0]
lang_name = self._get_lang_name(this.lang)
- with contextlib.closing(cStringIO.StringIO()) as buf:
+ with contextlib.closing(io.BytesIO()) as buf:
tools.trans_export(this.lang, ['all'], buf, 'csv', self._cr)
tools.trans_load_data(self._cr, buf, 'csv', this.lang, lang_name=lang_name)
return {'type': 'ir.actions.act_window_close'}
diff --git a/odoo/addons/base/report/__init__.py b/odoo/addons/base/report/__init__.py
index 254008f0185..6ce403b6633 100644
--- a/odoo/addons/base/report/__init__.py
+++ b/odoo/addons/base/report/__init__.py
@@ -1 +1 @@
-import preview_report
+from . import preview_report
diff --git a/odoo/addons/base/res/__init__.py b/odoo/addons/base/res/__init__.py
index a43bcf80462..ee904734c09 100644
--- a/odoo/addons/base/res/__init__.py
+++ b/odoo/addons/base/res/__init__.py
@@ -1,14 +1,14 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import res_country
-import res_lang
-import res_partner
-import res_bank
-import res_config
-import res_currency
-import res_font
-import res_company
-import res_users
-import res_request
-import ir_property
+from . import res_country
+from . import res_lang
+from . import res_partner
+from . import res_bank
+from . import res_config
+from . import res_currency
+from . import res_font
+from . import res_company
+from . import res_users
+from . import res_request
+from . import ir_property
diff --git a/odoo/addons/base/res/res_partner.py b/odoo/addons/base/res/res_partner.py
index 42edc43b2b7..fe758d36de1 100644
--- a/odoo/addons/base/res/res_partner.py
+++ b/odoo/addons/base/res/res_partner.py
@@ -6,8 +6,14 @@ import datetime
import hashlib
import pytz
import threading
-import urllib2
-import urlparse
+
+try:
+ from urllib import parse as urlparse
+ from urllib.request import urlopen
+except ImportError:
+ # pylint: disable=bad-python3-import
+ import urlparse
+ from urllib2 import urlopen
from email.utils import formataddr
from lxml import etree
@@ -16,7 +22,6 @@ from odoo import api, fields, models, tools, SUPERUSER_ID, _
from odoo.modules import get_module_resource
from odoo.osv.expression import get_unaccent_wrapper
from odoo.exceptions import UserError, ValidationError
-from odoo.osv.orm import browse_record
# Global variables used for the warning fields declared on the res.partner
# in the following modules : sale, purchase, account, stock
@@ -702,7 +707,7 @@ class Partner(models.Model):
email_hash = hashlib.md5(email.lower()).hexdigest()
url = "https://www.gravatar.com/avatar/" + email_hash
try:
- image_content = urllib2.urlopen(url + "?d=404&s=128", timeout=5).read()
+ image_content = urlopen(url + "?d=404&s=128", timeout=5).read()
gravatar_image = base64.b64encode(image_content)
except Exception:
pass
diff --git a/odoo/addons/base/tests/__init__.py b/odoo/addons/base/tests/__init__.py
index a59e87094f7..6ae162486d6 100644
--- a/odoo/addons/base/tests/__init__.py
+++ b/odoo/addons/base/tests/__init__.py
@@ -1,34 +1,34 @@
-import test_acl
-import test_api
-import test_base
-import test_basecase
-import test_db_cursor
-import test_expression
-import test_float
-import test_func
-import test_ir_actions
-import test_ir_attachment
-import test_ir_http
-import test_ir_filters
-import test_ir_sequence
-import test_ir_sequence_date_range
-import test_ir_values
-import test_mail
-import test_menu
-import test_mimetypes
-import test_misc
-import test_orm
-import test_ormcache
-import test_osv
-import test_phase
-import test_qweb
-import test_res_config
-import test_res_lang
-import test_search
-import test_translate
+from . import test_acl
+from . import test_api
+from . import test_base
+from . import test_basecase
+from . import test_db_cursor
+from . import test_expression
+from . import test_float
+from . import test_func
+from . import test_ir_actions
+from . import test_ir_attachment
+from . import test_ir_http
+from . import test_ir_filters
+from . import test_ir_sequence
+from . import test_ir_sequence_date_range
+from . import test_ir_values
+from . import test_mail
+from . import test_menu
+from . import test_mimetypes
+from . import test_misc
+from . import test_orm
+from . import test_ormcache
+from . import test_osv
+from . import test_phase
+from . import test_qweb
+from . import test_res_config
+from . import test_res_lang
+from . import test_search
+from . import test_translate
#import test_uninstall # loop
-import test_user_has_group
-import test_view_validation
-import test_views
-import test_xmlrpc
-import test_res_partner_bank
+from . import test_user_has_group
+from . import test_view_validation
+from . import test_views
+from . import test_xmlrpc
+from . import test_res_partner_bank
diff --git a/odoo/addons/base/tests/test_view_validation.py b/odoo/addons/base/tests/test_view_validation.py
index 963f737ae4d..a408b993605 100644
--- a/odoo/addons/base/tests/test_view_validation.py
+++ b/odoo/addons/base/tests/test_view_validation.py
@@ -2,7 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from lxml import etree
-from StringIO import StringIO
+import io
import unittest
from odoo.tools.view_validation import (
@@ -11,7 +11,7 @@ from odoo.tools.view_validation import (
valid_field_in_graph, valid_field_in_tree,
)
-invalid_form = etree.parse(StringIO('''\
+invalid_form = etree.parse(io.BytesIO('''\
<form>
<label></label>
<group>
@@ -34,7 +34,7 @@ invalid_form = etree.parse(StringIO('''\
</form>
''')).getroot()
-valid_form = etree.parse(StringIO('''\
+valid_form = etree.parse(io.BytesIO('''\
<form string="">
<field name=""></field>
<field name=""></field>
@@ -54,7 +54,7 @@ valid_form = etree.parse(StringIO('''\
</form>
''')).getroot()
-invalid_graph = etree.parse(StringIO('''\
+invalid_graph = etree.parse(io.BytesIO('''\
<graph>
<label/>
<group>
@@ -66,14 +66,14 @@ invalid_graph = etree.parse(StringIO('''\
</graph>
''')).getroot()
-valid_graph = etree.parse(StringIO('''\
+valid_graph = etree.parse(io.BytesIO('''\
<graph string="">
<field name=""></field>
<field name=""></field>
</graph>
''')).getroot()
-invalid_tree = etree.parse(StringIO('''\
+invalid_tree = etree.parse(io.BytesIO('''\
<tree>
<group>
<div>
@@ -84,7 +84,7 @@ invalid_tree = etree.parse(StringIO('''\
</tree>
''')).getroot()
-valid_tree = etree.parse(StringIO('''\
+valid_tree = etree.parse(io.BytesIO('''\
<tree string="">
<field name=""></field>
<field name=""></field>
diff --git a/odoo/addons/test_access_rights/__init__.py b/odoo/addons/test_access_rights/__init__.py
index 89d26e2f597..a0fdc10fe11 100644
--- a/odoo/addons/test_access_rights/__init__.py
+++ b/odoo/addons/test_access_rights/__init__.py
@@ -1,2 +1,2 @@
# -*- coding: utf-8 -*-
-import models
+from . import models
diff --git a/odoo/addons/test_access_rights/tests/__init__.py b/odoo/addons/test_access_rights/tests/__init__.py
index 6e1c696fc37..1ba8765ddc0 100644
--- a/odoo/addons/test_access_rights/tests/__init__.py
+++ b/odoo/addons/test_access_rights/tests/__init__.py
@@ -1 +1 @@
-import test_ir_rules
+from . import test_ir_rules
diff --git a/odoo/addons/test_assetsbundle/__init__.py b/odoo/addons/test_assetsbundle/__init__.py
index ee5959455ad..e046e49fbe2 100644
--- a/odoo/addons/test_assetsbundle/__init__.py
+++ b/odoo/addons/test_assetsbundle/__init__.py
@@ -1 +1 @@
-import controllers
+from . import controllers
diff --git a/odoo/addons/test_impex/__init__.py b/odoo/addons/test_impex/__init__.py
index bff786c0885..0650744f6bc 100644
--- a/odoo/addons/test_impex/__init__.py
+++ b/odoo/addons/test_impex/__init__.py
@@ -1 +1 @@
-import models
+from . import models
diff --git a/odoo/addons/test_inherit/__init__.py b/odoo/addons/test_inherit/__init__.py
index 89d26e2f597..a0fdc10fe11 100644
--- a/odoo/addons/test_inherit/__init__.py
+++ b/odoo/addons/test_inherit/__init__.py
@@ -1,2 +1,2 @@
# -*- coding: utf-8 -*-
-import models
+from . import models
diff --git a/odoo/addons/test_new_api/__init__.py b/odoo/addons/test_new_api/__init__.py
index 361c3498d66..a0fdc10fe11 100644
--- a/odoo/addons/test_new_api/__init__.py
+++ b/odoo/addons/test_new_api/__init__.py
@@ -1,3 +1,2 @@
# -*- coding: utf-8 -*-
-import models
-import tests
+from . import models
diff --git a/odoo/addons/test_pylint/tests/__init__.py b/odoo/addons/test_pylint/tests/__init__.py
index c102da5600e..66bc70c522e 100644
--- a/odoo/addons/test_pylint/tests/__init__.py
+++ b/odoo/addons/test_pylint/tests/__init__.py
@@ -1 +1 @@
-import test_pylint
+from . import test_pylint
diff --git a/odoo/addons/test_pylint/tests/test_pylint.py b/odoo/addons/test_pylint/tests/test_pylint.py
index 02c1a14a261..1ae544e56a6 100644
--- a/odoo/addons/test_pylint/tests/test_pylint.py
+++ b/odoo/addons/test_pylint/tests/test_pylint.py
@@ -26,6 +26,12 @@ class TestPyLint(TransactionCase):
'W0123', # eval used
'W0101', # unreachable code
+ 'misplaced-future',
+ 'relative-import',
+ 'deprecated-module',
+ 'import-star-module-level',
+ # 'bad-python3-import', # TODO: more stuff used in report
+
'long-suffix',
'apply-builtin',
'cmp-builtin',
@@ -73,4 +79,4 @@ class TestPyLint(TransactionCase):
else:
out = process.communicate()[0]
if process.returncode:
- self.fail(msg="\n" + out)
+ self.fail("\n" + out)
diff --git a/odoo/cli/__init__.py b/odoo/cli/__init__.py
index 1fd63804785..4b860fe68d6 100644
--- a/odoo/cli/__init__.py
+++ b/odoo/cli/__init__.py
@@ -4,10 +4,10 @@ import os
import odoo
-from command import Command, main
+from .command import Command, main
-import deploy
-import scaffold
-import server
-import shell
-import start
+from . import deploy
+from . import scaffold
+from . import server
+from . import shell
+from . import start
diff --git a/odoo/conf/__init__.py b/odoo/conf/__init__.py
index a189f085405..b9722b9fff6 100644
--- a/odoo/conf/__init__.py
+++ b/odoo/conf/__init__.py
@@ -15,7 +15,7 @@ must be used.
"""
-import deprecation
+from . import deprecation
# Paths to search for OpenERP addons.
addons_paths = []
diff --git a/odoo/exceptions.py b/odoo/exceptions.py
index d83e350c624..1facc6207cb 100644
--- a/odoo/exceptions.py
+++ b/odoo/exceptions.py
@@ -12,7 +12,7 @@ If you consider introducing new exceptions, check out the test_exceptions addon.
import logging
from inspect import currentframe
-from tools.func import frame_codeinfo
+from .tools.func import frame_codeinfo
_logger = logging.getLogger(__name__)
diff --git a/odoo/fields.py b/odoo/fields.py
index d713167a101..9a440651268 100644
--- a/odoo/fields.py
+++ b/odoo/fields.py
@@ -10,7 +10,11 @@ from operator import attrgetter
from types import NoneType
import logging
import pytz
-import xmlrpclib
+try:
+ from xmlrpc.client import MAXINT
+except ImportError:
+ #pylint: disable=bad-python3-import
+ from xmlrpclib import MAXINT
import psycopg2
@@ -1168,7 +1172,7 @@ class Integer(Field):
def convert_to_read(self, value, record, use_name_get=True):
# Integer values greater than 2^31-1 are not supported in pure XMLRPC,
# so we have to pass them as floats :-(
- if value and value > xmlrpclib.MAXINT:
+ if value and value > MAXINT:
return float(value)
return value
diff --git a/odoo/http.py b/odoo/http.py
index 9eb9e75e101..210361fce1b 100644
--- a/odoo/http.py
+++ b/odoo/http.py
@@ -20,8 +20,12 @@ import sys
import threading
import time
import traceback
-import urllib2
-import urlparse
+try:
+ from urllib.parse import parse_qs, urlparse, quote
+except ImportError:
+ # pylint: disable=bad-python3-import
+ from urllib2 import quote
+ from urlparse import parse_qs, urlparse
import warnings
from os.path import join as opj
from zlib import adler32
@@ -344,7 +348,7 @@ class WebRequest(object):
debug = self.httprequest.environ.get('HTTP_X_DEBUG_MODE')
if not debug and self.httprequest.referrer:
- debug = bool(urlparse.parse_qs(urlparse.urlparse(self.httprequest.referrer).query, keep_blank_values=True).get('debug'))
+ debug = bool(parse_qs(urlparse(self.httprequest.referrer).query, keep_blank_values=True).get('debug'))
return debug
@contextlib.contextmanager
@@ -1250,7 +1254,7 @@ class DisableCacheMiddleware(object):
def __call__(self, environ, start_response):
def start_wrapped(status, headers):
referer = environ.get('HTTP_REFERER', '')
- parsed = urlparse.urlparse(referer)
+ parsed = urlparse(referer)
debug = parsed.query.count('debug') >= 1
new_headers = []
@@ -1616,7 +1620,7 @@ def send_file(filepath_or_fp, mimetype=None, as_attachment=False, filename=None,
def content_disposition(filename):
filename = odoo.tools.ustr(filename)
- escaped = urllib2.quote(filename.encode('utf8'))
+ escaped = quote(filename.encode('utf8'))
browser = request.httprequest.user_agent.browser
version = int((request.httprequest.user_agent.version or '0').split('.')[0])
if browser == 'msie' and version < 9:
diff --git a/odoo/modules/graph.py b/odoo/modules/graph.py
index 9a11949c508..d962ea78bdc 100644
--- a/odoo/modules/graph.py
+++ b/odoo/modules/graph.py
@@ -3,27 +3,12 @@
""" Modules dependency graph. """
-import os, sys, imp
-from os.path import join as opj
import itertools
-import zipimport
+import logging
import odoo
-
-import odoo.osv as osv
import odoo.tools as tools
-import odoo.tools.osutil as osutil
-from odoo.tools.translate import _
-
-import zipfile
-import odoo.release as release
-import re
-import base64
-from zipfile import PyZipFile, ZIP_DEFLATED
-from cStringIO import StringIO
-
-import logging
_logger = logging.getLogger(__name__)
diff --git a/odoo/netsvc.py b/odoo/netsvc.py
index b62f830eb9c..3832ae10cd6 100644
--- a/odoo/netsvc.py
+++ b/odoo/netsvc.py
@@ -6,15 +6,15 @@ import logging.handlers
import os
import platform
import pprint
-import release
+from . import release
import sys
import threading
import psycopg2
import odoo
-import sql_db
-import tools
+from . import sql_db
+from . import tools
_logger = logging.getLogger(__name__)
@@ -110,7 +110,7 @@ def init_logger():
logging.addLevelName(25, "INFO")
- from tools.translate import resetlocale
+ from .tools.translate import resetlocale
resetlocale()
# create a format for log messages and dates
diff --git a/odoo/osv/__init__.py b/odoo/osv/__init__.py
index 80a43a61ec4..9399e4410fb 100644
--- a/odoo/osv/__init__.py
+++ b/odoo/osv/__init__.py
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import osv
+from . import osv
diff --git a/odoo/service/__init__.py b/odoo/service/__init__.py
index eecc801d801..5d61b35f0e4 100644
--- a/odoo/service/__init__.py
+++ b/odoo/service/__init__.py
@@ -1,12 +1,12 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import common
-import db
-import model
-import report
-import wsgi_server
-import server
+from . import common
+from . import db
+from . import model
+from . import report
+from . import wsgi_server
+from . import server
#.apidoc title: RPC Services
diff --git a/odoo/service/common.py b/odoo/service/common.py
index e79adcc2528..36f61b0cab5 100644
--- a/odoo/service/common.py
+++ b/odoo/service/common.py
@@ -6,7 +6,7 @@ import odoo.release
import odoo.tools
from odoo.tools.translate import _
-import security
+from . import security
_logger = logging.getLogger(__name__)
diff --git a/odoo/service/model.py b/odoo/service/model.py
index 33a7fb2b93f..9ceab82b452 100644
--- a/odoo/service/model.py
+++ b/odoo/service/model.py
@@ -14,7 +14,7 @@ from odoo.tools import pycompat
from odoo.tools.translate import translate
from odoo.tools.translate import _
-import security
+from . import security
_logger = logging.getLogger(__name__)
diff --git a/odoo/service/report.py b/odoo/service/report.py
index 42daa393e77..faac5521b99 100644
--- a/odoo/service/report.py
+++ b/odoo/service/report.py
@@ -10,7 +10,7 @@ import odoo.report
from odoo import tools
from odoo.exceptions import UserError
-import security
+from . import security
_logger = logging.getLogger(__name__)
diff --git a/odoo/service/wsgi_server.py b/odoo/service/wsgi_server.py
index 3f4dc4b46ad..afcac829856 100644
--- a/odoo/service/wsgi_server.py
+++ b/odoo/service/wsgi_server.py
@@ -7,19 +7,17 @@ WSGI stack, common code.
"""
-import httplib
-import urllib
-import xmlrpclib
-import StringIO
-
-import errno
import logging
-import platform
-import socket
import sys
import threading
import traceback
+try:
+ from xmlrpc import client as xmlrpclib
+except ImportError:
+ # pylint: disable=bad-python3-import
+ import xmlrpclib
+
import werkzeug.serving
import werkzeug.contrib.fixers
diff --git a/odoo/sql_db.py b/odoo/sql_db.py
index 214dbfca96c..9a438d387de 100644
--- a/odoo/sql_db.py
+++ b/odoo/sql_db.py
@@ -12,8 +12,12 @@ from contextlib import contextmanager
from functools import wraps
import logging
import time
-import urlparse
import uuid
+try:
+ from urllib import parse as urlparse
+except ImportError:
+ #pylint: disable=bad-python3-import
+ import urlparse
import psycopg2
import psycopg2.extras
@@ -48,8 +52,8 @@ for name, typeoid in types_mapping.items():
psycopg2.extensions.register_type(psycopg2.extensions.new_type((700, 701, 1700,), 'float', undecimalize))
-import tools
-from tools.func import frame_codeinfo
+from . import tools
+from .tools.func import frame_codeinfo
from datetime import timedelta
import threading
from inspect import currentframe
diff --git a/odoo/tests/__init__.py b/odoo/tests/__init__.py
index bdf699e6467..4b678c6f375 100644
--- a/odoo/tests/__init__.py
+++ b/odoo/tests/__init__.py
@@ -1,2 +1,2 @@
-import common
-from common import *
+from . import common
+from .common import *
diff --git a/odoo/tests/addons/test_translation_import/__init__.py b/odoo/tests/addons/test_translation_import/__init__.py
index 89d26e2f597..a0fdc10fe11 100644
--- a/odoo/tests/addons/test_translation_import/__init__.py
+++ b/odoo/tests/addons/test_translation_import/__init__.py
@@ -1,2 +1,2 @@
# -*- coding: utf-8 -*-
-import models
+from . import models
diff --git a/odoo/tests/common.py b/odoo/tests/common.py
index 29bfdd79d0e..ce7be91ffd4 100644
--- a/odoo/tests/common.py
+++ b/odoo/tests/common.py
@@ -16,11 +16,16 @@ import threading
import time
import itertools
import unittest
-import urllib2
-import xmlrpclib
from contextlib import contextmanager
from datetime import datetime, timedelta
from pprint import pformat
+try:
+ from urllib import request as urllib2
+ from xmlrpc import client as xmlrpclib
+except ImportError:
+ # pylint: disable=bad-python3-import
+ import urllib2
+ import xmlrpclib
import werkzeug
diff --git a/odoo/tools/__init__.py b/odoo/tools/__init__.py
index 93ab0477546..13c2fd410b9 100644
--- a/odoo/tools/__init__.py
+++ b/odoo/tools/__init__.py
@@ -2,21 +2,21 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import copy
-import win32
-import appdirs
-from config import config
-from misc import *
-from convert import *
-from translate import *
-from graph import graph
-from image import *
-from amount_to_text import *
-from amount_to_text_en import *
-from pdf_utils import *
-from yaml_import import *
-from sql import *
-from float_utils import *
-from mail import *
-from func import *
-from debugger import *
-from xml_utils import *
+from . import win32
+from . import appdirs
+from .config import config
+from .misc import *
+from .convert import *
+from .translate import *
+from .graph import graph
+from .image import *
+from .amount_to_text import *
+from .amount_to_text_en import *
+from .pdf_utils import *
+from .yaml_import import *
+from .sql import *
+from .float_utils import *
+from .mail import *
+from .func import *
+from .debugger import *
+from .xml_utils import *
diff --git a/odoo/tools/amount_to_text_en.py b/odoo/tools/amount_to_text_en.py
index adfda4324b2..7a7fb5c2ef3 100644
--- a/odoo/tools/amount_to_text_en.py
+++ b/odoo/tools/amount_to_text_en.py
@@ -2,7 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
-from translate import _
+from .translate import _
_logger = logging.getLogger(__name__)
diff --git a/odoo/tools/appdirs.py b/odoo/tools/appdirs.py
index a1650ba5aba..f98fa1f8ae3 100644
--- a/odoo/tools/appdirs.py
+++ b/odoo/tools/appdirs.py
@@ -373,7 +373,11 @@ def _get_win_folder_from_registry(csidl_name):
registry for this guarantees us the correct answer for all CSIDL_*
names.
"""
- import _winreg
+ try:
+ import winreg as _winreg
+ except ImportError:
+ # pylint: disable=bad-python3-import
+ import _winreg
shell_folder_name = {
"CSIDL_APPDATA": "AppData",
diff --git a/odoo/tools/config.py b/odoo/tools/config.py
index 4443bc7e6d7..3a227fb5142 100644
--- a/odoo/tools/config.py
+++ b/odoo/tools/config.py
@@ -1,7 +1,10 @@
#odoo.loggers.handlers. -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import ConfigParser
+try:
+ import configparser as ConfigParser
+except ImportError:
+ import ConfigParser
import optparse
import os
import sys
@@ -10,7 +13,7 @@ import odoo.conf
import odoo.loglevels as loglevels
import logging
import odoo.release as release
-import appdirs
+from . import appdirs
class MyOption (optparse.Option, object):
""" optparse Option with two additional attributes.
diff --git a/odoo/tools/convert.py b/odoo/tools/convert.py
index 3df1d20b50f..84dbeec3a5e 100644
--- a/odoo/tools/convert.py
+++ b/odoo/tools/convert.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-import cStringIO
+import io
import csv
import logging
import os.path
@@ -848,7 +848,7 @@ def convert_csv_import(cr, module, fname, csvcontent, idref=None, mode='init',
#remove folder path from model
head, model = os.path.split(model)
- input = cStringIO.StringIO(csvcontent) #FIXME
+ input = io.BytesIO(csvcontent) #FIXME
reader = csv.reader(input, quotechar='"', delimiter=',')
fields = next(reader)
diff --git a/odoo/tools/import_email.py b/odoo/tools/import_email.py
deleted file mode 100644
index 74029c693eb..00000000000
--- a/odoo/tools/import_email.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-import os, sys
-import re
-import smtplib
-import email, mimetypes
-from email.header import decode_header
-from email.mime.text import MIMEText
-import xmlrpclib
-
-warn_msg = """
-Bonjour,
-
-Le message avec le sujet "%s" n'a pu être archivé dans l'ERP.
-
-""".decode('utf-8')
-
-class EmailParser(object):
-
- def __init__(self, headers, dispatcher):
- self.headers = headers
- self.dispatcher = dispatcher
-
- def parse(self, msg):
- dispatcher((self.headers, msg))
-
-class CommandDispatcher(object):
-
- def __init__(self, receiver):
- self.receiver = receiver
-
- def __call__(self, request):
- return self.receiver(request)
-
-class RPCProxy(object):
-
- def __init__(self, uid, passwd, host='localhost', port=8069, path='object'):
- self.rpc = xmlrpclib.ServerProxy('http://%s:%s/%s' % (host, port, path))
- self.user_id = uid
- self.passwd = passwd
-
- def __call__(self, request):
- return self.rpc.execute(self.user_id, self.passwd, *request)
-
-class ReceiverEmail2Event(object):
-
- email_re = re.compile(r"""
- ([a-zA-Z][\w\.-]*[a-zA-Z0-9] # username part
- @ # mandatory @ sign
- [a-zA-Z0-9][\w\.-]* # domain must start with a letter
- \.
- [a-z]{2,3} # TLD
- )
- """, re.VERBOSE)
-
- project_re = re.compile(r"^ *\[?(\d{4}\.?\d{0,3})\]?", re.UNICODE)
-
-
- def __init__(self, rpc):
- self.rpc = rpc
-
- def get_addresses(self, headers, msg):
- hcontent = ''
- for header in [h for h in headers if h in msg]:
- hcontent += msg[header]
- return self.email_re.findall(hcontent)
-
- def get_partners(self, headers, msg):
- alladdresses = self.get_addresses(headers, msg)
- address_ids = self.rpc(('res.partner', 'search', [('email', 'in', alladdresses)]))
- addresses = self.rpc(('res.partner', 'read', address_ids))
- return [x['partner_id'][0] for x in addresses]
-
- def __call__(self, request):
- headers, msg = request
- partners = self.get_partners(headers, msg)
- subject = u''
- for string, charset in decode_header(msg['Subject']):
- if charset:
- subject += string.decode(charset)
- else:
- subject += unicode(string)
- if partners:
- self.save_mail(msg, subject, partners)
- else:
- warning = MIMEText((warn_msg % (subject,)).encode('utf-8'), 'plain', 'utf-8')
- warning['Subject'] = 'Message de OpenERP'
- warning['From'] = 'erp@steel-sa.com'
- warning['To'] = msg['From']
- s = smtplib.SMTP()
- s.connect()
- s.sendmail('erp@steel-sa.com', self.email_re.findall(msg['From']), warning.as_string())
- s.close()
-
- if msg.is_multipart():
- for message in [m for m in msg.get_payload() if m.get_content_type() == 'message/rfc822']:
- self((headers, message.get_payload()[0]))
-
- def save_mail(self, msg, subject, partners):
- counter, description = 1, u''
- if msg.is_multipart():
- for part in msg.get_payload():
- stockdir = os.path.join('emails', msg['Message-Id'][1:-1])
- newdir = os.path.join('/tmp', stockdir)
- filename = part.get_filename()
- if not filename:
- ext = mimetypes.guess_extension(part.get_type())
- if not ext:
- ext = '.bin'
- filename = 'part-%03d%s' % (counter, ext)
-
- if part.get_content_maintype() == 'multipart':
- continue
- elif part.get_content_maintype() == 'text':
- if part.get_content_subtype() == 'plain':
- description += part.get_payload(decode=1).decode(part.get_charsets()[0])
- description += u'\n\nVous trouverez les éventuels fichiers dans le répertoire: %s' % stockdir
- continue
- else:
- description += u'\n\nCe message est en "%s", vous trouverez ce texte dans le répertoire: %s' % (part.get_content_type(), stockdir)
- elif part.get_content_type() == 'message/rfc822':
- continue
- if not os.path.isdir(newdir):
- os.mkdir(newdir)
-
- counter += 1
- fd = open(os.path.join(newdir, filename), 'w')
- fd.write(part.get_payload(decode=1))
- fd.close()
- else:
- description = msg.get_payload(decode=1).decode(msg.get_charsets()[0])
-
- project = self.project_re.search(subject)
- if project:
- project = project.groups()[0]
- else:
- project = ''
-
- for partner in partners:
- self.rpc(('res.partner.event', 'create', {'name' : subject, 'partner_id' : partner, 'description' : description, 'project' : project}))
-
-
-if __name__ == '__main__':
- rpc_dispatcher = CommandDispatcher(RPCProxy(4, 'admin'))
- dispatcher = CommandDispatcher(ReceiverEmail2Event(rpc_dispatcher))
- parser = EmailParser(['To', 'Cc', 'From'], dispatcher)
- parser.parse(email.message_from_file(sys.stdin))
diff --git a/odoo/tools/lru.py b/odoo/tools/lru.py
index b0ea21bba44..7c485a039d3 100644
--- a/odoo/tools/lru.py
+++ b/odoo/tools/lru.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# taken from http://code.activestate.com/recipes/252524-length-limited-o1-lru-cache-implementation/
import threading
-from func import synchronized
+from .func import synchronized
__all__ = ['LRU']
diff --git a/odoo/tools/misc.py b/odoo/tools/misc.py
index d90031e43eb..4c570e7cc87 100644
--- a/odoo/tools/misc.py
+++ b/odoo/tools/misc.py
@@ -8,12 +8,10 @@ Miscellaneous tools used by OpenERP.
from functools import wraps
import babel
-import cPickle
-import cProfile
from contextlib import contextmanager
import datetime
import subprocess
-import logging
+import io
import os
import passlib.utils
import re
@@ -23,24 +21,35 @@ import threading
import time
import werkzeug.utils
import zipfile
-from cStringIO import StringIO
from collections import defaultdict, Iterable, Mapping, MutableSet, OrderedDict
from itertools import islice, izip, groupby, repeat
from lxml import etree
-from which import which
+from .which import which
from threading import local
import traceback
import csv
from operator import itemgetter
try:
+ # pylint: disable=bad-python3-import
+ import cProfile
+except ImportError:
+ import profile as cProfile
+
+try:
+ # pylint: disable=bad-python3-import
+ import cPickle as pickle_
+except ImportError:
+ import pickle as pickle_
+
+try:
from html2text import html2text
except ImportError:
html2text = None
-from config import config
-from cache import *
+from .config import config
+from .cache import *
from .parse_version import parse_version
from . import pycompat
@@ -227,10 +236,9 @@ def _fileopen(path, mode, basedir, pathinfo, basename=None):
zipname = tail
zpath = os.path.join(basedir, head + '.zip')
if zipfile.is_zipfile(zpath):
- from cStringIO import StringIO
zfile = zipfile.ZipFile(zpath)
try:
- fo = StringIO()
+ fo = io.BytesIO()
fo.write(zfile.read(os.path.join(
os.path.basename(head), zipname).replace(
os.sep, '/')))
@@ -1122,7 +1130,7 @@ consteq = getattr(passlib.utils, 'consteq', _consteq)
class Pickle(object):
@classmethod
def load(cls, stream, errors=False):
- unpickler = cPickle.Unpickler(stream)
+ unpickler = pickle_.Unpickler(stream)
# pickle builtins: str/unicode, int/long, float, bool, tuple, list, dict, None
unpickler.find_global = None
try:
@@ -1133,9 +1141,9 @@ class Pickle(object):
@classmethod
def loads(cls, text):
- return cls.load(StringIO(text))
+ return cls.load(io.BytesIO(text))
- dumps = cPickle.dumps
- dump = cPickle.dump
+ dumps = pickle_.dumps
+ dump = pickle_.dump
pickle = Pickle
diff --git a/odoo/tools/test_config.py b/odoo/tools/test_config.py
index 256e7ba4c32..045bcaaa9c7 100644
--- a/odoo/tools/test_config.py
+++ b/odoo/tools/test_config.py
@@ -9,7 +9,7 @@
import os
-import config
+from . import config
config_file_00 = os.path.join(os.path.dirname(__file__),'test-config-values-00.conf')
diff --git a/odoo/tools/translate.py b/odoo/tools/translate.py
index 75495b4bbae..32299d6db14 100644
--- a/odoo/tools/translate.py
+++ b/odoo/tools/translate.py
@@ -20,10 +20,9 @@ from babel.messages import extract
from lxml import etree
import odoo
-from odoo.tools import config, pycompat
-from odoo.tools.misc import file_open, get_iso_codes, SKIPPED_ELEMENT_TYPES
-from odoo.tools.osutil import walksymlinks
-from odoo import sql_db, SUPERUSER_ID
+from . import config, pycompat
+from .misc import file_open, get_iso_codes, SKIPPED_ELEMENT_TYPES
+from .osutil import walksymlinks
_logger = logging.getLogger(__name__)
@@ -337,7 +336,7 @@ class GettextAlias(object):
# find current DB based on thread/worker db name (see netsvc)
db_name = getattr(threading.currentThread(), 'dbname', None)
if db_name:
- return sql_db.db_connect(db_name)
+ return odoo.sql_db.db_connect(db_name)
def _get_cr(self, frame, allow_create=True):
# try, in order: cr, cursor, self.env.cr, self.cr,
@@ -423,7 +422,7 @@ class GettextAlias(object):
cr, is_new_cr = self._get_cr(frame)
if cr:
# Try to use ir.translation to benefit from global cache if possible
- env = odoo.api.Environment(cr, SUPERUSER_ID, {})
+ env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
res = env['ir.translation']._get_source(None, ('code','sql_constraint'), lang, source)
else:
_logger.debug('no context cursor detected, skipping translation for "%r"', source)
@@ -780,7 +779,7 @@ def babel_extract_qweb(fileobj, keywords, comment_tags, options):
def trans_generate(lang, modules, cr):
- env = odoo.api.Environment(cr, SUPERUSER_ID, {})
+ env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
to_translate = set()
def push_translation(module, type, name, id, source, comments=None):
@@ -1019,7 +1018,7 @@ def trans_load_data(cr, fileobj, fileformat, lang, lang_name=None, verbose=True,
if verbose:
_logger.info('loading translation file for language %s', lang)
- env = odoo.api.Environment(cr, SUPERUSER_ID, context or {})
+ env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, context or {})
Lang = env['res.lang']
Translation = env['ir.translation']
@@ -1196,6 +1195,6 @@ def load_language(cr, lang):
:param lang: language ISO code with optional _underscore_ and l10n flavor (ex: 'fr', 'fr_BE', but not 'fr-BE')
:type lang: str
"""
- env = odoo.api.Environment(cr, SUPERUSER_ID, {})
+ env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
installer = env['base.language.install'].create({'lang': lang})
installer.lang_install()