test_suite.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import math
  2. import psycopg
  3. import os
  4. from datetime import date
  5. from datetime import timedelta
  6. from dotenv import load_dotenv
  7. from pprint import pprint
  8. from tabulate import tabulate
  9. import model
  10. def get_table(new_member=1337627, name=''):
  11. print(f'new_member: {new_member}')
  12. text = f'!ph {new_member}'
  13. print(text)
  14. load_dotenv(verbose=True)
  15. use_data = False
  16. conn_dangercrow = psycopg.connect(
  17. user=os.getenv('db_dangercrow_user'),
  18. password=os.getenv('db_dangercrow_password'),
  19. host=os.getenv('db_host'),
  20. port=os.getenv('db_port'),
  21. dbname=os.getenv('db_dangercrow_database'))
  22. cur_dangercrow = conn_dangercrow.cursor()
  23. query_dangercrow_now = f"""SELECT
  24. xanax.timestamp, factions.username, xanax.refills, xanax.activity, networth.networth, xanax.xantaken
  25. FROM xanax
  26. LEFT JOIN factions
  27. ON xanax.id = factions.member_id
  28. LEFT JOIN networth
  29. ON xanax.id = networth.member
  30. WHERE xanax.id = {new_member}
  31. ORDER BY timestamp DESC LIMIT 1;"""
  32. timedelta_seven = date.today() - timedelta(days=7)
  33. query_dangercrow_seven = f"""SELECT
  34. xanax.timestamp, factions.username, xanax.refills, xanax.activity, networth.networth, xanax.xantaken
  35. FROM xanax
  36. LEFT JOIN factions
  37. ON xanax.id = factions.member_id
  38. LEFT JOIN networth
  39. ON xanax.id = networth.member
  40. WHERE xanax.id = {new_member}
  41. ORDER BY abs( xanax.timestamp -
  42. date '{timedelta_seven.strftime('%Y-%m-%d')}')
  43. LIMIT 1;"""
  44. timedelta_thirtythree = date.today() - timedelta(days=33)
  45. query_dangercrow_thirtythree = f"""SELECT
  46. xanax.timestamp, factions.username, xanax.refills, xanax.activity, networth.networth, xanax.xantaken
  47. FROM xanax
  48. LEFT JOIN factions
  49. ON xanax.id = factions.member_id
  50. LEFT JOIN networth
  51. ON xanax.id = networth.member
  52. WHERE xanax.id = {new_member}
  53. ORDER BY abs( xanax.timestamp -
  54. date '{timedelta_thirtythree.strftime('%Y-%m-%d')}')
  55. LIMIT 1;"""
  56. result_now = model.database_select(cur_dangercrow, query_dangercrow_now, debug=True)
  57. if not result_now:
  58. use_data = True
  59. print('No data from dangercrow database, trying the prospects database.')
  60. conn_data = psycopg.connect(
  61. user=os.getenv('db_data_user'),
  62. password=os.getenv('db_data_password'),
  63. host=os.getenv('db_host'),
  64. dbname=os.getenv('db_data_database'))
  65. cur_data = conn_data.cursor()
  66. query_now = f'''SELECT today, data->>'name' as name, data->>'refills' as refills, data->>'networth' as networth, data->>'xantaken' as xantaken
  67. FROM alldata WHERE member = {new_member}
  68. ORDER BY today LIMIT 1;'''
  69. result_now = model.database_select(cur_data, query_now, debug=True)
  70. if not result_now:
  71. return 'No data available for this player'
  72. query_data_seven = f'''SELECT today, data->>'name' as name, data->>'refills' as refills, data->>'networth' as networth, data->>'xantaken' as xantaken
  73. FROM alldata WHERE member = {new_member}
  74. ORDER BY abs(today - date '{timedelta_seven.strftime('%Y-%m-%d')}')
  75. LIMIT 1;'''
  76. query_data_thirtythree = f'''SELECT today, data->>'name' as name, data->>'refills' as refills, data->>'networth' as networth, data->>'xantaken' as xantaken
  77. FROM alldata WHERE member = {new_member}
  78. ORDER BY abs(today - date '{timedelta_thirtythree.strftime('%Y-%m-%d')}')
  79. LIMIT 1;'''
  80. pprint(result_now)
  81. if use_data:
  82. result_seven = model.database_select(cur_data, query_data_seven, debug=True)
  83. result_thirtythree = model.database_select(cur_data, query_data_thirtythree, debug=True)
  84. else:
  85. result_seven = model.database_select(cur_dangercrow, query_dangercrow_seven, debug=True)
  86. result_thirtythree = model.database_select(cur_dangercrow, query_dangercrow_thirtythree)
  87. pprint(result_seven)
  88. delta_seven = date.today() - result_seven[0][0]
  89. print(f'delta_seven: {delta_seven}')
  90. pprint(result_thirtythree)
  91. delta_thirtythree = date.today() - result_thirtythree[0][0]
  92. print(f'delta_thirtythree: {delta_thirtythree}')
  93. millnames = ['', ' K', ' M', ' B', ' T']
  94. def millify(n):
  95. n = float(n)
  96. millidx = max(0,min(len(millnames)-1,
  97. int(math.floor(0 if n == 0 else math.log10(abs(n))/3))))
  98. return '{:.0f}{}'.format(n / 10**(3 * millidx), millnames[millidx])
  99. if result_now[0][1] is None:
  100. if name != '':
  101. result_now[0][1] = name
  102. table = [
  103. ['', 'Latest', f'Last {delta_seven.days} days', f'Last {delta_thirtythree.days} days'],
  104. ['date', result_now[0][0].strftime('%Y-%m-%d'), result_seven[0][0].strftime('%Y-%m-%d'), result_thirtythree[0][0].strftime('%Y-%m-%d')],
  105. ['name', f"{result_now[0][1]} [{new_member}]", '', ''],
  106. ['refills', result_now[0][2], result_now[0][2] - result_seven[0][2], result_now[0][2] - result_thirtythree[0][2]],
  107. ['useractivity', millify(result_now[0][3]), millify(result_now[0][3] - result_seven[0][3]), millify(result_now[0][3] - result_thirtythree[0][3])],
  108. ['networth', millify(result_now[0][4]), millify(result_now[0][4] - result_seven[0][4]), millify((result_now[0][4] - result_thirtythree[0][4]))],
  109. ['xantaken', result_now[0][5], result_now[0][5] - result_seven[0][5], result_now[0][5] - result_thirtythree[0][5]]
  110. ]
  111. return '```\n'+tabulate(table)+'\n```'
  112. if __name__ == '__main__':
  113. tests = [1927067, 1337627, 2094410, 1200106, 2135411, 2703120]
  114. for test in tests:
  115. print(get_table(test))