interminebio

Package interminebio |
[hide private]
[frames] | no frames]

# Source Code for Package interminebio

      1  from intermine import query
      2  from interminebio.iterators import *
      3
      4 -class SequenceQuery(object):
      5      """
      6      Class for querying InterMine Webservices for Sequence based data
      7      ================================================================
      8
      9      This module allows you to construct queries that retrieve data about sequences and
     10      sequence features in biologically relevant formats.
     11
     12      The currently supported formats are UCSC-BED, GFF3, and FASTA.
     13
     14      """
     15
     16 -    def __init__(self, service, root=None):
     17          """
     18          Constructor
     19          ===========
     20
     21          @param service: The service to connect to.
     22          @type service: intermine.webservice.Service
     23
     24          @param root: The root class of the query
     25          @type root: str
     26
     27          """
     28          self.service = service
     29          self.query = query.Query(service.model, service, root=root)
     30
     31          # Set up delegations
     32          self.add_constraint = self.query.add_constraint
     33          self.filter = self.where
     34
     35          self.to_xml = self.query.to_xml
     36
     37          self.get_logic = self.query.get_logic
     38          self.set_logic = self.query.set_logic
     39
     40          self.select_sequence = self.set_sequence
     41          self.select_sequences = self.add_sequence_feature
     42          self.add_sequence_features = self.add_sequence_feature
     43
     44 -    def add_sequence_feature(self, *features):
     45          """
     46          Add an arbitrarily long list of sequence features to the query.
     47          ===============================================================
     48
     49          Fasta, GFF3 and BED queries all can read information from SequenceFeatures.
     50          For Fasta you are advised to use the set_sequence method instead,
     51          as unlike the GFF3 and BED services, the Fasta service can only handle
     52          queries with one output column.
     53          """
     54          for f in features:
     55              p = self.query.column(f)._path
     56              if p.is_attribute() or not p.get_class().isa("SequenceFeature"):
     57                  raise ValueError("%s is not a Sequence Feature" % (f))
     58              self.query.add_view(str(p) + ".id")
     59
     60          return self
     61
     62 -    def where(self, *args, **kwargs):
     63          self.query.where(*args, **kwargs)
     64          return self
     65
     66 -    def set_sequence(self, f):
     67          """
     68          Set the sequence column to retrieve.
     69          ====================================
     70
     71          Add a sequence holding object to the query. It can be a SequenceFeature, Protein
     72          or Sequence object.
     73
     74          Fasta queries, which read sequences rather than sequence features,
     75          currently only permit one output column.
     76          """
     77          self.query.views = []
     78          p = self.query.column(f)._path
     79          if p.is_attribute() or not (p.get_class().isa("SequenceFeature") or
     80                  p.get_class().isa("Protein") or
     81                  p.get_class().isa("Sequence")):
     82              raise ValueError("%s has no sequence information" % (f))
     83          self.query.add_view(str(p) + ".id")
     84
     85          return self
     86
     87 -    def bed(self, ucsc_compatible=True):
     88          """
     89          Get results as BED
     90          ==================
     91
     92          Return a BedIterator object, which stringifies to the BED results,
     93          and works as an iterator over the lines. After iteration the header
     94          information is accessible with the iter.header() method
     95          """
     96          return BedIterator(self.service, self.query, ucsc_compatible)
     97
     98 -    def fasta(self):
     99          """
    100          Get results as FASTA
    101          ====================
    102
    103          Return a FastaIterator object, which stringifies to the Fasta results,
    104          and works as an iterator over the records (not the lines).
    105          """
    106          return FastaIterator(self.service, self.query)
    107
    108 -    def gff3(self):
    109          """
    110          Get results as GFF3
    111          ===================
    112
    113          Return a GFF3Iterator object, which stringifies to the GFF3 results,
    114          and works as an iterator over the lines. After iteration the header
    115          information is accessible with the iter.header() method
    116          """
    117          return GFF3Iterator(self.service, self.query)
    118