diff --git a/trackhub/track.py b/trackhub/track.py index 1007dac2..ff794979 100644 --- a/trackhub/track.py +++ b/trackhub/track.py @@ -19,7 +19,7 @@ def _check_name(name): - regex = re.compile('[^a-zA-Z0-9-_]') + regex = re.compile('[^a-zA-Z0-9-_.]') if regex.search(name): raise ValueError('Non-alphanumeric character in name "%s"' % name) diff --git a/trackhub/upload.py b/trackhub/upload.py index a37a5a11..5fc8a6b1 100644 --- a/trackhub/upload.py +++ b/trackhub/upload.py @@ -3,6 +3,19 @@ from fabric.api import local, settings, run, abort, cd, env, hide, put from fabric.contrib.console import confirm import track +import boto +from boto.s3.key import Key + + +def upload_s3(local_fn, remote_fn, **kwargs): + s3 = boto.connect_s3() + bucket = s3.get_bucket("sauron-yeo") + k = Key(bucket) + k.key = remote_fn + k.set_contents_from_filename(local_fn) + k.make_public() + return ["done"] + def upload_file(host, user, local_fn, remote_fn, port=22, rsync_options='-azvr --progress', run_local=False): @@ -33,15 +46,18 @@ def upload_file(host, user, local_fn, remote_fn, port=22, def upload_hub(host, user, hub, port=22, rsync_options='-azvr --progress', - run_local=False): + run_local=False, run_s3=False): kwargs = dict(host=host, user=user, port=port, rsync_options=rsync_options, run_local=run_local) print kwargs results = [] - + if run_s3: + cur_upload_file = upload_s3 + else: + cur_upload_file = upload_file # First the hub file: results.extend( - upload_file( + cur_upload_file( local_fn=hub.local_fn, remote_fn=hub.remote_fn, **kwargs) @@ -50,7 +66,7 @@ def upload_hub(host, user, hub, port=22, rsync_options='-azvr --progress', # Then the genomes file: print hub.genomes_file.local_fn results.extend( - upload_file( + cur_upload_file( local_fn=hub.genomes_file.local_fn, remote_fn=hub.genomes_file.remote_fn, **kwargs) @@ -59,7 +75,7 @@ def upload_hub(host, user, hub, port=22, rsync_options='-azvr --progress', # then the trackDB file: for g in hub.genomes_file.genomes: results.extend( - upload_file( + cur_upload_file( local_fn=g.trackdb.local_fn, remote_fn=g.trackdb.remote_fn, **kwargs @@ -70,7 +86,7 @@ def upload_hub(host, user, hub, port=22, rsync_options='-azvr --progress', print repr(t) if t._html: results.extend( - upload_file( + cur_upload_file( local_fn=t._html.local_fn, remote_fn=t._html.remote_fn, **kwargs) @@ -79,11 +95,16 @@ def upload_hub(host, user, hub, port=22, rsync_options='-azvr --progress', def upload_track(host, user, track, port=22, rsync_options='-azvr --progress', - run_local=False): + run_local=False, run_s3=False): + + if run_s3: + cur_upload_file = upload_s3 + else: + cur_upload_file = upload_file kwargs = dict(host=host, user=user, local_fn=track.local_fn, remote_fn=track.remote_fn, rsync_options=rsync_options, run_local=run_local) - results = upload_file(**kwargs) + results = cur_upload_file(**kwargs) if track.tracktype == 'bam': kwargs['local_fn'] += '.bai' kwargs['remote_fn'] += '.bai'