Skip to content

Commit 68754a0

Browse files
authored
update gff.gtf() (#789)
* update gff.gtf() * Style fixes by Black * update testcase
1 parent 08970a1 commit 68754a0

2 files changed

Lines changed: 37 additions & 6 deletions

File tree

src/jcvi/formats/gff.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ def __init__(
9595
if len(args) != 9:
9696
args = sline.split()
9797
if strict:
98-
assert len(args) == 9, "Malformed line ({0} columns != 9): {1}".format(
99-
len(args), args
100-
)
98+
assert (
99+
len(args) == 9
100+
), f"Malformed line ({len(args)} columns != 9): {args}. Please use strict=False to skip this error."
101101
self.seqid = args[0]
102102
self.source = args[1]
103103
self.type = args[2]
@@ -2560,15 +2560,22 @@ def gtf(args):
25602560
specify "gene_id" and "transcript_id".
25612561
"""
25622562
p = OptionParser(gtf.__doc__)
2563+
p.add_argument(
2564+
"--nostrict",
2565+
default=False,
2566+
action="store_true",
2567+
help="Disable strict parsing of GFF file and/or mapping file",
2568+
)
25632569
opts, args = p.parse_args(args)
25642570

25652571
if len(args) != 1:
25662572
sys.exit(not p.print_help())
25672573

25682574
(gffile,) = args
2569-
gff = Gff(gffile)
2575+
gff = Gff(gffile, strict=not opts.nostrict)
25702576
transcript_info = AutoVivification()
25712577
for g in gff:
2578+
transcript_id = None
25722579
if g.type.endswith(("RNA", "transcript")):
25732580
if "ID" in g.attributes and "Parent" in g.attributes:
25742581
transcript_id = g.get_attr("ID")
@@ -2581,9 +2588,14 @@ def gtf(args):
25812588
gene_id = transcript_id
25822589
transcript_info[transcript_id]["gene_id"] = gene_id
25832590
transcript_info[transcript_id]["gene_type"] = g.type
2591+
g.attributes = OrderedDict(
2592+
[("gene_id", [gene_id]), ("transcript_id", [transcript_id])]
2593+
)
2594+
g.update_attributes(gtf=True, urlquote=False)
2595+
print(g)
25842596
continue
25852597

2586-
if g.type not in valid_gff_to_gtf_type.keys():
2598+
if g.type not in valid_gff_to_gtf_type:
25872599
continue
25882600

25892601
try:
@@ -2603,7 +2615,6 @@ def gtf(args):
26032615
[("gene_id", [gene_id]), ("transcript_id", [tid])]
26042616
)
26052617
g.update_attributes(gtf=True, urlquote=False)
2606-
26072618
print(g)
26082619

26092620

tests/formats/gff.py/references/sample.gtf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,41 @@
1+
Chr2 TAIR10 mRNA 1025 2810 . + . gene_id "AT2G01008"; transcript_id "AT2G01008.1";
12
Chr2 TAIR10 exon 1025 1272 . + . gene_id "AT2G01008"; transcript_id "AT2G01008.1";
23
Chr2 TAIR10 CDS 1025 1272 . + 0 gene_id "AT2G01008"; transcript_id "AT2G01008.1";
34
Chr2 TAIR10 exon 1458 1510 . + . gene_id "AT2G01008"; transcript_id "AT2G01008.1";
45
Chr2 TAIR10 CDS 1458 1510 . + 1 gene_id "AT2G01008"; transcript_id "AT2G01008.1";
56
Chr2 TAIR10 exon 1873 2810 . + . gene_id "AT2G01008"; transcript_id "AT2G01008.1";
67
Chr2 TAIR10 CDS 1873 2111 . + 2 gene_id "AT2G01008"; transcript_id "AT2G01008.1";
78
Chr2 TAIR10 3UTR 2112 2810 . + . gene_id "AT2G01008"; transcript_id "AT2G01008.1";
9+
Chr2 TAIR10 rRNA 3706 5513 . + . gene_id "AT2G01010"; transcript_id "AT2G01010.1";
810
Chr2 TAIR10 exon 3706 5513 . + . gene_id "AT2G01010"; transcript_id "AT2G01010.1";
11+
Chr2 TAIR10 rRNA 5782 5945 . + . gene_id "AT2G01020"; transcript_id "AT2G01020.1";
912
Chr2 TAIR10 exon 5782 5945 . + . gene_id "AT2G01020"; transcript_id "AT2G01020.1";
13+
Chr2 TAIR10 mRNA 6571 6672 . + . gene_id "AT2G01021"; transcript_id "AT2G01021.1";
1014
Chr2 TAIR10 exon 6571 6672 . + . gene_id "AT2G01021"; transcript_id "AT2G01021.1";
1115
Chr2 TAIR10 CDS 6571 6672 . + 0 gene_id "AT2G01021"; transcript_id "AT2G01021.1";
16+
Chr2 TAIR10 mRNA 10478 12861 . - . gene_id "AT2G01022"; transcript_id "AT2G01022.1";
1217
Chr2 TAIR10 exon 10478 12861 . - . gene_id "AT2G01022"; transcript_id "AT2G01022.1";
18+
Chr2 TAIR10 mRNA 9648 9767 . - . gene_id "AT2G01023"; transcript_id "AT2G01023.1";
1319
Chr2 TAIR10 CDS 9648 9767 . - 0 gene_id "AT2G01023"; transcript_id "AT2G01023.1";
1420
Chr2 TAIR10 exon 9648 9767 . - . gene_id "AT2G01023"; transcript_id "AT2G01023.1";
21+
Chr2 TAIR10 mRNA 14395 16377 . - . gene_id "AT2G01024"; transcript_id "AT2G01024.1";
1522
Chr2 TAIR10 exon 14395 16377 . - . gene_id "AT2G01024"; transcript_id "AT2G01024.1";
23+
Chr2 TAIR10 mRNA 17624 22540 . - . gene_id "AT2G01026"; transcript_id "AT2G01026.1";
1624
Chr2 TAIR10 exon 17624 22540 . - . gene_id "AT2G01026"; transcript_id "AT2G01026.1";
25+
Chr2 TAIR10 mRNA 23971 26923 . - . gene_id "AT2G01028"; transcript_id "AT2G01028.1";
1726
Chr2 TAIR10 exon 23971 26923 . - . gene_id "AT2G01028"; transcript_id "AT2G01028.1";
27+
Chr2 TAIR10 mRNA 28465 38652 . + . gene_id "AT2G01029"; transcript_id "AT2G01029.1";
1828
Chr2 TAIR10 exon 28465 38652 . + . gene_id "AT2G01029"; transcript_id "AT2G01029.1";
29+
Chr2 TAIR10 mRNA 39519 40358 . - . gene_id "AT2G01031"; transcript_id "AT2G01031.1";
1930
Chr2 TAIR10 exon 39867 40358 . - . gene_id "AT2G01031"; transcript_id "AT2G01031.1";
2031
Chr2 TAIR10 exon 39519 39776 . - . gene_id "AT2G01031"; transcript_id "AT2G01031.1";
32+
Chr2 TAIR10 mRNA 43427 48350 . - . gene_id "AT2G01034"; transcript_id "AT2G01034.1";
2133
Chr2 TAIR10 exon 43427 48350 . - . gene_id "AT2G01034"; transcript_id "AT2G01034.1";
34+
Chr2 TAIR10 mRNA 58705 64872 . - . gene_id "AT2G01037"; transcript_id "AT2G01037.1";
2235
Chr2 TAIR10 exon 58705 64872 . - . gene_id "AT2G01037"; transcript_id "AT2G01037.1";
36+
Chr2 TAIR10 mRNA 65436 67139 . - . gene_id "AT2G01040"; transcript_id "AT2G01040.1";
2337
Chr2 TAIR10 exon 65436 67139 . - . gene_id "AT2G01040"; transcript_id "AT2G01040.1";
38+
Chr2 TAIR10 mRNA 81437 83290 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.1";
2439
Chr2 TAIR10 exon 81437 81512 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.1";
2540
Chr2 TAIR10 5UTR 81437 81512 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.1";
2641
Chr2 TAIR10 exon 81737 81800 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.1";
@@ -29,6 +44,7 @@ Chr2 TAIR10 exon 82220 83290 . + . gene_id "AT2G01100"; transcript_id "AT2G01100
2944
Chr2 TAIR10 5UTR 82220 82244 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.1";
3045
Chr2 TAIR10 CDS 82245 82988 . + 0 gene_id "AT2G01100"; transcript_id "AT2G01100.1";
3146
Chr2 TAIR10 3UTR 82989 83290 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.1";
47+
Chr2 TAIR10 mRNA 81436 83217 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.2";
3248
Chr2 TAIR10 exon 81436 81512 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.2";
3349
Chr2 TAIR10 5UTR 81436 81512 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.2";
3450
Chr2 TAIR10 exon 81737 81800 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.2";
@@ -37,12 +53,14 @@ Chr2 TAIR10 exon 82186 83217 . + . gene_id "AT2G01100"; transcript_id "AT2G01100
3753
Chr2 TAIR10 5UTR 82186 82244 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.2";
3854
Chr2 TAIR10 CDS 82245 82988 . + 0 gene_id "AT2G01100"; transcript_id "AT2G01100.2";
3955
Chr2 TAIR10 3UTR 82989 83217 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.2";
56+
Chr2 TAIR10 mRNA 81440 83217 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.3";
4057
Chr2 TAIR10 exon 81440 81512 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.3";
4158
Chr2 TAIR10 5UTR 81440 81512 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.3";
4259
Chr2 TAIR10 exon 81737 83217 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.3";
4360
Chr2 TAIR10 5UTR 81737 82244 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.3";
4461
Chr2 TAIR10 CDS 82245 82988 . + 0 gene_id "AT2G01100"; transcript_id "AT2G01100.3";
4562
Chr2 TAIR10 3UTR 82989 83217 . + . gene_id "AT2G01100"; transcript_id "AT2G01100.3";
63+
Chr2 TAIR10 mRNA 83260 85229 . - . gene_id "AT2G01110"; transcript_id "AT2G01110.1";
4664
Chr2 TAIR10 5UTR 85089 85229 . - . gene_id "AT2G01110"; transcript_id "AT2G01110.1";
4765
Chr2 TAIR10 CDS 84836 85088 . - 0 gene_id "AT2G01110"; transcript_id "AT2G01110.1";
4866
Chr2 TAIR10 exon 84836 85229 . - . gene_id "AT2G01110"; transcript_id "AT2G01110.1";
@@ -53,6 +71,7 @@ Chr2 TAIR10 exon 84085 84375 . - . gene_id "AT2G01110"; transcript_id "AT2G01110
5371
Chr2 TAIR10 CDS 83786 83995 . - 0 gene_id "AT2G01110"; transcript_id "AT2G01110.1";
5472
Chr2 TAIR10 3UTR 83260 83785 . - . gene_id "AT2G01110"; transcript_id "AT2G01110.1";
5573
Chr2 TAIR10 exon 83260 83995 . - . gene_id "AT2G01110"; transcript_id "AT2G01110.1";
74+
Chr2 TAIR10 mRNA 85401 88186 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.1";
5675
Chr2 TAIR10 exon 85401 85553 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.1";
5776
Chr2 TAIR10 5UTR 85401 85443 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.1";
5877
Chr2 TAIR10 CDS 85444 85553 . + 0 gene_id "AT2G01120"; transcript_id "AT2G01120.1";
@@ -87,6 +106,7 @@ Chr2 TAIR10 CDS 87761 87904 . + 0 gene_id "AT2G01120"; transcript_id "AT2G01120.
87106
Chr2 TAIR10 exon 87998 88186 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.1";
88107
Chr2 TAIR10 CDS 87998 88027 . + 0 gene_id "AT2G01120"; transcript_id "AT2G01120.1";
89108
Chr2 TAIR10 3UTR 88028 88186 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.1";
109+
Chr2 TAIR10 mRNA 85416 88181 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.2";
90110
Chr2 TAIR10 exon 85416 85553 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.2";
91111
Chr2 TAIR10 5UTR 85416 85443 . + . gene_id "AT2G01120"; transcript_id "AT2G01120.2";
92112
Chr2 TAIR10 CDS 85444 85553 . + 0 gene_id "AT2G01120"; transcript_id "AT2G01120.2";

0 commit comments

Comments
 (0)