Search code examples
pythonodoo-8

Odoo 8 Auto Backup Module needs pysftp dependency


I cloned Auto Backup module from github repository ( https://github.com/Yenthe666/auto_backup ) into my Odoo machine and added the correct dependency to odoo-server.conf file, but when I click "Update modules list" on the application, I got the following message:

Traceback (most recent call last):
File "/opt/odoo/openerp/http.py", line 544, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/openerp/http.py", line 581, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/openerp/http.py", line 317, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/openerp/http.py", line 314, in checked_call
return self.endpoint(*a, **kw)
File "/opt/odoo/openerp/http.py", line 810, in __call__
return self.method(*args, **kw)
File "/opt/odoo/openerp/http.py", line 410, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/opt/odoo/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/opt/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/openerp/api.py", line 439, in old_api
result = new_api(recs, *args, **kwargs)
File "/opt/odoo/openerp/api.py", line 443, in new_api
result = [method(rec, *args, **kwargs) for rec in self
File "/opt/odoo/openerp/addons/base/module/wizard/base_module_update.py", line 15, in update_module self.updated, self.added = self.env['ir.module.module'].update_list()
File "/opt/odoo/openerp/api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "/opt/odoo/openerp/api.py", line 508, in new_api
result = method(self._model, cr, uid, *args, **old_kwargs)
File "/opt/odoo/openerp/addons/base/module/module.py", line 651, in update_list
handler.load_addons()
File "/opt/odoo/openerp/http.py", line 1317, in load_addons
m = __import__('openerp.addons.' + module)
File "/opt/odoo/openerp/modules/module.py", line 80, in load_module
mod = imp.load_module('openerp.addons.' + module_part, f, path, descr)
File "/opt/odoo/auto_backup/auto_backup/__init__.py", line 23, in
import backup_scheduler
File "/opt/odoo/auto_backup/auto_backup/backup_scheduler.py", line 33, in
raise ImportError('This module needs pysftp to automaticly write backups to the FTP through SFTP.
Please install pysftp on your system. (sudo pip install pysftp)')
ImportError: This module needs pysftp to automaticly write backups to the FTP through SFTP. Please install pysftp on your system. (sudo pip install pysftp)

Then I typed sudo pip install pysftp in the terminal and I got

Requirement already satisfied (use --upgrade to upgrade): pysftp in /usr/local/lib/python2.7/dist-packages
Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.17 in /usr/local/lib/python2.7/dist-packages (from pysftp)
Cleaning up...

I even tried to type sudo pip install pysftp --upgrade but I got

Requirement already up-to-date: pysftp in /usr/local/lib/python2.7/dist-packages
Requirement already up-to-date: paramiko>=1.17 in /usr/local/lib/python2.7/dist-packages (from pysftp)
Cleaning up...

Could ye help me on that, please?


Solution

  • I found out the solution! In case anyone has similar issues, what I did was:

    I tried typing sudo pip uninstall pysftp, it didn't work and then I did:

    sudo apt-get install libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev
    

    which are the dependencies needed for running pysftp (thanks to @lukebranch at github repository issues who figured it out). At this point, if uninstalling pysftp worked, reinstalling pysftp and restarting Odoo server should work. But in my case it was not enough.

    So after that, I typed python to enter python environment and then import pysftp. I got the following error:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/dist-packages/pysftp/__init__.py", line 12, in <module>
        import paramiko
      File "/usr/local/lib/python2.7/dist-packages/paramiko/__init__.py", line 30, in <module>
        from paramiko.transport import SecurityOptions, Transport
      File "/usr/local/lib/python2.7/dist-packages/paramiko/transport.py", line 33, in <module>
        from cryptography.hazmat.backends import default_backend
    ImportError: No module named cryptography.hazmat.backends
    

    So I exited python environment, then typed sudo pip install paramiko and sudo pip install cryptography. Finally I entered python environment again and typed import pysftp and it worked perfectly.

    Hope it helps someone else!