Browse Source

[FIX] encode to utf8 user/password

[FIX] prevent not installed class been evaluated

[FIX] python header in akretion modules

[FIX] check if class is in installed module, README
pull/516/head
David Beal 9 years ago
committed by Florian da Costa
parent
commit
a220ace8ba
  1. 22
      external_file_location/__init__.py
  2. 24
      external_file_location/__openerp__.py
  3. 5
      external_file_location/abstract_task.py
  4. 30
      external_file_location/attachment.py
  5. 60
      external_file_location/helper.py
  6. 24
      external_file_location/location.py
  7. 45
      external_file_location/task.py
  8. 22
      external_file_location/tasks/__init__.py
  9. 22
      external_file_location/tasks/abstract_fs.py
  10. 22
      external_file_location/tasks/filestore.py
  11. 28
      external_file_location/tasks/ftp.py
  12. 22
      external_file_location/tasks/sftp.py
  13. 22
      external_file_location/tests/__init__.py
  14. 24
      external_file_location/tests/mock_server.py
  15. 24
      external_file_location/tests/test_sftp.py

22
external_file_location/__init__.py

@ -1,25 +1,3 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2014 Akretion (http://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
from . import attachment from . import attachment
from . import location from . import location
from . import task from . import task

24
external_file_location/__openerp__.py

@ -1,24 +1,6 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
# coding: utf-8
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{ {
'name': 'external_file_location', 'name': 'external_file_location',

5
external_file_location/abstract_task.py

@ -1,5 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# coding: utf-8
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from base64 import b64encode from base64 import b64encode

30
external_file_location/attachment.py

@ -1,24 +1,6 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
# coding: utf-8
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import models, fields from openerp import models, fields
@ -34,6 +16,6 @@ class IrAttachmentMetadata(models.Model):
], readonly=False, required=True, default='pending') ], readonly=False, required=True, default='pending')
state_message = fields.Text() state_message = fields.Text()
task_id = fields.Many2one('external.file.task', string='Task') task_id = fields.Many2one('external.file.task', string='Task')
location_id = fields.Many2one('external.file.location', string='Location',
related='task_id.location_id', store=True
)
location_id = fields.Many2one(
'external.file.location', string='Location',
related='task_id.location_id', store=True)

60
external_file_location/helper.py

@ -1,23 +1,7 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# coding: utf-8
# Author: Joel Grand-Guillaume # Author: Joel Grand-Guillaume
# Copyright 2011-2012 Camptocamp SA # Copyright 2011-2012 Camptocamp SA
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
def itersubclasses(cls, _seen=None): def itersubclasses(cls, _seen=None):
@ -58,3 +42,43 @@ def itersubclasses(cls, _seen=None):
yield sub yield sub
for sub in itersubclasses(sub, _seen): for sub in itersubclasses(sub, _seen):
yield sub yield sub
def _get_erp_module_name(module_path):
# see this PR for v9 https://github.com/odoo/odoo/pull/11084
""" Extract the name of the Odoo module from the path of the
Python module.
Taken from Odoo server: ``openerp.models.MetaModel``
The (Odoo) module name can be in the ``openerp.addons`` namespace
or not. For instance module ``sale`` can be imported as
``openerp.addons.sale`` (the good way) or ``sale`` (for backward
compatibility).
"""
module_parts = module_path.split('.')
if len(module_parts) > 2 and module_parts[:2] == ['openerp', 'addons']:
module_name = module_parts[2]
else:
module_name = module_parts[0]
return module_name
def is_module_installed(env, module_name):
""" Check if an Odoo addon is installed.
:param module_name: name of the addon
"""
# the registry maintains a set of fully loaded modules so we can
# lookup for our module there
return module_name in env.registry._init_modules
def get_erp_module(cls_or_func):
""" For a top level function or class, returns the
name of the Odoo module where it lives.
So we will be able to filter them according to the modules
installation state.
"""
return _get_erp_module_name(cls_or_func.__module__)

24
external_file_location/location.py

@ -1,24 +1,6 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
# coding: utf-8
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import models, fields, api from openerp import models, fields, api
from .abstract_task import AbstractTask from .abstract_task import AbstractTask

45
external_file_location/task.py

