packages feed

metar 0.0.2 → 0.0.3

raw patch · 4 files changed

+74/−32 lines, 4 filesdep +bytestringdep +http-clientdep +wreqdep ~deriving-compatnew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: bytestring, http-client, wreq

Dependency ranges changed: deriving-compat

API changes (from Hackage documentation)

- Data.Aviation.Metar.TAFResultT: instance (Data.Aviation.Metar.TAFResultT.TAFResultT f1 a1 ~ t) => Control.Lens.Wrapped.Rewrapped (Data.Aviation.Metar.TAFResultT.TAFResultT f2 a2) t
+ Data.Aviation.Metar.TAFResultT: instance (Data.Aviation.Metar.TAFResultT.TAFResultT f1 a1 Data.Type.Equality.~ t) => Control.Lens.Wrapped.Rewrapped (Data.Aviation.Metar.TAFResultT.TAFResultT f2 a2) t
- Data.Aviation.Metar.BOMTAFResult: bOMTAFResponse :: HasBOMTAFResponse c_abPL => Lens' c_abPL BOMTAFResponse
+ Data.Aviation.Metar.BOMTAFResult: bOMTAFResponse :: HasBOMTAFResponse c_aew3 => Lens' c_aew3 BOMTAFResponse
- Data.Aviation.Metar.BOMTAFResult: bomMETAR :: HasBOMTAFResponse c_abPL => Lens' c_abPL [String]
+ Data.Aviation.Metar.BOMTAFResult: bomMETAR :: HasBOMTAFResponse c_aew3 => Lens' c_aew3 [String]
- Data.Aviation.Metar.BOMTAFResult: bomTAF :: HasBOMTAFResponse c_abPL => Lens' c_abPL [String]
+ Data.Aviation.Metar.BOMTAFResult: bomTAF :: HasBOMTAFResponse c_aew3 => Lens' c_aew3 [String]
- Data.Aviation.Metar.BOMTAFResult: bomTitle :: HasBOMTAFResponse c_abPL => Lens' c_abPL String
+ Data.Aviation.Metar.BOMTAFResult: bomTitle :: HasBOMTAFResponse c_aew3 => Lens' c_aew3 String
- Data.Aviation.Metar.BOMTAFResult: class HasBOMTAFResponse c_abPL
+ Data.Aviation.Metar.BOMTAFResult: class HasBOMTAFResponse c_aew3
- Data.Aviation.Metar.TAFResult: _ConnErrorResult :: AsTAFResult r_aevY a_adIn => Prism' r_aevY ConnError
+ Data.Aviation.Metar.TAFResult: _ConnErrorResult :: AsTAFResult r_ahiB a_aguZ => Prism' r_ahiB ConnError
- Data.Aviation.Metar.TAFResult: _ParseErrorResult :: AsTAFResult r_aevY a_adIn => Prism' r_aevY ()
+ Data.Aviation.Metar.TAFResult: _ParseErrorResult :: AsTAFResult r_ahiB a_aguZ => Prism' r_ahiB ()
- Data.Aviation.Metar.TAFResult: _TAFResult :: AsTAFResult r_aevY a_adIn => Prism' r_aevY (TAFResult a_adIn)
+ Data.Aviation.Metar.TAFResult: _TAFResult :: AsTAFResult r_ahiB a_aguZ => Prism' r_ahiB (TAFResult a_aguZ)
- Data.Aviation.Metar.TAFResult: _TAFResultValue :: AsTAFResult r_aevY a_adIn => Prism' r_aevY a_adIn
+ Data.Aviation.Metar.TAFResult: _TAFResultValue :: AsTAFResult r_ahiB a_aguZ => Prism' r_ahiB a_aguZ
- Data.Aviation.Metar.TAFResult: class AsTAFResult r_aevY a_adIn | r_aevY -> a_adIn
+ Data.Aviation.Metar.TAFResult: class AsTAFResult r_ahiB a_aguZ | r_ahiB -> a_aguZ
- Data.Aviation.Metar.TAFResult: class HasTAFResult c_aeq0 a_adIn | c_aeq0 -> a_adIn
+ Data.Aviation.Metar.TAFResult: class HasTAFResult c_ahcc a_aguZ | c_ahcc -> a_aguZ
- Data.Aviation.Metar.TAFResult: tAFResult :: HasTAFResult c_aeq0 a_adIn => Lens' c_aeq0 (TAFResult a_adIn)
+ Data.Aviation.Metar.TAFResult: tAFResult :: HasTAFResult c_ahcc a_aguZ => Lens' c_ahcc (TAFResult a_aguZ)
- Data.Aviation.Metar.TAFResultT: TAFResultT :: (f (TAFResult a)) -> TAFResultT f a
+ Data.Aviation.Metar.TAFResultT: TAFResultT :: f (TAFResult a) -> TAFResultT f a
- Data.Aviation.Metar.TAFResultT: class HasTAFResultT c_ahBQ f_ahBf a_ahBg | c_ahBQ -> f_ahBf a_ahBg
+ Data.Aviation.Metar.TAFResultT: class HasTAFResultT c_ajCy f_ajBX a_ajBY | c_ajCy -> f_ajBX a_ajBY
- Data.Aviation.Metar.TAFResultT: tAFResultT :: HasTAFResultT c_ahBQ f_ahBf a_ahBg => Lens' c_ahBQ (TAFResultT f_ahBf a_ahBg)
+ Data.Aviation.Metar.TAFResultT: tAFResultT :: HasTAFResultT c_ajCy f_ajBX a_ajBY => Lens' c_ajCy (TAFResultT f_ajBX a_ajBY)

