diff export.py @ 3:d4ae83dedb14 draft

planemo upload for repository https://github.com/TAMU-CPT/galaxy-webapollo commit 4ac38d0b6dba1183f3e78eb5c224c7051064b4a5
author eric-rasche
date Thu, 12 Jan 2017 11:52:28 -0500
parents 6002cc0df04e
children 7610987e0c48
line wrap: on
line diff
--- a/export.py	Tue May 03 13:48:11 2016 -0400
+++ b/export.py	Thu Jan 12 11:52:28 2017 -0500
@@ -1,44 +1,74 @@
 #!/usr/bin/env python
+import sys
 import StringIO
-import sys
 import json
 import argparse
 from Bio import SeqIO
 from BCBio import GFF
-from webapollo import WebApolloInstance
+from webapollo import WAAuth, WebApolloInstance, CnOrGuess, GuessCn
+
+
+def export(org_cn, seqs):
+    org_data = wa.organisms.findOrganismByCn(org_cn)
+
+    data = StringIO.StringIO()
+
+    kwargs = dict(
+        exportType='GFF3',
+        seqType='genomic',
+        exportGff3Fasta=True,
+        output="text",
+        exportFormat="text",
+        organism=org_cn,
+    )
+
+    if len(seqs) > 0:
+        data.write(wa.io.write(
+            exportAllSequences=False,
+            sequences=seqs,
+            **kwargs
+        ).encode('utf-8'))
+    else:
+        data.write(wa.io.write(
+            exportAllSequences=True,
+            sequences=[],
+            **kwargs
+        ).encode('utf-8'))
+
+    # Seek back to start
+    data.seek(0)
+
+    records = list(GFF.parse(data))
+    if len(records) == 0:
+        print "Could not find any sequences or annotations for this organism + reference sequence"
+        sys.exit(2)
+    else:
+        for record in records:
+            record.annotations = {}
+            if args.gff:
+                GFF.write([record], args.gff)
+            record.description = ""
+            if args.fasta:
+                SeqIO.write([record], args.fasta, 'fasta')
+
+    return org_data
 
 if __name__ == '__main__':
-    json
     parser = argparse.ArgumentParser(description='Sample script to add an attribute to a feature via web services')
-    parser.add_argument('apollo', help='Complete Apollo URL')
-    parser.add_argument('username', help='WA Username')
-    parser.add_argument('password', help='WA Password')
-
-    parser.add_argument('commonName', nargs='+', help='Sequence Unique Names')
-
+    WAAuth(parser)
+    CnOrGuess(parser)
     parser.add_argument('--gff', type=argparse.FileType('w'))
     parser.add_argument('--fasta', type=argparse.FileType('w'))
+    parser.add_argument('--json', type=argparse.FileType('w'))
 
     args = parser.parse_args()
 
     wa = WebApolloInstance(args.apollo, args.username, args.password)
 
-    data = StringIO.StringIO(wa.io.write(
-        exportType='GFF3',
-        seqType='genomic',
-        exportAllSequences=False,
-        exportGff3Fasta=True,
-        output="text",
-        exportFormat="text",
-        # TODO: CPT specific convention!!!!!!!!
-        organism=args.commonName,
-        sequences=args.commonName
-    ))
-    data.seek(0)
+    org_cn_list, seqs = GuessCn(args, wa)
 
-    for record in GFF.parse(data):
-        record.annotations = {}
-        GFF.write([record], args.gff)
-        record.description = ""
-        SeqIO.write([record], args.fasta, 'fasta')
-        sys.exit()
+    org_data = []
+    for org_cn in org_cn_list:
+        indiv_org_data = export(org_cn, seqs)
+        org_data.append(indiv_org_data)
+    args.json.write(json.dumps(org_data, indent=2))