Merge remote-tracking branch 'sm/master'

This commit is contained in:
Thomas R. Koll 2016-01-18 17:59:49 +01:00
commit 5e3d6d6d3d
8 changed files with 95 additions and 69 deletions

View File

@ -1,3 +1,5 @@
# http://docs.haskellstack.org/en/stable/travis_ci.html
language: haskell
branches:
@ -19,7 +21,7 @@ cache:
before_install:
- mkdir -p ~/.local/bin
- export PATH=~/.local/bin:$PATH
- travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v0.1.3.1/stack-0.1.3.1-x86_64-linux.gz | gunzip > ~/.local/bin/stack
- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
- chmod a+x ~/.local/bin/stack
install:

View File

@ -1273,13 +1273,12 @@ tagrelease: \
# @darcs changes --from-tag $(FROMTAG) |grep '^\w' |cut -c 31- |sort |uniq
# @echo
# showloc: \
# $(call def-help,showloc,\
# \
# )
# @echo Current lines of code including tests:
# @sloccount `ls $(SOURCEFILES)` | grep haskell:
# @echo
cloc: \
$(call def-help,cloc, count lines of source code )
@echo Lines of code including tests:
@cloc --exclude-lang=HTML --exclude-dir=.stack-work,.idea,dist,old,bin,doc,site,.tutorial-data .
@echo
# `ls $(SOURCEFILES)`
# sloc: \
# $(call def-help,sloc,\

View File

