hledger icon indicating copy to clipboard operation
hledger copied to clipboard

hledger-web doesn't show results for accounts with an apostrophe

Open ohmyohmyohmy opened this issue 8 years ago • 18 comments
trafficstars

When clicking on an account (on the left hand column) that contains an apostrophe like "Mimi's Cafe", the result that appears is always blank with a flat graph. This applies to all sub-accounts too.

Other accounts without apostrophe like "Bella Italia" doesn't have this problem.

Thanks!

ohmyohmyohmy avatar Nov 21 '17 11:11 ohmyohmyohmy

Good catch! The fix might include adding a call to quoteIfNeeded in the searchform function. The bug happens only with account names containing both a space and an apostrophe (single quote). Are you a haskeller ?

simonmichael avatar Nov 21 '17 14:11 simonmichael

Correction, I think the problem is in Common.hs (hledger-web):

accountQuery :: AccountName -> String
accountQuery a = "inacct:" ++ T.unpack (quoteIfSpaced a) -- (accountNameToAccountRegex a)

accountOnlyQuery :: AccountName -> String
accountOnlyQuery a = "inacctonly:" ++ T.unpack (quoteIfSpaced a ) -- (accountNameToAccountRegex a)

and Text.hs (hledger-lib):

-- | Wrap a string in double quotes, and \-prefix any embedded single
-- quotes, if it contains whitespace and is not already single- or
-- double-quoted.
quoteIfSpaced :: T.Text -> T.Text
quoteIfSpaced s | isSingleQuoted s || isDoubleQuoted s = s
                | not $ any (`elem` (T.unpack s)) whitespacechars = s
                | otherwise = "'"<>escapeSingleQuotes s<>"'"

This is a nice starter bug for anyone wanting to get started on hledger-web hacking. Steps might include:

  • set up hledger source for building, see download page
  • make ghci-web
  • :main -f examples/sample.journal
  • add some transactions to Expenses:Mimi's Cafe
  • in browser: reload & reproduce bug
  • change the above code somehow
  • in ghci window: CTRL-c, :r ENTER, CTRL-p ENTER
  • in browser: reload & observe effects of change
  • figure out what is the correct thing it should be doing.. smarter handling of embedded quotes ? url-encoding ?

simonmichael avatar Nov 21 '17 14:11 simonmichael

Sorry, I don't speak Haskel. (Sad...) But I did find a temporary solution! I had to replace the apostrophes surrounding the account name with quotation marks "...", and then it'll work.

Example: inacct:'Expenses:Mimi's Cafe' - fail inacct:"Expenses:Mimi's Cafe" - works!

Are you proud of me? Huh? Are ya?

Just kidding! (I like to think programmers have a sense of humor too)

ohmyohmyohmy avatar Nov 22 '17 07:11 ohmyohmyohmy

+1 creative interim solution ! :)

simonmichael avatar Nov 22 '17 15:11 simonmichael

I'll take a look at this one.

ghost avatar Dec 07 '17 13:12 ghost

Not a haskeller so am unfamiliar with how best modify those mentioned functions. I did confirm that an account with a single quote but no spaces behaves properly, e.g. mimi'snospace. Additionally the network request from hledger web properly encodes the single quote as %27. It seems that isSingleQuoted should do a more comprehensive test on the account name? Or maybe the account name should have spaces stripped before invoking isSingleQuoted?

ghost avatar Dec 09 '17 13:12 ghost

Hi Simon, I am trying to get into hledger-web with this one. Is there any reason that the documentation of quoteIfSpaced says "Wrap a string in double quotes" but the function actually wraps the string in single quotes?

ptek avatar Mar 18 '18 15:03 ptek

Hi ptek, thanks! You're quite right, that's a mistake. Hledger.Utils.Text is a rough partial port of Hledger.Utils.String and it looks like I got confused.

simonmichael avatar Mar 19 '18 10:03 simonmichael

Replying here re #649: I'm not sure that is right. Shouldn't it be "\""<>escapeDoubleQuotes s<>"\"" ?

The semantics of these helpers seem quite confusing, they are perhaps in need of additional clarification and some tests. Eg:

  • why are we using quoteIfSpaced (handles whitespace) and not quoteIfNeeded (handles whitespace and single/double quote chars) as in String.hs ?

  • should single quote chars be legal in account names ? If not, do we do enough validation/warning when they are used ? If yes, do we fully support that ?

  • same questions for double quotes

  • is escapeDoubleQuotes (String and Text versions) doing anything ? I don't think so

simonmichael avatar Mar 19 '18 14:03 simonmichael

PS I tested with the following journal. hledger-web 1.5 shows the correct register screen for 5/9 txns, the #649 patch works for 7/9 txns (it fails on 2 and 4):

2018/1/1
    (1:mimi's cafe)  1
    
2018/1/2
    (2:expenses:"alex" cafe)  1

2018/1/3
    (3:expenses:le'shan's cafe)  1

2018/1/4
    (4:expenses:"be'any's" cafe)  1

2018/1/5
    (5:a'a)  1
    
2018/1/6
    (6:b'b'b)  1

2018/1/7
    (7:c'c'c'c)  1

2018/1/8
    (8:d')  1

2018/1/9
    (9:a' a)  1
    

simonmichael avatar Mar 19 '18 14:03 simonmichael

Ping.. would anyone like to push this to completion ?

simonmichael avatar Apr 09 '18 13:04 simonmichael

Would you like all 9 of 9 cases in the above comment covered? I could give it a try

ptek avatar Apr 09 '18 13:04 ptek

@ptek that would be nice, but even better if you could investigate the points I raised in the previous comment.

simonmichael avatar Apr 09 '18 13:04 simonmichael

Ok, I hope I have enough insight into hledger for that. Will do my best

ptek avatar Apr 09 '18 16:04 ptek

Thanks for the help! If you'd like to look at it together, ping me on #hledger.

simonmichael avatar Apr 09 '18 16:04 simonmichael

My scan of this seems to have all nine transactions showing correctly in the register screen for hledger-web on master. Clicking on accounts 2 and 4 (i.e. the ones with double quotes in the account name) seems to fail. Is this also your read of the current situation?

Xitian9 avatar Apr 04 '21 04:04 Xitian9

Yes, that's how it looks to me too. Clicking on the second or fourth account name either in the sidebar or in the register navigates to an empty register whose title is a truncated version of the account name.

simonmichael avatar Apr 04 '21 04:04 simonmichael

Status is unchanged: account names 2 and 4 above, containing double quotes, are not hyperlinked properly in the side bar by hledger-web 1.30.

simonmichael avatar Jun 21 '23 07:06 simonmichael