wimleers / fileconveyor

File Conveyor is a daemon written in Python to detect, process and sync files. In particular, it's designed to sync files to CDNs. Amazon S3 and Rackspace Cloud Files, as well as any Origin Pull or (S)FTP Push CDN, are supported. Originally written for my bachelor thesis at Hasselt University in Belgium.
https://wimleers.com/fileconveyor
The Unlicense
341 stars 95 forks source link

SFTPStorage broken since conversion to django-storages #142

Open AlimoRabbani opened 11 years ago

AlimoRabbani commented 11 years ago

I get this error when I run arbitrary.py:

Traceback (most recent call last):
  File "arbitrator.py", line 1185, in <module>
    run_file_conveyor()
  File "arbitrator.py", line 1168, in run_file_conveyor
    arbitrator = Arbitrator(os.path.join(FILE_CONVEYOR_PATH, "config.xml"), restart)
  File "arbitrator.py", line 151, in __init__
    transporter = self.__create_transporter(server)
  File "arbitrator.py", line 928, in __create_transporter
    transporter = transporter_class(settings, self.transporter_callback, self.transporter_error_callback, "Arbitrator")
  File "/home/alimohammad/fileconveyor/src/fileconveyor/fileconveyor/transporters/transporter_sftp.py", line 35, in __init__
    self.storage = SFTPStorage(location, self.settings["url"], key)
TypeError: __init__() takes exactly 1 argument (4 given)

I am on ubuntu 12.04, with python 2.7.3, django 1.5.1, paramiko 1.7.6, and django-storages 1.1.5.

I have tried it with different versions of django and django-storages and I still get the same result.

karschsp commented 11 years ago

I'm having the same issue. CentOS 6.0. Python 2.6.

wimleers commented 11 years ago

My best guess is that the Paramiko API has changed :( SFTPStorage was introduced 2 years ago, at #57, so it seems plausible.

edmooney commented 11 years ago

I think the issue maybe that on line 35: self.storage = SFTPStorage(location, self.settings["url"], key) SFTP in django-storages doesn't have an init() that supports passing params, rather it uses django conf settings (ref: http://pydoc.net/Python/django-storages/1.1.5/storages.backends.sftpstorage/ )

Note: some of the params needed for fileconveyor would need to be set with settings in SFTP_STORAGE_PARAMS which can be found in the following connect function: (ref: http://www.lag.net/paramiko/docs/paramiko.SSHClient-class.html#connect )

I believe the functionality may have broken when converting to django-storages: https://github.com/wimleers/fileconveyor/blob/master/fileconveyor/transporters/transporter_sftp.py#L35 A subclass of SFTPStorage maybe needed that can be initialized by passing params

wimleers commented 11 years ago

I believe the functionality may have broken when converting to django-storages: https://github.com/wimleers/fileconveyor/blob/master/fileconveyor/transporters/transporter_sftp.py#L35

I believe you're right. It seems too much code got deleted.

This could happen because so few people use this transporter. Of course that's a poor excuse. We should have test coverage for the transporters. But that of course requires a massive amount of mocking. Ah well :(

PR to fix it is welcome. If not, then I'll try to fix this soon, but I'm leaving for DrupalCon this weekend, so it won't be very soon.

edmooney commented 11 years ago

There's a forked version here with possible fix, need to include some notes: forked sftp

wimleers commented 11 years ago

Can you create a pull request to merge in your fix? :)

wazdog commented 11 years ago

@edmooney after adding SECRET_KEY to django_settings.py its running, however I'm now getting the following error, any ideas?

2013-05-22 21:16:38,360 - Arbitrator.Transporter - ERROR - The transporter 'SFTP' has failed while transporting the file '/var/www/html/test/hello.txt' (action: 1). Error: 'maximum recursion depth exceeded'.

edmooney commented 11 years ago

@wazdog.. will do pull request tomorrow with updated code.