Skip to content

Commit 69b68e3

Browse files
author
Elmo Todurov
committed
Added .upload(url) to FileRef, does a HTTP POST
1 parent 1070835 commit 69b68e3

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

spinoff/contrib/filetransfer/fileref.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ def fetch(self, dst_path=None, on_progress=None):
9999
assert reasonable_get_mtime(ret) == self.mtime
100100
return ret
101101

102+
def upload(self, url):
103+
return self.server.ask(('upload', self.file_id, url))
104+
102105
def _transfer(self, fh, on_progress):
103106
request = get_context().spawn(Request.using(server=self.server, file_id=self.file_id, size=self.size, abstract_path=self.abstract_path))
104107
more = True

spinoff/contrib/filetransfer/server.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33

44
from gevent.threadpool import ThreadPool
5+
import requests
56

67
from spinoff.actor import Actor
78
from spinoff.util.logging import dbg, err
@@ -51,6 +52,15 @@ def receive(self, msg):
5152
elif ('terminated', IN(self.responses)) == msg:
5253
_, sender = msg
5354
self._touch_file(file_id=self.responses.pop(sender))
55+
elif ('upload', ANY, ANY) == msg:
56+
_, file_id, url = msg
57+
if file_id not in self.published:
58+
self.reply((False, "Attempted to upload a file with ID %r which has not been published or is not available anymore" % (file_id,)))
59+
else:
60+
self._touch_file(file_id)
61+
file_path, _ = self.published[file_id]
62+
r = requests.post(url, files={'file': open(file_path, 'rb')})
63+
self.reply((True, r.text))
5464

5565
def _touch_file(self, file_id):
5666
file_path, time_added = self.published[file_id]

0 commit comments

Comments
 (0)