@ -8,10 +8,12 @@
-- {-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Trans.Either
import Control.Monad.Trans.Reader
import Data.Aeson
@ -19,7 +21,7 @@ import Data.Decimal
import qualified Data.Map as M
import Data.Monoid
import Data.Proxy
import Data.Text
import Data.Text hiding (map,reverse)
import GHC.Generics
import Network.Wai as Wai
import Network.Wai.Handler.Warp as Warp
@ -31,6 +33,7 @@ import System.Exit
import System.IO
import Text.Printf
import Hledger.Query
import Hledger.Cli hiding (Reader, version)
version="0.27.98"
@ -68,42 +71,57 @@ main = do
serveApi :: FilePath -> Int -> Journal -> IO ()
serveApi f p j = do
printf "Starting web api for %s on port %d\nPress ctrl-c to quit\n" f p >> hFlush stdout
printf "Starting web api for %s on port %d\nPress ctrl-c to quit\n" f p
Warp.run p $ hledgerApiApp j
hledgerApiApp :: Journal -> Wai.Application
hledgerApiApp j = Servant.serve hledgerApi hledgerApiServer
where
hledgerApi :: Proxy HledgerApi
hledgerApi = Proxy
hledgerApiServer :: Servant.Server HledgerApi
hledgerApiServer = Servant.enter readerToEither hledgerServerT
where
readerToEither :: Reader Journal :~> EitherT ServantErr IO
readerToEither = Nat $ \r -> return (runReader r j)
type HledgerApi =
"accounts" :> Get '[JSON] [AccountName]
"accountnames" :> Get '[JSON] [AccountName]
:<|> "transactions" :> Get '[JSON] [Transaction]
:<|> "prices" :> Get '[JSON] [MarketPrice]
:<|> "commodities" :> Get '[JSON] [Commodity]
:<|> "prices" :> Get '[JSON] [MarketPrice]
:<|> "commodities" :> Get '[JSON] [Commodity]
:<|> "accounts" :> Get '[JSON] [Account]
:<|> "reports" :>
"accounttransactions" :> Capture "acct" AccountName :> Get '[JSON] AccountTransactionsReport
:<|> Raw
hledgerServerT :: ServerT HledgerApi (Reader Journal)
hledgerServerT =
accountsH
:<|> transactionsH
:<|> pricesH
:<|> commoditiesH
hledgerApiApp :: Journal -> Wai.Application
hledgerApiApp j = Servant.serve api server
where
accountsH = journalAccountNames <$> ask
transactionsH = jtxns <$> ask
pricesH = jmarketprices <$> ask
commoditiesH = (M.keys . jcommoditystyles) <$> ask
api :: Proxy HledgerApi
api = Proxy
server :: Server HledgerApi
server =
accountnamesH
:<|> transactionsH
:<|> pricesH
:<|> commoditiesH
:<|> accountsH
:<|> accounttransactionsH
:<|> serveDirectory "static"
where
accountnamesH = return $ journalAccountNames j
transactionsH = return $ jtxns j
pricesH = return $ jmarketprices j
commoditiesH = return $ (M.keys . jcommoditystyles) j
accountsH = return $ laccounts $ ledgerFromJournal Hledger.Cli.Any j
accounttransactionsH (a::AccountName) = do
-- d <- liftIO getCurrentDay
let
ropts = defreportopts
-- ropts' = ropts {depth_=Nothing
-- ,balancetype_=HistoricalBalance
-- }
q = Hledger.Query.Any --filterQuery (not . queryIsDepth) $ queryFromOpts d ropts'
thisacctq = Acct $ accountNameToAccountRegex a -- includes subs
return $ accountTransactionsReport ropts j q thisacctq
instance ToJSON ClearedStatus where toJSON = genericToJSON defaultOptions -- avoid https://github.com/bos/aeson/issues/290
-- brief toJSON definitions included to avoid https://github.com/bos/aeson/issues/290
-- use toEncoding = genericToEncoding defaultOptions instead ?
instance ToJSON ClearedStatus where toJSON = genericToJSON defaultOptions
instance ToJSON GenericSourcePos where toJSON = genericToJSON defaultOptions
instance ToJSON Decimal where
toJSON = toJSON . show
instance ToJSON Amount where toJSON = genericToJSON defaultOptions
instance ToJSON AmountStyle where toJSON = genericToJSON defaultOptions
instance ToJSON Side where toJSON = genericToJSON defaultOptions
@ -111,27 +129,31 @@ instance ToJSON DigitGroupStyle where toJSON = genericToJSON defaultOptions
instance ToJSON MixedAmount where toJSON = genericToJSON defaultOptions
instance ToJSON Price where toJSON = genericToJSON defaultOptions
instance ToJSON MarketPrice where toJSON = genericToJSON defaultOptions
instance ToJSON Posting
where
toJSON Posting{..} =
object
["pdate" .= toJSON pdate
,"pdate2" .= toJSON pdate2
,"pstatus" .= toJSON pstatus
,"paccount" .= toJSON paccount
,"pamount" .= toJSON pamount
,"pcomment" .= toJSON pcomment
,"ptype" .= toJSON ptype
,"ptags" .= toJSON ptags
,"pbalanceassertion" .= toJSON pbalanceassertion
-- just show parent transaction's index
,"ptransaction" .= toJSON (maybe "" (show.tindex) ptransaction)
]
instance ToJSON PostingType where toJSON = genericToJSON defaultOptions
instance ToJSON Posting where
toJSON Posting{..} =
object
["pdate" .= toJSON pdate
,"pdate2" .= toJSON pdate2
,"pstatus" .= toJSON pstatus
,"paccount" .= toJSON paccount
,"pamount" .= toJSON pamount
,"pcomment" .= toJSON pcomment
,"ptype" .= toJSON ptype
,"ptags" .= toJSON ptags
,"pbalanceassertion" .= toJSON pbalanceassertion
,"ptransactionidx" .= toJSON (maybe "" (show.tindex) ptransaction)
]
instance ToJSON Transaction where toJSON = genericToJSON defaultOptions
instance ToJSON Decimal
where
-- toJSON (Decimal decimalPlaces decimalMantissa) =
-- object ["places" .= decimalPlaces, "mantissa" .= decimalMantissa]
-- toEncoding = genericToEncoding defaultOptions
toJSON d = toJSON $ show d
instance ToJSON Account where
toJSON a =
object
["aname" .= toJSON (aname a)
,"aebalance" .= toJSON (aebalance a)
,"aibalance" .= toJSON (aibalance a)
,"anumpostings" .= toJSON (anumpostings a)
,"aboring" .= toJSON (aboring a)
,"aparentname" .= toJSON (maybe "" aname $ aparent a)
,"asubs" .= toJSON (map toJSON $ asubs a)
]
instance ToJSON AccountTransactionsReport where toJSON = genericToJSON defaultOptions

