Refactoring
This commit is contained in:
parent
3e7f1f4b14
commit
3b9ee1e1e2
|
@ -0,0 +1,6 @@
|
|||
certifi==2018.10.15
|
||||
chardet==3.0.4
|
||||
idna==2.7
|
||||
progress==1.4
|
||||
requests==2.20.0
|
||||
urllib3==1.24
|
84
sbeam.py
84
sbeam.py
|
@ -12,48 +12,56 @@
|
|||
|
||||
import os
|
||||
import requests
|
||||
from progress.spinner import Spinner
|
||||
from progress.bar import FillingSquaresBar as Bar
|
||||
|
||||
|
||||
def get_superlist():
|
||||
with requests.get('http://192.168.178.50:8080/superlist',
|
||||
headers={'User-Agent': 'sbeam'}) as response:
|
||||
assert response.status_code == 200
|
||||
return response.text.split('\n')
|
||||
class SbeamReceiver(object):
|
||||
|
||||
def __init__(self, host):
|
||||
self.host = host
|
||||
self._headers = {'User-Agent': 'sbeam'}
|
||||
self.url = f'http://{host}:8080'
|
||||
self.superlist()
|
||||
|
||||
def superlist(self):
|
||||
url = f'{self.url}/superlist'
|
||||
with requests.get(f'{self.url}/superlist',
|
||||
headers=self._headers) as response:
|
||||
assert response.status_code == 200
|
||||
self.filelist = response.text.split('\n')
|
||||
try:
|
||||
self._total_bytes = 0
|
||||
for item in self.filelist:
|
||||
self._total_bytes += int(item.split('||')[1])
|
||||
finally:
|
||||
return len(self.filelist) - 1
|
||||
|
||||
def save_stream(self, filename, chunk_size=16392):
|
||||
with requests.get(f'{self.url}/getstream', stream=True,
|
||||
headers=self._headers) as response:
|
||||
assert response.status_code == 200
|
||||
with open(filename, 'wb') as handle:
|
||||
for chunk in Bar('Downloading',
|
||||
max=self._total_bytes/chunk_size) \
|
||||
.iter(response.iter_content(chunk_size=chunk_size)):
|
||||
handle.write(chunk)
|
||||
|
||||
|
||||
def save_stream(filename):
|
||||
with requests.get('http://192.168.178.50:8080/getstream', stream=True,
|
||||
headers={'User-Agent': 'sbeam'}) as response:
|
||||
assert response.status_code == 200
|
||||
with open(filename, 'wb') as handle:
|
||||
# length = response.headers.get('Content-length')
|
||||
# print(length)
|
||||
for chunk in response.iter_content(chunk_size=8196):
|
||||
handle.write(chunk)
|
||||
|
||||
|
||||
def split_stream(data, directory, superlist):
|
||||
with open(data, 'rb') as blob:
|
||||
for item in superlist:
|
||||
if not item:
|
||||
break
|
||||
filename, filesize, filepath, timestamp = item.split('||')
|
||||
fullpath = os.path.join(directory, filepath[1:])
|
||||
os.makedirs(fullpath, exist_ok=True)
|
||||
print(f'Saving {filename} ({filesize} bytes) to disk...')
|
||||
with open(os.path.join(fullpath, filename), 'wb') as handle:
|
||||
handle.write(blob.read(int(filesize)))
|
||||
def split_stream(self, data, directory):
|
||||
with open(data, 'rb') as blob:
|
||||
for item in self.filelist:
|
||||
if not item:
|
||||
break
|
||||
filename, filesize, filepath, timestamp = item.split('||')
|
||||
fullpath = os.path.join(directory, filepath[1:])
|
||||
os.makedirs(fullpath, exist_ok=True)
|
||||
print(f'Unpacking {filename} ({filesize} bytes)...')
|
||||
with open(os.path.join(fullpath, filename), 'wb') as handle:
|
||||
handle.write(blob.read(int(filesize)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
to_download = 0
|
||||
superlist = get_superlist()
|
||||
try:
|
||||
for item in superlist:
|
||||
to_download += int(item.split('||')[1])
|
||||
except IndexError:
|
||||
print(f'Download stream contains {len(superlist) - 1} items.')
|
||||
finally:
|
||||
print(f'Target download size is {to_download} bytes.')
|
||||
save_stream('data.gz')
|
||||
split_stream('data.gz', 'received', superlist)
|
||||
sbeam_rec = SbeamReceiver('192.168.178.50')
|
||||
sbeam_rec.save_stream('data.gz')
|
||||
sbeam_rec.split_stream('data.gz', 'received')
|
||||
|
|
Loading…
Reference in New Issue