From 40f7fe3fe78e8fb528c3bf5e09b6014bcb099495 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Sat, 2 Dec 2006 20:31:43 -0700
Subject: [PATCH] misc upload fixes and improvements

---
 allmydata/upload.py | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/allmydata/upload.py b/allmydata/upload.py
index 3850b4bb..4c932d0c 100644
--- a/allmydata/upload.py
+++ b/allmydata/upload.py
@@ -6,6 +6,9 @@ from twisted.application import service
 from allmydata.util import idlib
 from allmydata import encode
 
+from cStringIO import StringIO
+import sha
+
 class NotEnoughPeersError(Exception):
     pass
 
@@ -17,12 +20,6 @@ class HaveAllPeersError(Exception):
 class TooFullError(Exception):
     pass
 
-def upload_a_file(peer, filename):
-    u = Uploader(peer)
-    u.set_filehandle(open(filename,"rb"))
-    u.set_verifierid(hashthingy(filethingy))
-    u.make_encoder()
-
 class FileUploader:
     debug = False
 
@@ -133,7 +130,7 @@ class Uploader(service.MultiService):
     """
     name = "uploader"
 
-    def _compute_verifierid(self, filehandle):
+    def _compute_verifierid(self, f):
         hasher = sha.new(netstring("allmydata_v1_verifierid"))
         f.seek(0)
         hasher.update(f.read())
@@ -141,11 +138,24 @@ class Uploader(service.MultiService):
         # note: this is only of the plaintext data, no encryption yet
         return hasher.digest()
 
-    def upload_file_by_name(self, filename):
+    def upload_filename(self, filename):
+        f = open(filename, "rb")
+        def _done(res):
+            f.close()
+            return res
+        d = self.upload_filehandle(f)
+        d.addBoth(_done)
+        return d
+
+    def upload_data(self, data):
+        f = StringIO(data)
+        return self.upload_filehandle(f)
+
+    def upload_filehandle(self, f):
         assert self.parent
         assert self.running
-        f = open(filename, "rb")
         u = FileUploader(self.parent)
+        u.set_filehandle(f)
         u.set_verifierid(self._compute_verifierid(f))
         u.make_encoder()
         d = u.start()
-- 
2.45.2