View File

@ -0,0 +1 @@
Files under this directory are served by hledger-api when no other API route is matched.

View File

@ -1,6 +1,10 @@
User-visible changes in hledger-ui.
See also hledger's change log.
0.27.3 (2016/1/12)
- allow brick 0.4
0.27.2 (2016/1/11)
- allow brick 0.3.x

View File

@ -3,7 +3,7 @@
-- see: https://github.com/sol/hpack
name: hledger-ui
version: 0.27.2
version: 0.27.3
stability: beta
category: Finance, Console
synopsis: Curses-style user interface for the hledger accounting tool
@ -25,7 +25,7 @@ homepage: http://hledger.org
bug-reports: http://bugs.hledger.org
cabal-version: >= 1.10
build-type: Simple
tested-with: GHC==7.8.4, GHC==7.10.2
tested-with: GHC==7.8.4, GHC==7.10.3
extra-source-files:
CHANGES
@ -54,13 +54,13 @@ executable hledger-ui
ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures -fno-warn-type-defaults -fno-warn-orphans
if flag(threaded)
ghc-options: -threaded
cpp-options: -DVERSION="0.27.2"
cpp-options: -DVERSION="0.27.3"
build-depends:
hledger >= 0.27 && < 0.28
, hledger-lib >= 0.27 && < 0.28
, base >= 3 && < 5
, base-compat >= 0.8.1
, brick >= 0.2 && < 0.4
, brick >= 0.2 && < 0.5
, cmdargs >= 0.8
, containers
, data-default

View File

@ -9,7 +9,7 @@
# - conditional blocks
name : hledger-ui
version : '0.27.2'
version : '0.27.3'
stability : beta
category : Finance, Console
synopsis : Curses-style user interface for the hledger accounting tool
@ -31,7 +31,7 @@ github : simonmichael/hledger
homepage : http://hledger.org
bug-reports : http://bugs.hledger.org
# XXX not supported
tested-with : GHC==7.10.2
tested-with : GHC==7.10.3
extra-source-files:
- CHANGES
@ -54,7 +54,7 @@ ghc-options:
-fno-warn-type-defaults
-fno-warn-orphans
cpp-options: -DVERSION="0.27.2"
cpp-options: -DVERSION="0.27.3"
executables:
hledger-ui:
@ -69,7 +69,7 @@ executables:
- hledger-lib >= 0.27 && < 0.28
- base >= 3 && < 5
- base-compat >= 0.8.1
- brick >= 0.2 && < 0.4
- brick >= 0.2 && < 0.5
- cmdargs >= 0.8
- containers
- data-default

View File

@ -98,9 +98,7 @@ This is a quick way to help the project and your fellow users!
<!-- needed if you will be processing >50,000 transactions at once -->
2. `stack setup`
(if you need GHC installed. If you're not sure, run the next command and it will tell you.)
3. `stack --resolver nightly-2015-11-04 install hledger [hledger-web]` \
<!-- `stack --resolver nightly-2015-11-02 install hledger-ui` (the curses-style interfaces; [not yet available on Windows](https://github.com/coreyoconnor/vty/pull/1); also installs the CLI), or\ -->
*2015/11/3: hledger-ui has [not yet reached stackage](https://github.com/fpco/stackage/issues/938); you must install it from source or with cabal, see below.*
3. `stack --resolver lts-4 install hledger [hledger-ui] [hledger-web]`
4. Ensure `~/.local/bin` or the Windows equivalent is in your `$PATH`,
so that you can just type `hledger` to run it.
(stack will show the proper directory and will tell you if it is not in $PATH).