Example #1
0
 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)
     })
Example #2
0
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