You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.9 KiB

7 years ago
  1. import copy
  2. import sys
  3. import os
  4. sys.path.insert(0,r"X:\Users\Ralphie\Documents\local_repo\price_finder")
  5. dirname = os.path.dirname(__file__)
  6. sys.path.insert(0,dirname)
  7. # print(dirname)
  8. sys.path.insert(0,dirname)
  9. from batch_process import get_prices
  10. from quad_dialog_new import message,dicter
  11. import datetime
  12. import sqlite3
  13. import pandas
  14. from decimal import Decimal as D
  15. import argparse
  16. # print('imports done')
  17. # print(os.getcwd())
  18. if __name__ == "__main__":
  19. parser = argparse.ArgumentParser()
  20. parser.add_argument('--stdout',action = 'store')
  21. parser.add_argument('--stderr',action = 'store')
  22. args = parser.parse_args()
  23. # print('args parsed')
  24. time = str(datetime.datetime.today())
  25. # breakpoint()
  26. if args.stdout:
  27. with open(args.stdout,'w') as file:
  28. file.write(time)
  29. # print("stdout written")
  30. sys.stdout = open(args.stdout,'a')
  31. if args.stderr:
  32. with open(args.stderr,'w') as file:
  33. file.write(time)
  34. # print("stderr written")
  35. sys.stderr = open(args.stderr,'a')
  36. con = sqlite3.connect(os.path.join(dirname,'quadparts.db'))
  37. cur = con.cursor()
  38. date = str(datetime.date.today())
  39. result = list(cur.execute('SELECT * FROM parts WHERE date == ? LIMIT 1',(date,)))
  40. quad_links = list(row[0] for row in cur.execute('SELECT link FROM links ORDER BY id'))
  41. if not result:
  42. print('Executing')
  43. quad_parts_base = pandas.read_sql('SELECT * FROM names',con).to_dict('records')
  44. products = get_prices(quad_links,use_proxies=True)
  45. current = copy.deepcopy(quad_parts_base)
  46. complete = list({'product_name':product.info_product['product_name'],
  47. 'price': float(product.info_product['price']),
  48. 'date': product.time.strftime('%Y-%m-%d'),
  49. 'time': product.time.strftime('%H:%M:%S.%f'),
  50. 'location':product.info_url.netloc,
  51. 'link_id': quad_links.index(product.url)} for product in products)
  52. df = pandas.DataFrame(complete)
  53. df.to_sql('parts',con,if_exists='append',index=False)
  54. for i in range(len(complete)):
  55. complete[i]['price'] = round(D(complete[i]['price']),2)
  56. for item in current:
  57. name = item['name']
  58. link = item['link']
  59. item['product_name'] = complete[link]['product_name']
  60. item['price'] = complete[link]['price']
  61. item['time'] = complete[link]['time']
  62. bought = message(quad_parts_base,current)
  63. quad_parts_base = dicter(quad_parts_base)
  64. for key,is_purchased in bought.items():
  65. if is_purchased:
  66. if quad_parts_base[key]['count'] > 1:
  67. cur.execute('UPDATE names SET count = count - 1 WHERE name == ?',(key,))
  68. else:
  69. cur.execute('UPDATE names SET purchased = 1 WHERE name == ?',(key,))
  70. con.commit()
  71. con.close()