Skip to content
This repository was archived by the owner on Oct 2, 2021. It is now read-only.

Commit 4c1c3ee

Browse files
committed
Added logging and progress reporting
1 parent 6198d5d commit 4c1c3ee

File tree

3 files changed

+59
-3
lines changed

3 files changed

+59
-3
lines changed

genomespaceclient/client.py

+3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
import logging
12
import re
23
from urlparse import urlparse
34

45
import requests
56
import storage_handlers
67

8+
log = logging.getLogger(__name__)
9+
710

811
class GSClientException(Exception):
912
pass

genomespaceclient/shell.py

+39-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import argparse
22
from datetime import datetime
33
import json
4+
import logging
5+
import sys
46

57
from client import GenomeSpaceClient
68
import util
9+
log = logging.getLogger(__name__)
710

811

912
def get_client(args):
@@ -33,7 +36,8 @@ def genomespace_list_files(args):
3336
last_modified=dir.get("lastModified", ""),
3437
name=dir.get("name")))
3538

36-
if __name__ == "__main__":
39+
40+
def process_args(args):
3741
parser = argparse.ArgumentParser()
3842

3943
grp_auth_userpass = parser.add_argument_group(
@@ -49,6 +53,10 @@ def genomespace_list_files(args):
4953
'-t', '--token', type=str,
5054
help="GenomeSpace auth token",
5155
required=False)
56+
57+
parser.add_argument("-v", "--verbose", action="count",
58+
dest="verbosity_count", default=0,
59+
help="increases log verbosity for each occurrence")
5260
subparsers = parser.add_subparsers(metavar='<subcommand>')
5361

5462
# upload commands
@@ -91,5 +99,33 @@ def genomespace_list_files(args):
9199
help="GenomeSpace URI of file/folder to delete")
92100
gs_list_parser.set_defaults(func=genomespace_delete_files)
93101

94-
args = parser.parse_args()
95-
args.func(args)
102+
args = parser.parse_args(args[1:])
103+
return args
104+
105+
106+
def configure_logging(verbosity_count):
107+
if verbosity_count < 3:
108+
logging.getLogger('requests').setLevel(logging.ERROR)
109+
# set global logging level
110+
logging.basicConfig(
111+
stream=sys.stdout,
112+
level=logging.DEBUG if verbosity_count > 3 else logging.INFO,
113+
format='%(levelname)-5s: %(name)s: %(message)s')
114+
# Set client log level
115+
if verbosity_count:
116+
log.setLevel(max(4 - verbosity_count, 1) * 10)
117+
else:
118+
log.setLevel(logging.INFO)
119+
120+
121+
def main():
122+
try:
123+
args = process_args(sys.argv)
124+
configure_logging(args.verbosity_count)
125+
# invoke subcommand
126+
args.func(args)
127+
finally:
128+
logging.shutdown()
129+
130+
if __name__ == "__main__":
131+
sys.exit(main())

genomespaceclient/storage_handlers.py

+17
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1+
from __future__ import print_function
2+
13
from abc import ABCMeta, abstractmethod, abstractproperty
4+
import logging
25
import os
36
from urlparse import urlparse
47

58
import boto3
69
import requests
710
import swiftclient.shell
11+
import util
12+
13+
log = logging.getLogger(__name__)
814

915

1016
def create_handler(storage_type):
@@ -47,8 +53,19 @@ def download(self, download_info, destination):
4753
with open(destination, 'wb') as handle:
4854
response = requests.get(download_info['Location'], stream=True)
4955
response.raise_for_status()
56+
total_length = response.headers.get('content-length')
57+
bytes_copied = 0
5058
for block in response.iter_content(65536):
5159
handle.write(block)
60+
bytes_copied += len(block)
61+
if log.isEnabledFor(logging.INFO):
62+
print("Progress: {progress:>8s} of {total:>8s} copied".format(
63+
progress=util.format_file_size(bytes_copied),
64+
total=util.format_file_size(int(total_length))
65+
if total_length else "unknown size"),
66+
end='\r')
67+
if log.isEnabledFor(logging.INFO):
68+
print("\n")
5269

5370

5471
class S3StorageHandler(SimpleStorageHandler):

0 commit comments

Comments
 (0)