Files

LICENCE view
@@ -1,5 +1,4 @@-Copyright 2017,2018 Commonwealth Scientific and Industrial Research Organisation-(CSIRO) ABN 41 687 119 230.+Copyright 2018 Tony Morris  All rights reserved. 
changelog.md view
@@ -1,3 +1,8 @@+0.0.3++* tgftp.nws.noaa.gov moved to forcing https, so use wreq library+* add metar version when given no arguments+ 0.0.2  * update nix
metar.cabal view
@@ -1,5 +1,5 @@ name:               metar-version:            0.0.2+version:            0.0.3 license:            BSD3 license-file:       LICENCE author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@sıɹɹoɯʇ>@@ -29,6 +29,8 @@    build-depends:                     base >= 4.8 && < 5+                    , bytestring >= 0.10 && < 0.11+                    , http-client >= 0.5 && < 0.6                     , HTTP >= 4000 && < 5000                     , lens >= 4 && < 5                     , network-uri >= 2.6 && < 3@@ -37,8 +39,9 @@                     , tagsoup >= 0.13 && < 0.15                     , tagsoup-selection >= 0.1 && < 0.2                     , transformers >= 0.5 && < 0.6-                    , deriving-compat-                    +                    , deriving-compat >= 0.5 && < 0.6+                    , wreq >= 0.5 && < 0.6+   ghc-options:                     -Wall 
src/Data/Aviation/Metar.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE CPP #-}  module Data.Aviation.Metar(   getBOMTAF@@ -10,22 +12,29 @@  import Control.Applicative(pure) import Control.Category((.))-import Control.Lens(view, _Wrapped)+import Control.Exception(catch)+import Control.Lens(view, _Wrapped, (&), (.~), (^.)) import Control.Monad(Monad((>>=))) import Data.Aviation.Metar.BOMTAFResult(BOMTAFResponse(BOMTAFResponse), bomMETAR, bomTAF) import Data.Aviation.Metar.TAFResult(TAFResult(ConnErrorResult, ParseErrorResult, TAFResultValue)) import Data.Aviation.Metar.TAFResultT(TAFResultT(TAFResultT))+import Data.ByteString.Lazy(ByteString)+import Data.ByteString.Lazy.Char8(unpack) import Data.Char(toUpper) import Data.Either(Either(Left, Right)) import Data.Foldable(length)+import Data.Function(($)) import Data.Functor(fmap) import Data.List(intercalate) import Data.Maybe(Maybe(Nothing, Just)) import Data.String(String, lines) import Data.Semigroup((<>))-import Network.HTTP(Request, Response, setHeaders, setRequestBody, mkRequest, RequestMethod(POST, GET), Header(Header), HeaderName(..), rspBody, simpleHTTP)-import Network.Stream(ConnError)+import Network.HTTP(Request, Response, setHeaders, setRequestBody, mkRequest, RequestMethod(POST), Header(Header), HeaderName(..), rspBody, simpleHTTP)+import Network.HTTP.Client(HttpException)+import Network.Stream(ConnError(ErrorMisc)) import Network.URI(URI(URI), URIAuth(URIAuth))+import Network.Wreq(getWith, defaults, headers, Options, responseBody)+import qualified Network.Wreq as Wreq(Response) import Prelude(show) import System.IO(IO, hPutStrLn, putStrLn, stderr) import Text.HTML.TagSoup(Tag(TagText))@@ -101,40 +110,65 @@         mkTAFResponse . parseTree . rspBody   in  TAFResultT . fmap (withResult respTAF) . simpleHTTP . request --- http://tgftp.nws.noaa.gov/data/observations/metar/stations/xxxx.TXT getNOAAMETAR ::   String   -> TAFResultT IO String getNOAAMETAR =-  let request ::-        String-        -> Request String-      request xxxx =-        setHeaders-          (-            mkRequest-              GET-              (URI "http" (Just (URIAuth "" "tgftp.nws.noaa.gov" "")) ("data/observations/metar/stations/" <> fmap toUpper xxxx <> ".TXT") "" "")               -          )+  let options ::+        Options+      options =+        defaults & headers .~           [-            Header HdrHost                        "tgftp.nws.noaa.gov"-          , Header HdrUserAgent                   "tonymorris/metar"-          , Header HdrAccept                      "*/*"-          , Header HdrAcceptLanguage              "en-US,en;q=0.5"-          , Header HdrAcceptEncoding              "text/html"-          , Header HdrConnection                  "keep-alive"-          , Header HdrPragma                      "no-cache"-          , Header HdrCacheControl                "no-cache"-          , Header (HdrCustom "DNT")              "1"+            (+              "Host"+            , "tgftp.nws.noaa.gov"+            )+          , (+              "User-Agent"+            , "tonymorris/metar"+            )+          , (+              "Accept"+            , "*/*"+            )+          , (+              "Accept-Language"+            , "en-US,en;q=0.5"+            )+          , (+              "Accept-Encoding"+            , "text/html"+            )+          , (+              "Connection"+            , "keep-alive"+            )+          , (+              "Pragma"+            , "no-cache"+            )+          , (+              "Cache-Control"+            , "no-cache"+            )+          , (+              "DNT"+            , "1"+            )           ]+      request xxxx =+        catch (fmap Right (getWith options ("https://tgftp.nws.noaa.gov/data/observations/metar/stations/" <> fmap toUpper xxxx <> ".TXT")))+          (\e ->  let e' :: HttpException+                      e' = e+                  in pure . Left . ErrorMisc . show $ e')       respMETAR ::-        Response String+        Wreq.Response ByteString         -> Maybe String       respMETAR r =-        case lines (rspBody r) of+        case lines . unpack $ r ^. responseBody of           [_, r'] -> Just r'           _ -> Nothing-  in TAFResultT . fmap (withResult respMETAR) . simpleHTTP . request+  in TAFResultT . fmap (withResult respMETAR) . request  getAllMETAR ::   String@@ -157,7 +191,8 @@         hPutStrLn stderr   in  case x of         [] ->-          stderr' "enter an argument (ICAO code)"+          do  putStrLn ("metar version " <> VERSION_metar)+              stderr' "enter an argument (ICAO code)"         (r:_) ->           let s = view _Wrapped (fmap (intercalate "\n") (getAllMETAR r))           in  s >>= \s' ->