{"action":"created","issue":{"url":"https://api.github.com/repos/hammerlab/pyensembl/issues/99","labels_url":"https://api.github.com/repos/hammerlab/pyensembl/issues/99/labels{/name}","comments_url":"https://api.github.com/repos/hammerlab/pyensembl/issues/99/comments","events_url":"https://api.github.com/repos/hammerlab/pyensembl/issues/99/events","html_url":"https://github.com/hammerlab/pyensembl/pull/99","id":95338156,"number":99,"title":"Handle arbitrary GTFs and FASTA files, both local and remote","user":{"login":"tavinathanson","id":322932,"avatar_url":"https://avatars.githubusercontent.com/u/322932?v=3","gravatar_id":"","url":"https://api.github.com/users/tavinathanson","html_url":"https://github.com/tavinathanson","followers_url":"https://api.github.com/users/tavinathanson/followers","following_url":"https://api.github.com/users/tavinathanson/following{/other_user}","gists_url":"https://api.github.com/users/tavinathanson/gists{/gist_id}","starred_url":"https://api.github.com/users/tavinathanson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tavinathanson/subscriptions","organizations_url":"https://api.github.com/users/tavinathanson/orgs","repos_url":"https://api.github.com/users/tavinathanson/repos","events_url":"https://api.github.com/users/tavinathanson/events{/privacy}","received_events_url":"https://api.github.com/users/tavinathanson/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"iskandr","id":48441,"avatar_url":"https://avatars.githubusercontent.com/u/48441?v=3","gravatar_id":"","url":"https://api.github.com/users/iskandr","html_url":"https://github.com/iskandr","followers_url":"https://api.github.com/users/iskandr/followers","following_url":"https://api.github.com/users/iskandr/following{/other_user}","gists_url":"https://api.github.com/users/iskandr/gists{/gist_id}","starred_url":"https://api.github.com/users/iskandr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iskandr/subscriptions","organizations_url":"https://api.github.com/users/iskandr/orgs","repos_url":"https://api.github.com/users/iskandr/repos","events_url":"https://api.github.com/users/iskandr/events{/privacy}","received_events_url":"https://api.github.com/users/iskandr/received_events","type":"User","site_admin":false},"milestone":null,"comments":3,"created_at":"2015-07-16T03:11:33Z","updated_at":"2015-07-21T20:45:38Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/hammerlab/pyensembl/pulls/99","html_url":"https://github.com/hammerlab/pyensembl/pull/99","diff_url":"https://github.com/hammerlab/pyensembl/pull/99.diff","patch_url":"https://github.com/hammerlab/pyensembl/pull/99.patch"},"body":"Summary:\r\n\r\n* New `Genome` class replaces `EnsemblRelease` class.\r\n* New `GenomeSource` class specifies URLs to GTFs and FASTAs, extracted into its own class to prevent argument overload in `Genome` and to create an easy object to pass around for generating python/console install strings (e.g. `pyensembl install --release 77` and `pyensembl install --gtf_url blah`). `EnsemblReleaseSource` extends `GenomeSource` to handle Ensembl URL creation and install strings.\r\n* `GenomeSource` accepts both local file paths and remote URLs. If the latter, datacache is bypassed.\r\n* Added logic to `gene.py`, `transcript.py`, `gtf_parsing.py` and `genome.py` to allow for missing gene names, transcript names and biotypes in GTF files. (I noticed that this can happen with UCSC GTF files from genome.ucsc.edu/cgi-bin/hgTables, such as the one included in this PR as a test.) See this commit: https://github.com/hammerlab/pyensembl/commit/a2321156ccfb7e682750e8fc555e5cb61e7e9bf0\r\n* Added one basic test for a UCSC GTF file.\r\n* Modified `shell.py` to allow for specific URLs in addition to release numbers.\r\n\r\nThis needs more testing, but I want to get the PR started in case you think the overall strategy is problematic.\r\n\r\nAlso TODO, either in this PR or a follow-up:\r\n\r\n* Error gracefully when a transcript/protein sequence is requested, yet no URL was provided.\r\n* Error gracefully when a user tries to get a gene name when the DB has no gene names (and other issues like that).\n\n<!-- Reviewable:start -->\n[<img src=\"https://reviewable.io/review_button.png\" height=40 alt=\"Review on Reviewable\"/>](https://reviewable.io/reviews/hammerlab/pyensembl/99)\n<!-- Reviewable:end -->\n"},"comment":{"url":"https://api.github.com/repos/hammerlab/pyensembl/issues/comments/123472206","html_url":"https://github.com/hammerlab/pyensembl/pull/99#issuecomment-123472206","issue_url":"https://api.github.com/repos/hammerlab/pyensembl/issues/99","id":123472206,"user":{"login":"tavinathanson","id":322932,"avatar_url":"https://avatars.githubusercontent.com/u/322932?v=3","gravatar_id":"","url":"https://api.github.com/users/tavinathanson","html_url":"https://github.com/tavinathanson","followers_url":"https://api.github.com/users/tavinathanson/followers","following_url":"https://api.github.com/users/tavinathanson/following{/other_user}","gists_url":"https://api.github.com/users/tavinathanson/gists{/gist_id}","starred_url":"https://api.github.com/users/tavinathanson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tavinathanson/subscriptions","organizations_url":"https://api.github.com/users/tavinathanson/orgs","repos_url":"https://api.github.com/users/tavinathanson/repos","events_url":"https://api.github.com/users/tavinathanson/events{/privacy}","received_events_url":"https://api.github.com/users/tavinathanson/received_events","type":"User","site_admin":false},"created_at":"2015-07-21T20:45:38Z","updated_at":"2015-07-21T20:45:38Z","body":"\"genome\" = \"genome annotation\" (GTF) + \"genome sequence\" (FASTA files) sounds reasonable for talking about these entities for the time being, even though as we've discussed \"genome\" is still confusing.\r\n\r\nMade https://github.com/hammerlab/pyensembl/issues/100 for `add-genome`"}}