@ -1,27 +1,9 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
# coding: utf-8
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import models, fields, api from openerp import models, fields, api
from .helper import itersubclasses
from .helper import itersubclasses, get_erp_module, is_module_installed
from .abstract_task import AbstractTask from .abstract_task import AbstractTask
@ -52,9 +34,11 @@ class Task(models.Model):
def _get_method(self): def _get_method(self):
res = [] res = []
for cls in itersubclasses(AbstractTask): for cls in itersubclasses(AbstractTask):
if cls._synchronize_type \
and ('protocol' not in self._context
or cls._key == self._context['protocol']):
if not is_module_installed(self.env, get_erp_module(cls)):
continue
if cls._synchronize_type and (
'protocol' not in self._context or
cls._key == self._context['protocol']):
cls_info = (cls._key + '_' + cls._synchronize_type, cls_info = (cls._key + '_' + cls._synchronize_type,
cls._name + ' ' + cls._synchronize_type) cls._name + ' ' + cls._synchronize_type)
res.append(cls_info) res.append(cls_info)
@ -78,13 +62,16 @@ class Task(models.Model):
@api.one @api.one
def run(self): def run(self):
for cls in itersubclasses(AbstractTask): for cls in itersubclasses(AbstractTask):
if cls._synchronize_type and \
cls._key + '_' + cls._synchronize_type == self.method:
if not is_module_installed(self.env, get_erp_module(cls)):
continue
cls_build = '%s_%s' % (cls._key, cls._synchronize_type)
if cls._synchronize_type and cls_build == self.method:
method_class = cls method_class = cls
config = { config = {
'host': self.location_id.address, 'host': self.location_id.address,
'user': self.location_id.login,
'pwd': self.location_id.password,
# ftplib does not support unicode
'user': self.location_id.login.encode('utf-8'),
'pwd': self.location_id.password.encode('utf-8'),
'port': self.location_id.port, 'port': self.location_id.port,
'allow_dir_creation': False, 'allow_dir_creation': False,
'file_name': self.filename, 'file_name': self.filename,

22
external_file_location/tasks/__init__.py

@ -1,25 +1,3 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
from . import abstract_fs from . import abstract_fs
from . import ftp from . import ftp
from . import sftp from . import sftp

22
external_file_location/tasks/abstract_fs.py

@ -1,23 +1,7 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# coding: utf-8
# Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>). # Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from ..abstract_task import AbstractTask from ..abstract_task import AbstractTask
import logging import logging

22
external_file_location/tasks/filestore.py

@ -1,23 +1,7 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# coding: utf-8
# Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>). # Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from .abstract_fs import AbstractFSTask from .abstract_fs import AbstractFSTask
from base64 import b64decode from base64 import b64decode

28
external_file_location/tasks/ftp.py

@ -1,23 +1,7 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# coding: utf-8
# Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>). # Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from .abstract_fs import AbstractFSTask from .abstract_fs import AbstractFSTask
from base64 import b64decode from base64 import b64decode
@ -43,19 +27,19 @@ class FtpImportTask(FtpTask):
def run(self): def run(self):
att_ids = [] att_ids = []
with ftpfs.FTPFS(self.host, self.user, self.pwd,
port=self.port) as ftp_conn:
with ftpfs.FTPFS(
self.host, self.user, self.pwd, port=self.port) as ftp_conn:
files_to_process = self._get_files(ftp_conn, self.path) files_to_process = self._get_files(ftp_conn, self.path)
for file_to_process in files_to_process: for file_to_process in files_to_process:
att_ids.append(self._process_file(ftp_conn, file_to_process)) att_ids.append(self._process_file(ftp_conn, file_to_process))
return att_ids return att_ids
class FtpExportTask(FtpTask): class FtpExportTask(FtpTask):
_synchronize_type = 'export' _synchronize_type = 'export'
def run(self, async=True): def run(self, async=True):
import ipdb; ipdb.set_trace()
for attachment in self.attachment_ids: for attachment in self.attachment_ids:
if attachment.state in ('pending', 'failed'): if attachment.state in ('pending', 'failed'):
self.attachment_id = attachment self.attachment_id = attachment

22
external_file_location/tasks/sftp.py

@ -1,23 +1,7 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# coding: utf-8
# Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>). # Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from .abstract_fs import AbstractFSTask from .abstract_fs import AbstractFSTask
from base64 import b64decode from base64 import b64decode

22
external_file_location/tests/__init__.py

@ -1,24 +1,2 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
from . import mock_server from . import mock_server
from . import test_sftp from . import test_sftp

24
external_file_location/tests/mock_server.py

@ -1,23 +1,7 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
# coding: utf-8
# Copyright (C) 2014 initOS GmbH & Co. KG (<http://www.initos.com>).
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import mock import mock
from contextlib import contextmanager from contextlib import contextmanager

24
external_file_location/tests/test_sftp.py

@ -1,24 +1,6 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Module for OpenERP
# Copyright (C) 2015 Akretion (http://www.akretion.com).
# @author Valentin CHEMIERE <valentin.chemiere@akretion.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
###############################################################################
# coding: utf-8
# @ 2015 Valentin CHEMIERE @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import openerp.tests.common as common import openerp.tests.common as common
from ..tasks.sftp import SftpImportTask from ..tasks.sftp import SftpImportTask

Loading…
Cancel
Save