Skip to content
This repository has been archived by the owner on Sep 12, 2020. It is now read-only.

Commit

Permalink
docs
Browse files Browse the repository at this point in the history
  • Loading branch information
jvrana committed Sep 9, 2018
1 parent c32aac0 commit adec817
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 6 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -36,7 +36,7 @@ pip install pyblast

## Status

In alpha, but let me know if you are interested in this repo!
In alpha, but let me know if you are interested in this repo.

## Usage

Expand Down
4 changes: 3 additions & 1 deletion pyblast/blast.py
Expand Up @@ -21,6 +21,7 @@
from marshmallow import ValidationError
from copy import copy


class Blast(object):
"""
A Blast initializer for running blast searches against subjects contained in a directory. Sequences
Expand Down Expand Up @@ -278,14 +279,15 @@ def use_test_data(cls):
def makedb(self):
super(Aligner, self).makedb()


class JSONBlast(Aligner):
"""Object that runs blast starting from JSON inputs and outputs"""

def __init__(self, subject_json, query_json, preloaded=False, span_origin=False, **config):
"""
Initialize JSONBlast
:param subject_json: subject sequences as serialized json
:param subject_json: subject sequences as serialized json. Schema may be found in :class:`pyblast.schema.SequenceSchema`
:type subject_json: list of dict, mapping, or Object
:param query_json: query sequence as serialized json
:type query_json: dict, mapping, or Object
Expand Down
2 changes: 2 additions & 0 deletions pyblast/results.py
Expand Up @@ -5,7 +5,9 @@
from pyblast.schema import QuerySchema, SubjectSchema, AlignmentSchema, AlignmentMetaSchema
from pyblast.exceptions import PyBlastException


def str_to_f_to_i(v):
""""""
try:
v = float(v)
except ValueError:
Expand Down
80 changes: 77 additions & 3 deletions pyblast/schema.py
Expand Up @@ -9,6 +9,19 @@


class SequenceSchema(Schema):
"""
Sequence JSON schema.
.. code-block::
size = fields.Method("get_size")
bases = fields.String(required=True, data_key='sequence')
circular = fields.Boolean(required=True)
name = fields.String(required=True)
id = fields.String(default=lambda: str(uuid4()))
description = fields.String(default="", allow_none=True)
features = fields.Nested("FeatureSchema", many=True, default=list())
"""
size = fields.Method("get_size")
bases = fields.String(required=True, data_key='sequence')
circular = fields.Boolean(required=True)
Expand Down Expand Up @@ -47,6 +60,17 @@ def validate_sequence(self, bases):


class FeatureSchema(Schema):
"""
.. code-block::
name = fields.String(required=True)
type = fields.String(required=True)
id = fields.String(missing=lambda: str(uuid4()))
start = fields.Int(required=True)
end = fields.Int(required=True)
strand = fields.Int(required=True)
"""
name = fields.String(required=True)
type = fields.String(required=True)
id = fields.String(missing=lambda: str(uuid4()))
Expand All @@ -65,7 +89,14 @@ def clean_data(self, data):


class SequenceSchemaMixIn:
"""Sequence Schema methods common to QuerySchema and SubjectSchema"""
"""Sequence Schema methods common to QuerySchema and SubjectSchema.
.. code-block::
name = fields.Method(serialize="get_name", deserialize="get_val", allow_none=True, )
circular = fields.Method(serialize="get_circular", deserialize="get_val", allow_none=True, )
"""
# seq = fields.Method(serialize="get_sequence", deserialize="return_value", allow_none=True)
name = fields.Method(serialize="get_name", deserialize="get_val", allow_none=True, )
circular = fields.Method(serialize="get_circular", deserialize="get_val", allow_none=True, )
Expand Down Expand Up @@ -107,6 +138,16 @@ def get_sequence_id(self, obj):


class QuerySchema(Schema, SequenceSchemaMixIn):
"""
.. code-block::
sequence_id = fields.Method("get_sequence_id", deserialize="load_sequence_id", data_key='query acc.', required=True)
start = fields.Integer(data_key="q. start", required=True)
end = fields.Integer(data_key="q. end", required=True)
length = fields.Integer(data_key='query length', required=True)
bases = fields.String(data_key='query seq', required=True)
strand = fields.String(missing="plus", default="plus")
"""
# acc = fields.String(data_key="query acc.", required=True)
sequence_id = fields.Method("get_sequence_id", deserialize="load_sequence_id", data_key='query acc.', required=True)
start = fields.Integer(data_key="q. start", required=True)
Expand All @@ -117,6 +158,17 @@ class QuerySchema(Schema, SequenceSchemaMixIn):


class SubjectSchema(Schema, SequenceSchemaMixIn):
"""
.. code-block::
sequence_id = fields.Method("get_sequence_id", deserialize="load_sequence_id", data_key='subject acc.', required=True)
# acc = fields.String(data_key="subject acc.", required=True)
start = fields.Integer(data_key="s. start", required=True)
end = fields.Integer(data_key="s. end", required=True)
length = fields.Integer(data_key='subject length', required=True)
bases = fields.String(data_key='subject seq', required=True)
strand = fields.String(data_key='subject strand', required=True)
"""
sequence_id = fields.Method("get_sequence_id", deserialize="load_sequence_id", data_key='subject acc.', required=True)
# acc = fields.String(data_key="subject acc.", required=True)
start = fields.Integer(data_key="s. start", required=True)
Expand All @@ -135,7 +187,23 @@ def strand_validation(self, value):


class AlignmentMetaSchema(Schema):
"""Schema for alignment score metadata for an alignment"""
"""
Schema for alignment score metadata for an alignment
.. code-block::
score = fields.Float(required=True)
evalue = fields.Float(required=True)
bit_score = fields.Integer(data_key='bit score', required=True)
identical = fields.Integer(required=True)
gaps_open = fields.Integer(data_key="gap opens", required=True)
gaps = fields.Integer(required=True)
alignment_length = fields.Integer(data_key='alignment length', required=True)
alignment = fields.Nested("AlignmentSchema")
span_origin = fields.Boolean(default=False)
"""
score = fields.Float(required=True)
evalue = fields.Float(required=True)
bit_score = fields.Integer(data_key='bit score', required=True)
Expand All @@ -149,7 +217,13 @@ class AlignmentMetaSchema(Schema):


class AlignmentSchema(Schema):
"""Schema for a BLAST alignment"""
"""Schema for a BLAST alignment
.. code-block::
query = fields.Nested('QuerySchema', )
subject = fields.Nested('SubjectSchema', )
meta = fields.Nested(AlignmentMetaSchema, exclude=("alignment",))
"""
query = fields.Nested('QuerySchema', )
subject = fields.Nested('SubjectSchema', )
meta = fields.Nested(AlignmentMetaSchema, exclude=("alignment",))
Expand Down
Binary file modified tests/data/blast_results/db.nin
Binary file not shown.
2 changes: 1 addition & 1 deletion tests/data/blast_results/results.out.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions tests/test_blast/test_BLAST.py
Expand Up @@ -33,6 +33,7 @@ def test_blasn(b):
b.makedb()
b.blastn()


def test_parse_results(b):
b.makedb()
b.blastn()
Expand Down

0 comments on commit adec817

Please sign in to comment.