Advertisement
Guest User

Untitled

a guest
Apr 11th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. import psycopg2
  2. from psycopg2.extras import DictCursor
  3.  
  4.  
  5. class PiWheelsDatabase:
  6. def __init__(self, dbname, user, host, password):
  7. connect_str = "dbname='{}' user='{}' host='{}' password='{}'".format(
  8. dbname, user, host, password
  9. )
  10. self.conn = psycopg2.connect(connect_str)
  11. self.cursor = self.conn.cursor(cursor_factory=DictCursor)
  12.  
  13. def log_build(self, *values):
  14. query = """
  15. INSERT INTO
  16. builds
  17. VALUES (
  18. now(),
  19. %s,
  20. %s,
  21. %s,
  22. %s,
  23. %s,
  24. %s,
  25. %s,
  26. %s,
  27. %s,
  28. %s
  29. )
  30. """
  31. self.cursor.execute(query, values)
  32. self.conn.commit()
  33.  
  34. def get_package_summary(self):
  35. query = """
  36. SELECT
  37. COUNT(CASE WHEN status THEN 1 END) as success,
  38. COUNT(CASE WHEN NOT status THEN 1 END) as fail,
  39. COUNT(*) as total
  40. FROM
  41. builds
  42. """
  43. self.cursor.execute(query)
  44. result = self.cursor.fetchone()
  45. return result
  46.  
  47. def get_last_package_built(self):
  48. query = """
  49. SELECT
  50. package
  51. FROM
  52. builds
  53. ORDER BY
  54. build_timestamp
  55. DESC
  56. LIMIT
  57. 1
  58. """
  59. self.cursor.execute(query)
  60. result = self.cursor.fetchone()
  61. return result[0]
  62.  
  63. def _get_packages_by_build_status(self, build_status=None):
  64. where_clause = {
  65. True: 'status',
  66. False: 'NOT status',
  67. None: '1',
  68. }[build_status]
  69. query = """
  70. SELECT
  71. package
  72. FROM
  73. builds
  74. WHERE
  75. {}
  76. ORDER BY
  77. package
  78. """.format(where_clause)
  79. self.cursor.execute(query)
  80. results = self.cursor.fetchall()
  81. return results
  82.  
  83. def get_all_packages(self):
  84. return self._get_packages_by_build_status()
  85.  
  86. def get_built_packages(self):
  87. return self._get_packages_by_build_status(True)
  88.  
  89. def get_failed_packages(self):
  90. return self._get_packages_by_build_status(False)
  91.  
  92. def get_total_build_time(self):
  93. query = """
  94. SELECT
  95. SUM(build_time)
  96. FROM
  97. builds
  98. """
  99. self.cursor.execute(query)
  100. result = self.cursor.fetchone()
  101. return result[0]
  102.  
  103. def get_longest_build(self):
  104. query = """
  105. SELECT
  106. package, build_time
  107. FROM
  108. builds
  109. ORDER BY
  110. build_time DESC
  111. LIMIT
  112. 1
  113. """
  114. self.cursor.execute(query)
  115. result = self.cursor.fetchone()
  116. return result
  117.  
  118. def get_total_wheel_filesize(self):
  119. query = """
  120. SELECT
  121. SUM(filesize)
  122. FROM
  123. builds
  124. """
  125. self.cursor.execute(query)
  126. result = self.cursor.fetchone()
  127. return result[0]
  128.  
  129. def add_new_package(self, package, attempted=False):
  130. query = """
  131. INSERT INTO
  132. packages
  133. VALUES (
  134. %s,
  135. %s
  136. )
  137. """
  138. values = (package, attempted)
  139. self.cursor.execute(query, values)
  140. self.conn.commit()
  141.  
  142. def get_attempted_packages(self):
  143. query = """
  144. SELECT
  145. package
  146. FROM
  147. builds
  148. """
  149. self.cursor.execute(query)
  150. results = self.cursor.fetchall()
  151. return [result['package'] for result in results]
  152.  
  153.  
  154. if __name__ == '__main__':
  155. from auth import *
  156. db = PiWheelsDatabase(dbname, user, host, password)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement