/PythonWork/validator.py

https://gitlab.com/rajul/ovl-work · Python · 231 lines · 156 code · 60 blank · 15 comment · 23 complexity · 040a59de7c94aa4f5308da0c58cb7c2b MD5 · raw file

  1. #!/usr/bin/python
  2. import re
  3. from rtkit.resource import RTResource
  4. from rtkit.authenticators import BasicAuthenticator
  5. from rtkit.errors import RTResourceError
  6. from rtkit import set_logging
  7. import logging
  8. import requests,logging
  9. import json
  10. set_logging('debug')
  11. logger = logging.getLogger('rtkit')
  12. class OvlUserCSVRecordValidator:
  13. NUMBER_OF_FIELDS_IN_CSV = 5
  14. EXPECTED_FIELDS = ("email", "name", "phone", "organisation", "group")
  15. EMAIL_REGEX = re.compile(r'[^@]+@[^@]+\.[^@]+')
  16. NAME_REGEX = re.compile(r'^[a-zA-Z]+$')
  17. def __init__(self):
  18. self.csv_data = []
  19. self.data = {}
  20. def validate_record_number_of_fields(self):
  21. return len(self.csv_data) == self.NUMBER_OF_FIELDS_IN_CSV
  22. def create_data_map(self):
  23. for i in range(self.NUMBER_OF_FIELDS_IN_CSV):
  24. self.data[self.EXPECTED_FIELDS[i]] = data[i]
  25. def validate_required_fields(self):
  26. return True
  27. def validate_record_email_address(self):
  28. if not self.EMAIL_REGEX.match(self.data['email']):
  29. return False
  30. return True
  31. def validate_real_name(self):
  32. if not self.NAME_REGEX.match(self.data['name']):
  33. return False
  34. return True
  35. def validate_phone_number(self):
  36. return True
  37. def validate_organisation(self):
  38. return True
  39. def validate_group(self):
  40. return True
  41. def validate_record(self, csv_line):
  42. self.data = csv_line.strip().split(',')
  43. if self.validate_record_number_of_fields():
  44. self.create_data_map()
  45. else:
  46. return False
  47. if not self.validate_record_email_address():
  48. return False
  49. if not self.validate_real_name():
  50. return False
  51. if not self.validate_phone_number():
  52. return False
  53. if not self.validate_group():
  54. return False
  55. if not self.validate_organisation():
  56. return False
  57. return True
  58. class OvlUserCSVFileValidator:
  59. GOOD_RECORDS_FILEPATH = 'good.csv'
  60. BAD_RECORDS_FILEPATH = 'bad.csv'
  61. def __init__(self, filepath, good_records_filepath=None, bad_records_filepath=None):
  62. self.file = open(filepath, 'r')
  63. if good_records_filepath:
  64. self.GOOD_RECORDS_FILEPATH = good_records_filepath
  65. if bad_records_filepath:
  66. self.BAD_RECORDS_FILEPATH = bad_records_filepath
  67. self.good_records_file = open(self.GOOD_RECORDS_FILEPATH, 'w')
  68. self.bad_records_file = open(self.BAD_RECORDS_FILEPATH, 'w')
  69. self.good_records_count = 0
  70. self.bad_records_count = 0
  71. self.record_validator = OvlUserCSVRecordValidator()
  72. def validate_file(self):
  73. for line in self.file:
  74. if self.record_validator.validate_record(line):
  75. self.good_records_file.write(line)
  76. self.good_records_count = self.good_records_count + 1
  77. else:
  78. self.bad_records_file.write(line)
  79. self.bad_records_count = self.bad_records_count + 1
  80. return True
  81. class OvlRTApprovalTicketCreator:
  82. RT_HOST = 'localhost:8080'
  83. USER = 'root'
  84. PASSWORD = 'password'
  85. APPROVALS_QUEUE = 'UserCreationApprovalTest'
  86. EXCEPTIONS_QUEUE = 'UserCreationExceptionTest'
  87. APPROVALS_SUBJECT = 'DummySubjectApproval'
  88. EXCEPTIONS_SUBJECT = 'DummySubjectApproval'
  89. APPROVALS_TEXT = 'DummyTextApproval'
  90. EXCEPTIONS_TEXT = 'DummyTextApproval'
  91. def __init__(self, uploaded_filepath):
  92. self.file_validator = OvlUserCSVFileValidator(uploaded_filepath)
  93. self.file_validator.validate_file()
  94. self.rt_url = self.get_rt_url_string()
  95. self.ticket_creation_url = self.get_rt_ticket_creation_url_string('ticket/new')
  96. self.rt_connection = RTResource(self.rt_url, self.USER, self.PASSWORD, BasicAuthenticator)
  97. def get_rt_url_string(self):
  98. return 'https://' + self.RT_HOST + '/REST/1.0/'
  99. def get_rt_ticket_creation_url_string(self, suffix):
  100. return self.rt_url + suffix + self.get_user_string()
  101. def get_user_string(self):
  102. return '?user=' + self.USER + '&pass=' + self.PASSWORD
  103. def comment_with_attachment(self, ticket_id, attachment_file):
  104. try:
  105. params = {
  106. 'content': {
  107. 'Action': 'comment',
  108. 'Text': 'Comment with attach',
  109. 'Attachment': 'x.csv',
  110. },
  111. 'attachment_1': file(attachment_file)
  112. }
  113. comment_path = 'ticket/' + str(ticket_id) + '/comment'
  114. response = resource.post(path=comment_path, payload=params,)
  115. for r in response.parsed:
  116. logger.info(r)
  117. except RTResourceError as e:
  118. logger.error(e.response.status_int)
  119. logger.error(e.response.status)
  120. logger.error(e.response.parsed)
  121. def create_good_record_ticket(self):
  122. content = {
  123. 'content': {
  124. 'Queue': self.APPROVALS_QUEUE,
  125. 'Subject': self.APPROVALS_SUBJECT,
  126. 'Text': self.APPROVALS_TEXT
  127. }
  128. }
  129. # post_data = r'''
  130. # Queue: %s
  131. # Subject: %s
  132. # Text: %s
  133. # ''' %(self.APPROVALS_QUEUE, self.APPROVALS_SUBJECT, self.APPROVALS_TEXT)
  134. # print post_data
  135. # print self.ticket_creation_url
  136. # payload = {'user': self.USER, 'pass': self.PASSWORD,'content':post_data}
  137. # print payload
  138. try:
  139. # response = requests.post(self.ticket_creation_url, payload)
  140. response = self.rt_connection.post(path='ticket/new', payload=content,)
  141. # logger.info(response.text)
  142. logger.info(response.parsed)
  143. # Create comment with `good` attachment
  144. except Exception as e:
  145. # logger.error(e.text)
  146. logger.error(e.response.status_int)
  147. logger.error(e.response.status)
  148. logger.error(e.response.parsed)
  149. def create_bad_record_ticket(self):
  150. content = {
  151. 'content': {
  152. 'Queue': self.EXCEPTIONS_QUEUE,
  153. 'Subject': self.EXCEPTIONS_SUBJECT,
  154. 'Text': self.EXCEPTIONS_TEXT
  155. }
  156. }
  157. try:
  158. response = self.rt_connection.post(path='ticket/new' + self.get_user_string(), payload=content,)
  159. logger.info(response.parsed)
  160. # Create comment with `bad` attachment
  161. except RTResourceError as e:
  162. print e
  163. logger.error(e.response.status_int)
  164. logger.error(e.response.status)
  165. logger.error(e.response.parsed)
  166. def create_tickets(self):
  167. self.create_good_record_ticket()
  168. self.create_bad_record_ticket()
  169. if __name__ == '__main__':
  170. ticket_creator = OvlRTApprovalTicketCreator('test2.csv')
  171. ticket_creator.create_tickets()