Advertisement
Guest User

script

a guest
Jul 8th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. #!/bin/env python
  2.  
  3. import sys
  4. import os
  5. sys.path.append('/home/mikee/progs/gnucash-maint/lib/python2.7/site-packages')
  6. import gnucash
  7. from gnucash import Session, Account, Split
  8. import gnucash
  9. import datetime
  10. from fractions import Fraction
  11.  
  12. FILE = "./bare.gnucash"
  13. url = "xml://"+FILE
  14.  
  15. # Read data from file
  16. f = open('GB00B4PQW151.L')
  17. data = []
  18. while 1:
  19. tmp = f.readline()
  20. if(len(tmp)<2):
  21. break
  22.  
  23. data.append(tmp)
  24.  
  25. f.close()
  26.  
  27. stock_date = []
  28. stock_price = []
  29. for i in range(1,len(data)):
  30. year = int(data[i].rsplit(',')[1].rsplit('/')[0])
  31. month = int(data[i].rsplit(',')[1].rsplit('/')[1])
  32. day = int(data[i].rsplit(',')[1].rsplit('/')[2])
  33. stock_date.append(datetime.datetime(year,month,day))
  34. stock_price.append(float(data[i].rsplit(',')[5]))
  35.  
  36. # Initialize Gnucash session
  37. session = Session(url, True, False, False)
  38. root = session.book.get_root_account()
  39. book = session.book
  40. account = book.get_root_account()
  41. pdb = book.get_price_db()
  42. commod_table = book.get_table()
  43. stock = commod_table.lookup('FUND', 'GB00B4PQW151.L')
  44. cur = commod_table.lookup('CURRENCY', 'GBP')
  45. # Add the prices
  46. pdb = book.get_price_db()
  47. # Get stock data
  48. pl = pdb.get_prices(stock,cur)
  49. if len(pl)<1:
  50. print 'Need at least one database entry to clone ...'
  51.  
  52. pl0 = pl[0]
  53. for i in range(1,len(pl)):
  54. pdb.remove_price(pl[i])
  55.  
  56. for i in range(0,len(stock_date)):
  57. p_new = pl0.clone(book)
  58. p_new = gnucash.GncPrice(instance=p_new)
  59. print 'Adding',i,stock_date[i],stock_price[i]
  60. p_new.set_time(stock_date[i])
  61. v = p_new.get_value()
  62. v.num = int(Fraction.from_float(stock_price[i]).limit_denominator(100000).numerator)
  63. v.denom = int(Fraction.from_float(stock_price[i]).limit_denominator(100000).denominator)
  64. p_new.set_value(v)
  65. pdb.add_price(p_new)
  66.  
  67. # Clean up
  68. session.save()
  69. session.end()
  70. session.destroy()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement