BlastHTTP 0.0.1 → 1.0.0
raw patch · 2 files changed
+17/−17 lines, 2 files
Files
- BlastHTTP.cabal +3/−3
- src/Bio/BlastHTTP.hs +14/−14
BlastHTTP.cabal view
@@ -7,7 +7,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.0.1+version: 1.0.0 synopsis: Libary to interface with the NCBI blast REST interface description: Searches for a provided nucleotide or protein sequence with the NCBI Blast REST service and returns a blast result in xml format as BlastResult datatype. .@@ -33,8 +33,8 @@ source-repository this type: darcs- location: https://github.com/eggzilla/BlastHTTP/tree/v0.0.1- tag: v0.0.1+ location: https://github.com/eggzilla/BlastHTTP/tree/v1.0.0+ tag: v1.0.0 library -- Modules exported by the library.
src/Bio/BlastHTTP.hs view
@@ -38,7 +38,8 @@ { program :: Maybe String , database :: Maybe String , querySequence :: Maybe SeqData- , entrezQuery :: Maybe String }+ , optionalArguments :: Maybe String + } deriving (Show, Eq) -- | Parse HTML results into Xml Tree datastructure@@ -54,16 +55,16 @@ -- | Send query and parse RID from retrieved HTML startSession :: String -> String -> String -> Maybe String -> IO String-startSession program database querySequence entrezQuery = do+startSession program database querySequence optionalArguments = do requestXml <- withSocketsDo- $ sendEntrezQuery program database querySequence entrezQuery+ $ sendQuery program database querySequence optionalArguments let requestXMLString = L8.unpack requestXml CM.liftM head (runX $ parseHTML requestXMLString //> atId "rid" >>> getAttrValue "value") --- | Send query with or without Entrez query and return response HTML-sendEntrezQuery :: String -> String -> String -> Maybe String -> IO L8.ByteString-sendEntrezQuery program database querySequence entrezQuery - | isJust entrezQuery = simpleHttp ("http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Put&PROGRAM=" ++ program ++ "&DATABASE=" ++ database ++ "&QUERY=" ++ querySequence ++ "&ENTREZ_QUERY=" ++ fromJust entrezQuery)+-- | Send query with or without optional arguments and return response HTML+sendQuery :: String -> String -> String -> Maybe String -> IO L8.ByteString+sendQuery program database querySequence optionalArguments+ | isJust optionalArguments = simpleHttp ("http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Put&PROGRAM=" ++ program ++ "&DATABASE=" ++ database ++ fromJust optionalArguments ++ "&QUERY=" ++ querySequence) | otherwise = simpleHttp ("http://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Put&PROGRAM=" ++ program ++ "&DATABASE=" ++ database ++ "&QUERY=" ++ querySequence) -- | Retrieve session status with RID@@ -102,28 +103,27 @@ return (Left exceptionMessage) | otherwise = checkSessionStatus rid counter - -- | Sends Query and retrieves result on reaching READY status, will return exeption message if no query sequence has been provided performQuery :: String -> String -> Maybe SeqData -> Maybe String -> Int -> IO (Either String BlastResult) -performQuery program database querySequenceMaybe entrezQueryMaybe counter+performQuery program database querySequenceMaybe optionalArgumentMaybe counter | isJust querySequenceMaybe = do - rid <- startSession program database (L8.unpack (unSD (fromJust querySequenceMaybe))) entrezQueryMaybe+ rid <- startSession program database (L8.unpack (unSD (fromJust querySequenceMaybe))) optionalArgumentMaybe checkSessionStatus rid counter | otherwise = do let exceptionMessage = "Error - no query sequence provided" return (Left exceptionMessage) -- | Retrieve Blast results in BlastXML format from the NCBI REST Blast interface--- The querySequence has to be provided, all other parameters are optional. It is possible to provide an ENTREZ query string---blastHTTP :: Maybe String -> Maybe String -> Maybe SeqData -> Maybe String -> IO (Either String BlastResult)+-- The querySequence has to be provided, all other parameters are optional and can be set to Nothing+-- optionalArguments is attached to the query as is .e.g: "&ALIGNMENTS=250" blastHTTP :: BlastHTTPQuery -> IO (Either String BlastResult)-blastHTTP (BlastHTTPQuery program database querySequence entrezQuery) = do+blastHTTP (BlastHTTPQuery program database querySequence optionalArguments) = do let counter = 1 let defaultProgram = "blastn" let defaultDatabase = "refseq_genomic" let selectedProgram = fromMaybe defaultProgram program let selectedDatabase = fromMaybe defaultDatabase database - performQuery selectedProgram selectedDatabase querySequence entrezQuery counter+ performQuery selectedProgram selectedDatabase querySequence entrezQuery optionalArguments