async def post(self): import zipfile from requests.auth import HTTPBasicAuth from siaskynet import Skynet uploaded_file = self.request.files['file'][0] filename = self.get_query_argument('filename') local_filename = '/tmp/{}'.format(filename) with open(uploaded_file['filename'], 'wb') as f: f.write(uploaded_file['body']) with zipfile.ZipFile(uploaded_file['filename'], 'r') as zip_ref: zip_ref.extractall(local_filename + '/dir') try: opts = Skynet.default_upload_options() opts.portal_url = 'http://0.0.0.0:9980' skylink = Skynet.upload_directory(local_filename + '/dir') except Exception as e: self.set_status(400) return self.render_as_json({ 'status': 'error', 'message': 'sia node not responding' }) return self.render_as_json({ 'status': 'success', 'skylink': Skynet.strip_prefix(skylink) })
def test_upload_directory(): """Test uploading a directory.""" src_dir = './testdata' skylink = 'testskylink' sialink = Skynet.uri_skynet_prefix() + skylink # upload a directory responses.add(responses.POST, 'https://siasky.net/skynet/skyfile', json={'skylink': skylink}, status=200) print('Uploading dir ' + src_dir) sialink2 = Skynet.upload_directory(src_dir) if sialink != sialink2: sys.exit('ERROR: expected returned sialink ' + sialink + ', received ' + sialink2) print('Dir upload successful, sialink: ' + sialink) body = responses.calls[0].request.body assert str(body).find('Content-Disposition: form-data; name="files[]"; \ filename="file1"') != -1 assert str(body).find('Content-Disposition: form-data; name="files[]"; \ filename="file3"') != -1 assert str(body).find('Content-Disposition: form-data; name="files[]"; \ filename="dir1/file2"') != -1 # Check a file that shouldn't be there. assert str(body).find('Content-Disposition: form-data; name="files[]"; \ filename="file0"') == -1 assert len(responses.calls) == 1