Source code for samsifter.models.filter

# -*- coding: utf-8 -*-
"""
Abstraction of filters and other tools usable in POSIX pipelines.

.. moduleauthor:: Florian Aldehoff <faldehoff@student.uni-tuebingen.de>
"""

""" Qt4 libraries """
from PyQt4.QtGui import QStandardItem, QIcon

""" custom libraries """
from samsifter.gui.widgets import FilterWidget
from samsifter.resources import resources  #@UnusedImport


SUPPORTED_FORMATS = ('SAM', 'BAM', 'any', 'as_input')
SUPPORTED_SORTINGS = ('unsorted', 'queryname', 'coordinate', 'any', 'as_input')
SUPPORTED_COMPRESSIONS = ('uncompressed', 'gzip', 'any', 'as_input')


[docs]class FilterItem(QStandardItem): """Representation of filter tool in item-based views. This class can abstract any tool that takes line-based input from STDIN, logs messages to STDERR and writes output to STDOUT. It is used to represent this tool in item-based views by means of an icon and descriptive text. Each item has a list of parameters as well as input and output requirements in terms file format, sort order and compression. """ # icon paths correspond to resource entries ICON_ANALYZER = ":/x-office-spreadsheet.png" ICON_CONVERTER = ":/applications-other.png" ICON_FILTER = ":/view-filter.png" ICON_SORTER = ":/view-sort-ascending.png" def __init__(self, text=None, desc=None, icon=ICON_FILTER): """Initialize new instance of a FilterItem. By default the new filter item both accepts and outputs only uncompressed SAM files ordered by queryname. Parameters ---------- text : str Short label for tool, should not exceed one line. desc : str Longer description of tool, should explain basic functionality. icon : str Path to icon resource, defaults to filter icon. """ if icon is None: super(FilterItem, self).__init__(text) else: super(FilterItem, self).__init__(QIcon(icon), text) self.desc = desc self.icon_path = icon self.command = "tester" self.input_format = 'SAM' self.input_sorting = 'queryname' self.input_compression = 'uncompressed' self.output_format = 'SAM' self.output_sorting = 'queryname' self.output_compression = 'uncompressed' self.parameters = [] self.valid = True self.setEditable(False)
[docs] def clone(self): """Creates new instance with identical settings. Returns ------- FilterItem Exact clone of this filter item. """ clone = FilterItem(self.text(), self.desc, self.icon_path) clone.set_command(self.command) clone.set_input_format(self.input_format) clone.set_input_sorting(self.input_sorting) clone.set_input_compression(self.input_compression) clone.set_output_format(self.output_format) clone.set_output_sorting(self.output_sorting) clone.set_output_compression(self.output_compression) for param in self.parameters: clone.add_parameter(param.clone()) return clone
[docs] def commandline(self, basenames=False): """Prints full bash command line for filter with all parameters. Parameters ---------- basenames : bool Shorten file paths to filename only, defaults to False. Returns ------- str Command to execute filter with all parameters. """ cl = self.command for param in self.parameters: if param.is_active() or param.is_required(): cl += " " + param.cli(basenames) return cl
[docs] def make_widget(self): """Creates a FilterWidget visualizing all parameters of this filter. Returns ------- FilterWidget Qt4 widget visualizing all parameters of this filter. """ return FilterWidget(self)
def __str__(self): return self.text() def __repr__(self): rep = "\n%s" % self.text() rep += "\n- command:\t\t%s" % self.command rep += "\n- description:\t%s" % self.desc for param in self.parameters: rep += repr(param) return rep """ Getters & Setters """
[docs] def add_parameter(self, parameter): """Append parameter to list of parameters. Parameters ---------- parameter : FilterParameter Parameter to be added to this filter. """ self.parameters.append(parameter)
[docs] def get_parameters(self): return self.parameters
[docs] def set_command(self, command): self.command = command
[docs] def get_description(self): return self.desc
[docs] def set_description(self, desc): self.desc = desc
[docs] def get_icon_path(self): return self.icon_path
[docs] def set_icon_path(self, icon_path): self.icon_path = icon_path
[docs] def set_input_format(self, fileformat): if fileformat in SUPPORTED_FORMATS: self.input_format = fileformat
[docs] def get_input_format(self): return self.input_format
[docs] def set_output_format(self, fileformat): if fileformat in SUPPORTED_FORMATS: self.output_format = fileformat
[docs] def get_output_format(self): return self.output_format
[docs] def set_input_sorting(self, sorting): if sorting in SUPPORTED_SORTINGS: self.input_sorting = sorting
[docs] def get_input_sorting(self): return self.input_sorting
[docs] def set_output_sorting(self, sorting): if sorting in SUPPORTED_SORTINGS: self.output_sorting = sorting
[docs] def get_output_sorting(self): return self.output_sorting
[docs] def set_input_compression(self, compression): if compression in SUPPORTED_COMPRESSIONS: self.input_compression = compression
[docs] def get_input_compression(self): return self.input_compression
[docs] def set_output_compression(self, compression): if compression in SUPPORTED_COMPRESSIONS: self.output_compression = compression
[docs] def get_output_compression(self): return self.output_compression
[docs] def is_valid(self): return self.valid
[docs] def set_valid(self, boolean): self.valid = boolean