packages feed

BlastHTTP 0.0.1 → 1.0.0

raw patch · 2 files changed

+17/−17 lines, 2 files

Files

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