class HmpSitesResult(ToolResult):  # pylint: disable=too-few-public-methods
    """HMP Sites tool's result type."""

    # Lists of values for each example microbiome comparison; may not be empty
    skin = mongoDB.ListField(mongoDB.FloatField(), required=True)
    oral = mongoDB.ListField(mongoDB.FloatField(), required=True)
    urogenital_tract = mongoDB.ListField(mongoDB.FloatField(), required=True)
    airways = mongoDB.ListField(mongoDB.FloatField(), required=True)
    gastrointestinal = mongoDB.ListField(mongoDB.FloatField(), required=True)

    def clean(self):
        """Check that all vals are in range [0, 1] if not then error."""
        def validate(*vals):
            """Confirm values are in range [0,1], if they exist."""
            for value_list in vals:
                for value in value_list:
                    if value is not None and (value < 0 or value > 1):
                        return False
            return True

        if not validate(self.skin, self.oral, self.urogenital_tract,
                        self.airways, self.gastrointestinal):
            msg = 'HMPSitesResult values in bad range'
            raise ValidationError(msg)

    @staticmethod
    def site_names():
        """Return the names of the body sites."""
        return [
            'skin', 'oral', 'urogenital_tract', 'airways', 'gastrointestinal'
        ]
Esempio n. 2
0
class AlphaDiversityDatum(mdb.EmbeddedDocument):
    """AlphaDiv datum type."""

    metrics = mdb.ListField(mdb.StringField())
    category_value = mdb.StringField(required=True)
    # metric -> distribution
    by_metric = mdb.MapField(field=mdb.ListField(mdb.FloatField()))
Esempio n. 3
0
class AlphaDiversityResult(mdb.EmbeddedDocument):
    """Embedded results for alpha diversity."""

    # Categories dict has form: {<category_name>: [<category_value>, ...]}
    categories = mdb.MapField(field=mdb.ListField(mdb.StringField()),
                              required=True)
    tool_names = mdb.ListField(mdb.StringField())
    by_tool = mdb.MapField(field=EmDoc(AlphaDiversityTool), required=True)
Esempio n. 4
0
class HMPResult(mdb.EmbeddedDocument):      # pylint: disable=too-few-public-methods
    """HMP document type."""

    categories = mdb.MapField(field=StringList, required=True)
    sites = mdb.ListField(mdb.StringField(), required=True)
    data = mdb.MapField(field=EmDocList(HMPDatum), required=True)

    def clean(self):
        """Ensure integrity of result content."""
        for category, values in self.categories.items():
            if category not in self.data:
                msg = f'Category \'{category}\' is not present in \'data\'!'
                raise ValidationError(msg)
            values_present = [datum.name for datum in self.data[category]]
            for value in values:
                if value not in values_present:
                    msg = f'Value \'{value}\' is not present in \'data\'!'
                    raise ValidationError(msg)

        for category_name, category_data in self.data.items():
            if len(category_data) != len(self.categories[category_name]):
                msg = (f'Category data for {category_name} does not match size of '
                       f'category values ({len(self.categories[category_name])})!')
                raise ValidationError(msg)
            for datum in category_data:
                if len(datum.data) != len(self.sites):
                    msg = (f'Datum <{datum.name}> of size {len(datum.data)} '
                           f'does not match size of sites ({len(self.sites)})!')
                    raise ValidationError(msg)
Esempio n. 5
0
class SampleSimilarityResult(mdb.EmbeddedDocument):     # pylint: disable=too-few-public-methods
    """Sample Similarity document type."""

    # Categories dict is of the form: {<category_name>: [<category_value>, ...]}
    categories = mdb.MapField(field=StringList, required=True)
    # Tools dict is of the form: {<tool_name>: <ToolDocument>}
    tools = mdb.MapField(field=EmbeddedDoc(ToolDocument), required=True)
    data_records = mdb.ListField(mdb.DictField(), required=True)

    def clean(self):
        """Ensure that `data_records` contain valid records."""
        category_names = self.categories.keys()
        tool_names = self.tools.keys()

        for record in self.data_records:
            for category_name in category_names:
                if category_name not in record:
                    msg = 'Record must have all categories.'
                    raise ValidationError(msg)
            for tool_name in tool_names:
                xname = '{}_x'.format(tool_name)
                yname = '{}_y'.format(tool_name)
                if (xname not in record) or (yname not in record):
                    msg = 'Record must x and y for all tools.'
                    raise ValidationError(msg)
# pylint: disable=too-few-public-methods
"""Average Genome Size display models."""

from app.extensions import mongoDB as mdb
from app.display_modules.shared_models import DistributionResult

# Define aliases
EmbeddedDoc = mdb.EmbeddedDocumentField  # pylint: disable=invalid-name
StringList = mdb.ListField(mdb.StringField())  # pylint: disable=invalid-name


class AGSResult(mdb.EmbeddedDocument):
    """AGS document type."""

    # Categories dict has form: {<category_name>: [<category_value>, ...]}
    categories = mdb.MapField(field=StringList, required=True)
    # Distribution dict has form: {<category_name>: {<category_value>: <dist>}}
    distributions = mdb.MapField(
        field=mdb.MapField(field=EmbeddedDoc(DistributionResult)),
        required=True)
Esempio n. 7
0
class HMPDatum(mdb.EmbeddedDocument):       # pylint: disable=too-few-public-methods
    """HMP datum type."""

    name = mdb.StringField(required=True)
    data = mdb.ListField(mdb.ListField(mdb.FloatField()), required=True)
Esempio n. 8
0
class ToolCategoryDocument(mdb.EmbeddedDocument):  # pylint: disable=too-few-public-methods
    """The base data type that generates a particular plot."""

    pval_histogram = mdb.ListField(EmbeddedDoc(XYZPoint))
    scatter_plot = mdb.ListField(EmbeddedDoc(XYZPoint), required=True)
Esempio n. 9
0
class AlphaDiversityTool(mdb.EmbeddedDocument):
    """Store a map of rank -> AlphaDiversityRank."""

    taxa_ranks = mdb.ListField(mdb.StringField())
    by_taxa_rank = mdb.MapField(field=EmDoc(AlphaDiversityRank))