Advertisement
Guest User

Untitled

a guest
Mar 27th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.62 KB | None | 0 0
  1. import requests
  2. import xml.etree.ElementTree as ET
  3. import uuid
  4. from time import sleep
  5.  
  6. headers = {'Content-Type':'application/xml', 'Accept':'application/xml'}
  7. hotel_link = "http://jewel.cs.man.ac.uk:3010/queue/enqueue"
  8. band_link = "http://jewel.cs.man.ac.uk:3020/queue/enqueue"
  9.  
  10. # find available slots for hotels
  11. def find_hotel():
  12. hotel_av = []
  13.  
  14. tree3 = ET.parse('availability.xml')
  15. root3 = tree3.getroot()
  16. tree3.find('.//request_id').text = str(uuid.uuid1())
  17. tree3.write('availability.xml')
  18.  
  19. av_data = open('availability.xml').read()
  20.  
  21. a = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=av_data, headers=headers)
  22. while a.text == "Message Unavailable" or a.text == "Service Unavailable":
  23. a = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=av_data, headers=headers)
  24. sleep(1)
  25.  
  26. msg_uri3 = a.text[9:-10] + "?username=0mm022&password=db3fLs"
  27. response3 = requests.get(msg_uri3)
  28.  
  29. # wait until the get request in successful
  30. while response3.text == "Message unavailable" or response3.text == "Service unavailable":
  31. response3 = requests.get(msg_uri3)
  32. sleep(1)
  33.  
  34. root_av = ET.fromstring(response3.content)
  35. for av in root_av.iter('slot_id'):
  36. av_val = int(av.text)
  37. hotel_av.append(av_val)
  38.  
  39. print "Found available hotel slots."
  40. return hotel_av
  41.  
  42. # find available slots for bands
  43. def find_band():
  44. band_av = []
  45.  
  46. tree3 = ET.parse('availability.xml')
  47. root3 = tree3.getroot()
  48. tree3.find('.//request_id').text = str(uuid.uuid1())
  49. tree3.write('availability.xml')
  50.  
  51. av_data = open('availability.xml').read()
  52.  
  53. a = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=av_data, headers=headers)
  54. while a.text == "Message Unavailable" or a.text == "Service Unavailable":
  55. a = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=av_data, headers=headers)
  56. sleep(1)
  57.  
  58. msg_uri3 = a.text[9:-10] + "?username=0mm022&password=db3fLs"
  59. response3 = requests.get(msg_uri3)
  60.  
  61. # wait until the get request in successful
  62. while response3.text == "Message unavailable" or response3.text == "Service unavailable":
  63. response3 = requests.get(msg_uri3)
  64. sleep(1)
  65.  
  66. root_av = ET.fromstring(response3.content)
  67. for av in root_av.iter('slot_id'):
  68. av_val = int(av.text)
  69. band_av.append(av_val)
  70.  
  71. print "Found available band slots."
  72. return band_av
  73.  
  74. # find earlies slot that is free for both the hotel and the band
  75. def find_common_earliest(hotel_list, band_list):
  76. min = 100000;
  77. # slots that are free for both the hotel and the band
  78. common_av = set(hotel_list).intersection(band_list)
  79.  
  80. for slot in common_av:
  81. if slot < min:
  82. min = slot
  83.  
  84. print "Found earliest common slot - ", min
  85. return min
  86.  
  87. # find reservations made by you
  88. def find_my_hotel_reservations():
  89. my_res = []
  90.  
  91. tree4 = ET.parse('bookings.xml')
  92. root4 = tree4.getroot()
  93. tree4.find('.//request_id').text = str(uuid.uuid1())
  94. tree4.write('bookings.xml')
  95.  
  96. book_data = open('bookings.xml').read()
  97.  
  98. b = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=book_data, headers=headers)
  99. while b.text == "Message Unavailable" or b.text == "Service Unavailable":
  100. b = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=book_data, headers=headers)
  101. sleep(1)
  102.  
  103. msg_uri4 = b.text[9:-10] + "?username=0mm022&password=db3fLs"
  104. response4 = requests.get(msg_uri4)
  105.  
  106. # wait until the get request in successful
  107. while response4.text == "Message unavailable" or response4.text == "Service unavailable":
  108. response4 = requests.get(msg_uri4)
  109. sleep(1)
  110.  
  111. root_b = ET.fromstring(response4.content)
  112. for booking in root_b.iter('slot_id'):
  113. booking_val = int(booking.text)
  114. my_res.append(booking_val)
  115.  
  116. print "Found your hotel reservations."
  117. return my_res
  118.  
  119. def find_my_band_reservations():
  120. my_res = []
  121.  
  122. tree4 = ET.parse('bookings.xml')
  123. root4 = tree4.getroot()
  124. tree4.find('.//request_id').text = str(uuid.uuid1())
  125. tree4.write('bookings.xml')
  126.  
  127. book_data = open('bookings.xml').read()
  128.  
  129. b = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=book_data, headers=headers)
  130. while b.text == "Message Unavailable" or b.text == "Service Unavailable":
  131. b = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=book_data, headers=headers)
  132. sleep(1)
  133.  
  134. msg_uri4 = b.text[9:-10] + "?username=0mm022&password=db3fLs"
  135. response4 = requests.get(msg_uri4)
  136.  
  137. # wait until the get request in successful
  138. while response4.text == "Message unavailable" or response4.text == "Service unavailable":
  139. response4 = requests.get(msg_uri4)
  140. sleep(1)
  141.  
  142. root_b = ET.fromstring(response4.content)
  143. for booking in root_b.iter('slot_id'):
  144. booking_val = int(booking.text)
  145. my_res.append(booking_val)
  146.  
  147. print "Found your band reservations."
  148. return my_res
  149.  
  150. def cancel_res_hotel():
  151. my_res = find_my_hotel_reservations()
  152.  
  153. for res in my_res:
  154. tree2 = ET.parse('cancellations.xml')
  155. root2 = tree2.getroot()
  156. tree2.find('.//request_id').text = str(uuid.uuid1())
  157. tree2.find('.//slot_id').text = str(res)
  158. tree2.write('cancellations.xml')
  159.  
  160. cancel_data = open('cancellations.xml').read()
  161.  
  162. c = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=cancel_data, headers=headers)
  163. while c.text == "Message Unavailable" or c.text == "Service Unavailable":
  164. c = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=cancel_data, headers=headers)
  165. sleep(1)
  166.  
  167. msg_uri2 = c.text[9:-10] + "?username=0mm022&password=db3fLs"
  168. response2 = requests.get(msg_uri2)
  169.  
  170. # wait until the get request in successful
  171. while response2.text == "Message unavailable" or response2.text == "Service unavailable":
  172. response2 = requests.get(msg_uri2)
  173. sleep(1)
  174. print "Cancelled ", res, " for hotel."
  175.  
  176. def cancel_res_band():
  177. my_res = find_my_band_reservations()
  178.  
  179. for res in my_res:
  180. tree2 = ET.parse('cancellations.xml')
  181. root2 = tree2.getroot()
  182. tree2.find('.//request_id').text = str(uuid.uuid1())
  183. tree2.find('.//slot_id').text = str(res)
  184. tree2.write('cancellations.xml')
  185.  
  186. cancel_data = open('cancellations.xml').read()
  187.  
  188. c = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=cancel_data, headers=headers)
  189. while c.text == "Message Unavailable" or c.text == "Service Unavailable":
  190. c = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=cancel_data, headers=headers)
  191. sleep(1)
  192.  
  193. msg_uri2 = c.text[9:-10] + "?username=0mm022&password=db3fLs"
  194. response2 = requests.get(msg_uri2)
  195.  
  196. # wait until the get request in successful
  197. while response2.text == "Message unavailable" or response2.text == "Service unavailable":
  198. response2 = requests.get(msg_uri2)
  199. sleep(1)
  200. print "Cancelled ", res, " for band."
  201.  
  202. # reserve hotel
  203. def reserve_hotel():
  204. print "Trying to reserve hotel."
  205. res_data = open('reservations.xml').read()
  206.  
  207. # try reserve hotel
  208. r_hotel = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=res_data, headers=headers)
  209. while r_hotel.text == "Message Unavailable" or r_hotel.text == "Service Unavailable":
  210. r_hotel = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=res_data, headers=headers)
  211. sleep(1)
  212.  
  213. msg_uri_hotel = r_hotel.text[9:-10] + "?username=0mm022&password=db3fLs"
  214. response_hotel = requests.get(msg_uri_hotel)
  215. # wait until the get request in successful
  216. while response_hotel.text == "Message unavailable" or response_hotel.text == "Service unavailable":
  217. response_hotel = requests.get(msg_uri_hotel)
  218. sleep(1)
  219.  
  220. root = ET.fromstring(response_hotel.content)
  221. for code in root.iter('code'):
  222. # if reservations request fails, try again
  223. if int(code.text) != 200:
  224. print "Failed to reserve hotel."
  225. return False
  226. else:
  227. return True
  228. return False
  229.  
  230. def reserve_band():
  231. print "Trying to reserve band."
  232. res_data = open('reservations.xml').read()
  233. r_band = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=res_data, headers=headers)
  234. while r_band.text == "Message Unavailable" or r_band.text == "Service Unavailable":
  235. r_band = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=res_data, headers=headers)
  236. sleep(1)
  237.  
  238. msg_uri_band = r_band.text[9:-10] + "?username=0mm022&password=db3fLs"
  239. response_band = requests.get(msg_uri_band)
  240. # wait until the get request in successful
  241. while response_band.text == "Message unavailable" or response_band.text == "Service unavailable":
  242. response_band = requests.get(msg_uri_band)
  243. sleep(1)
  244.  
  245. root = ET.fromstring(response_band.content)
  246. for code in root.iter('code'):
  247. # if reservations request fails, try again
  248. if int(code.text) != 200:
  249. print "Failed to reserve band."
  250. return False
  251. else:
  252. return True
  253.  
  254. return False
  255.  
  256. # try to reserve the earliest available slot for the hotel and the band
  257. def try_reserve():
  258. # cancel all previous reservations
  259. cancel_res_hotel()
  260. cancel_res_band()
  261.  
  262. hotel_list = find_hotel()
  263. band_list = find_band()
  264.  
  265. tree1 = ET.parse('reservations.xml')
  266. root1 = tree1.getroot()
  267. tree1.find('.//request_id').text = str(uuid.uuid1())
  268. tree1.find('.//slot_id').text = str(find_common_earliest(hotel_list, band_list))
  269. tree1.write('reservations.xml')
  270.  
  271. rh = reserve_hotel()
  272. if rh == False:
  273. return False
  274.  
  275. tree1 = ET.parse('reservations.xml')
  276. root1 = tree1.getroot()
  277. tree1.find('.//request_id').text = str(uuid.uuid1())
  278. tree1.write('reservations.xml')
  279.  
  280. rb = reserve_band()
  281. if rb == False:
  282. cancel_res_hotel()
  283. return False
  284.  
  285. return True
  286.  
  287. def try_again(id):
  288. tree1 = ET.parse('reservations.xml')
  289. root1 = tree1.getroot()
  290. tree1.find('.//request_id').text = str(uuid.uuid1())
  291. tree1.find('.//slot_id').text = str(id)
  292. tree1.write('reservations.xml')
  293.  
  294. rh = reserve_hotel()
  295. if rh == False:
  296. return False
  297.  
  298. tree1 = ET.parse('reservations.xml')
  299. root1 = tree1.getroot()
  300. tree1.find('.//request_id').text = str(uuid.uuid1())
  301. tree1.write('reservations.xml')
  302.  
  303. rb = reserve_band()
  304. if rb == False:
  305. cancel_res_hotel()
  306. return False
  307.  
  308. return True
  309.  
  310. def check_for_new_min():
  311. hotel_res = find_my_hotel_reservations()
  312. band_res = find_my_band_reservations()
  313. print "Reserved hotel slot ", hotel_res[0], " and band slot ", band_res[0]
  314.  
  315. print "Checking for earlier slots."
  316. hotel_list = find_hotel()
  317. band_list = find_band()
  318. new_min = find_common_earliest(hotel_list, band_list)
  319. if new_min < hotel_res[0]:
  320. print "Trying to reserve slot ", new_min
  321. resp = try_again(new_min)
  322. if resp == True:
  323. print "Reserved hotel slot ", new_min, " and band slot ", new_min
  324. else:
  325. print "No earlier slots were found."
  326.  
  327. # try reserve the earliest available slot for the band
  328. response = try_reserve()
  329.  
  330. while response == False:
  331. response = try_reserve()
  332.  
  333. check_for_new_min()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement