jsonAndRequest.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. import json
  2. import requests
  3. import config
  4. import ast
  5. #Тестовый класс User и Address (ВАЖНО!!!) поля классов должны называться также как и поля json объекта
  6. '''
  7. #Full json order example
  8. https://wiki.sharix-app.org/doku.php/open/tech/dev/sharix_open_-_primery_json
  9. {
  10. "ticket": 123,
  11. "status": 111,
  12. "priority": 1,
  13. "title": "123",
  14. "note": "123",
  15. "due_date": 2023-05-15T17:16:22.955601Z,
  16. "id_metaservice": 1,
  17. "is_global": false,
  18. "is_visible": false,
  19. "service": 1,
  20. "service_type": 1,
  21. "status_changed_date": "2023-05-15T17:16:22.955601Z",
  22. "time_placed": "2023-05-15T16:40:32.179777Z",
  23. "time_start": "2023-05-15T16:40:32.179777Z",
  24. "time_start_predicted": "2023-05-15T16:40:32.179777Z",
  25. "time_finish_predicted": "2023-05-15T16:40:32.179777Z",
  26. "time_start_real": "2023-05-15T16:40:32.179777Z",
  27. "time_finish_real": "2023-05-15T16:40:32.179777Z",
  28. "order_place_type": "address",
  29. "order_place_start": "р-н Беговой",
  30. "order_place_start_gps": "55.751941, 37.607513",
  31. "order_place_start_sector": 4,
  32. "order_place_start_real": "р-н Беговой",
  33. "order_place_start_real_gps": "55.751941, 37.607513",
  34. "order_place_finish_predicted": "р-н Мещанский",
  35. "order_place_finish_predicted_gps": "55.751941, 37.607513",
  36. "order_place_finish_sector": 4,
  37. "order_place_finish_real": "р-н Мещанский",
  38. "order_place_finish_real_gps": "55.751941, 37.607513",
  39. "predicted_price": 1000,
  40. "real_price": 1001,
  41. "payment_transaction_id": 1,
  42. "rating_id": 1,
  43. "provider": 1,
  44. "provider_screen_name": "Vasya Ispolnitelev",
  45. "receiver": 1,
  46. "receiver_screen_name": "Marfa Clientovna",
  47. "client_id": 1,
  48. "client_screen_name": "Fedor Client",
  49. "resource_id": 1,
  50. "attempts": null
  51. }
  52. '''
  53. #надо адаптировать класс к новому формату JSON
  54. # class Order(object):
  55. # def __init__(self, id,order_synced, ticket, status, title, note, due_date, id_metaservice, is_global, is_visible, service, service_type, status_changed_date,time_created, time_placed, time_start=None, time_start_predicted=None, time_finish_predicted=None, time_start_real=None, time_finish_real=None, order_place_type=None, order_place_start=None, order_place_start_gps=None, order_place_start_real=None, order_place_start_real_gps=None, order_place_finish_predicted=None, order_place_finish_predicted_gps=None, order_place_finish_real=None, order_place_finish_real_gps=None, predicted_price=None, real_price=None, payment_transaction_id=None, rating_id=None, provider=None, provider_screen_name=None, receiver=None, receiver_screen_name=None, client_id=None, resource_id=None, attempts=None, asap=None):
  56. # self.order_synced = order_synced
  57. # self.id = id
  58. # self.ticket = ticket
  59. # self.status = status
  60. # self.title = title
  61. # self.note = note
  62. # self.due_date = due_date
  63. # self.id_metaservice = id_metaservice
  64. # self.is_global = is_global
  65. # self.is_visible = is_visible
  66. # self.service = service
  67. # self.service_type = service_type
  68. # self.status_changed_date = status_changed_date
  69. # self.time_created = time_created
  70. # self.time_placed = time_placed
  71. # self.time_start = time_start
  72. # self.time_start_predicted = time_start_predicted
  73. # self.time_finish_predicted = time_finish_predicted
  74. # self.time_start_real = time_start_real
  75. # self.time_finish_real = time_finish_real
  76. # self.order_place_type =order_place_type
  77. # self.order_place_start = order_place_start
  78. # self.order_place_start_gps = order_place_start_gps
  79. # self.order_place_start_real = order_place_start_real
  80. # self.order_place_start_real_gps = order_place_start_real_gps
  81. # self.order_place_finish_predicted = order_place_finish_predicted
  82. # self.order_place_finish_predicted_gps = order_place_finish_predicted_gps
  83. # self.order_place_finish_real = order_place_finish_real
  84. # self.order_place_finish_real_gps = order_place_finish_real_gps
  85. # self.predicted_price = predicted_price
  86. # self.real_price = real_price
  87. # self.payment_transaction_id = payment_transaction_id
  88. # self.rating_id = rating_id
  89. # self.provider = provider
  90. # self.provider_screen_name = provider_screen_name
  91. # self.receiver = receiver
  92. # self.receiver_screen_name = receiver_screen_name
  93. # self.client_id = client_id
  94. # self.resource_id = resource_id
  95. # self.attempts = attempts
  96. # self.asap = asap
  97. # #доделать до конца по аналогии с закоммиченным json
  98. # def __str__(self):
  99. # return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31}, {32} , {33} ,{34}".format(self.order_synced, self.id, self.ticket, self.status, self.title, self.note, self.due_date, self.id_metaservice, self.is_global, self.is_visible, self.service, self.service_type, self.status_changed_date, self.time_created,self.time_placed, self.time_start, self.time_start_predicted, self.time_finish_predicted, self.time_start_real, self.time_finish_real, self.order_place_type, self.order_place_start, self.order_place_start_gps, self.order_place_start_real, self.order_place_start_real_gps, self.order_place_finish_predicted, self.order_place_finish_predicted_gps, self.order_place_finish_real, self.order_place_finish_real_gps, self.predicted_price, self.real_price, self.payment_transaction_id, self.rating_id, self.provider, self.provider_screen_name, self.receiver, self.receiver_screen_name, self.client_id, self.resource_id, self.attempts, self.asap)
  100. #\n добавляете в местах с пустой строкой в шаблоне
  101. class Order(object):
  102. def __init__(self, id, ticket, status, title, note, id_metaservice, is_global, is_visible, service, service_type, time_created, time_placed, time_start=None, time_start_predicted=None, time_finish_predicted=None, time_start_real=None, time_finish_real=None, order_place_type=None, order_place_start=None, order_place_start_gps=None, order_place_start_real=None, order_place_start_real_gps=None, order_place_finish_predicted=None, order_place_finish_predicted_gps=None, order_place_finish_real=None, order_place_finish_real_gps=None, predicted_price=None, real_price=None, payment_transaction_id=None, rating_id=None, provider=None, provider_screen_name=None, receiver=None, receiver_screen_name=None, client_id=None, resource_id=None, attempts=None, asap=None, money_limit=None, tasks=None, proceed_before_arrival=False, confirmation=False):
  103. self.id = id
  104. self.ticket = ticket
  105. self.status = status
  106. self.title = title
  107. self.note = note
  108. self.id_metaservice = id_metaservice
  109. self.is_global = is_global
  110. self.is_visible = is_visible
  111. self.service = service
  112. self.service_type = service_type
  113. self.time_created = time_created
  114. self.time_placed = time_placed
  115. self.time_start = time_start
  116. self.time_start_predicted = time_start_predicted
  117. self.time_finish_predicted = time_finish_predicted
  118. self.time_start_real = time_start_real
  119. self.time_finish_real = time_finish_real
  120. self.order_place_type = order_place_type
  121. self.order_place_start = order_place_start
  122. self.order_place_start_gps = order_place_start_gps
  123. self.order_place_start_real = order_place_start_real
  124. self.order_place_start_real_gps = order_place_start_real_gps
  125. self.order_place_finish_predicted = order_place_finish_predicted
  126. self.order_place_finish_predicted_gps = order_place_finish_predicted_gps
  127. self.order_place_finish_real = order_place_finish_real
  128. self.order_place_finish_real_gps = order_place_finish_real_gps
  129. self.predicted_price = predicted_price
  130. self.real_price = real_price
  131. self.payment_transaction_id = payment_transaction_id
  132. self.rating_id = rating_id
  133. self.provider = provider
  134. self.provider_screen_name = provider_screen_name
  135. self.receiver = receiver
  136. self.receiver_screen_name = receiver_screen_name
  137. self.client_id = client_id
  138. self.resource_id = resource_id
  139. self.attempts = attempts
  140. self.asap = asap
  141. self.money_limit = money_limit
  142. self.tasks = tasks
  143. self.proceed_before_arrival = proceed_before_arrival
  144. self.confirmation = confirmation
  145. def __str__(self):
  146. return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31}, {32}, {33}, {34}, {35}, {36}, {37}, {38}".format(self.id, self.ticket, self.status, self.title, self.note, self.id_metaservice, self.is_global, self.is_visible, self.service, self.service_type, self.time_created, self.time_placed, self.time_start, self.time_start_predicted, self.time_finish_predicted, self.time_start_real, self.time_finish_real, self.order_place_type, self.order_place_start, self.order_place_start_gps, self.order_place_start_real, self.order_place_start_real_gps, self.order_place_finish_predicted, self.order_place_finish_predicted_gps, self.order_place_finish_real, self.order_place_finish_real_gps, self.predicted_price, self.real_price, self.payment_transaction_id, self.rating_id, self.provider, self.provider_screen_name, self.receiver, self.receiver_screen_name, self.client_id, self.resource_id, self.attempts, self.asap, self.money_limit, self.tasks, self.proceed_before_arrival, self.confirmation)
  147. #ticket json example
  148. '''
  149. {
  150. "id": 2,
  151. "status": 111,
  152. "created_date": "2023-05-15",
  153. "status_changed_date": "2023-05-15T17:16:22.955601Z",
  154. "priority": 0,
  155. "title": "Test",
  156. "note": "{\n \n \"ticket\": 1,\n \"state\": 1,\n \"id_metaservice\": 1,\n \"is_global\": false,\n \"is_visible\": false,\n \"service\": 1,\n \"service_type\": 1,\n\n \"time_placed\": 1}"
  157. "due_date": "2023-05-15",
  158. "task_list": 10,
  159. "created_by": 1,
  160. "type": 1,
  161. "assigned_to": 1
  162. }
  163. '''
  164. #ticket minimal example
  165. '''
  166. {
  167. "id": 2,
  168. "status": 111,
  169. "created_date": "2023-05-15",
  170. "status_changed_date": "2023-05-15T17:16:22.955601Z",
  171. "priority": 0,
  172. "title": null,
  173. "note": null,
  174. "due_date": null,
  175. "task_list": 10,
  176. "created_by": 1,
  177. "type": 1,
  178. "assigned_to": null
  179. }
  180. {
  181. "serviceType": 2,
  182. "driverSearchEngine": 0,
  183. "comment": "Yyyy",
  184. "arrivalTime": "2023-12-07T14:39:54Z",
  185. "additionalServices": [],
  186. "tasks": [
  187. {
  188. "text": "Eeee",
  189. "address": "Jjjj"
  190. }
  191. ],
  192. "spendingLimit": 6668,
  193. "isWithPaymentDocument": true,
  194. "id": 294830,
  195. "isProceedBeforeArrival": true
  196. }
  197. '''
  198. class OrderTicket(object):
  199. def __init__(self, serviceType, driverSearchEngine, comment, arrivalTime, additionalServices, tasks, spendingLimit, isWithPaymentDocument, id, isProceedBeforeArrival):
  200. self.serviceType = serviceType
  201. self.driverSearchEngine = driverSearchEngine
  202. self.comment = comment
  203. self.arrivalTime = arrivalTime
  204. self.additionalServices = additionalServices
  205. self.tasks = tasks
  206. self.spendingLimit = spendingLimit
  207. self.isWithPaymentDocument = isWithPaymentDocument
  208. self.id = id
  209. self.isProceedBeforeArrival = isProceedBeforeArrival
  210. # class OrderTicketOLD(object):
  211. # def __init__(self, id, status, created_date, status_changed_date, priority, title=None, note=None, due_date=None, task_list=None, created_by=None, type=None, assigned_to=None):
  212. # self.id = id
  213. # self.status = status
  214. # self.created_date = created_date
  215. # self.status_changed_date = status_changed_date
  216. # self.priority = priority
  217. # self.title = title
  218. # self.note = note
  219. # self.due_date = due_date
  220. # self.task_list = task_list
  221. # self.created_by = created_by
  222. # self.type = type
  223. # self.assigned_to = assigned_to
  224. # def __str__(self):
  225. # return "{0}, {1}, {2}, {3}, {4}, {5}, {6},\n{7}, {8}, {9}, {10}, {11}\n".format(self.id, self.status, self.created_date, self.status_changed_date, self.priority, self.title, self.note, self.due_date, self.task_list, self.created_by, self.type, self.assigned_to)
  226. #Функция преобразования json в объект класса Order
  227. def jsonToOrder(jsonstring) -> Order:
  228. jsonObj = json.loads(jsonstring)
  229. print(jsonObj)
  230. u = Order(**jsonObj)
  231. return u
  232. #Функция преобразования json в объект класса OrderTicket
  233. def jsonToOrderTicket(jsonstring) -> OrderTicket:
  234. print (jsonstring)
  235. jsonObj = json.loads(jsonstring)
  236. print(jsonObj)
  237. u = OrderTicket(**jsonObj)
  238. return u
  239. #Функция обращения к апи и получение токена
  240. def requestGetToken(login, password, url) -> str:
  241. login = "79999999999"
  242. password = "12345"
  243. # login = "11111111111"
  244. # password = "Sharix!"
  245. #url = "https://user.sharix-app.org/auth/token/login/"
  246. data = {
  247. "password":password,
  248. "phone_number":login
  249. }
  250. response = requests.post(url,json=data)
  251. result = response.json()
  252. return result['auth_token']
  253. #Функция обращения к апи и получение токена
  254. def msg_to_text(jsonstring):
  255. jsonObj = json.loads(jsonstring)
  256. u = jsonObj
  257. return u
  258. def createUser(username, phone, password, url) -> str:
  259. data = {
  260. "username": username,
  261. "phone_number": phone,
  262. "password": password
  263. }
  264. response = requests.post(url, json=data)
  265. result = response.json()
  266. return result
  267. #Функция обращения к апи и получение списка пользователей
  268. class Ticket(object):
  269. def __init__(self, id, name, group):
  270. self.id = id
  271. self.name = name
  272. self.group = group
  273. def __str__(self):
  274. return "{0}, {1}, {2},\n".format(self.id, self.name, self.group)
  275. def requestGetListUser():
  276. auth_token=requestGetToken()
  277. print(auth_token)
  278. headers = {'Authorization': f'Token {auth_token}'}
  279. url = 'https://user.sharix-app.org/platform/api/sharix-users/'
  280. response = requests.get(url, headers=headers)
  281. print(response)
  282. print(response.json())
  283. # def requestGetList(auth_token, url):
  284. # headers = {'Authorization': f'Token {auth_token}'}
  285. # response = requests.get(url, headers=headers)
  286. # #response = requests.get(config.API_URL+"/dbsynce/api/orders/", headers=headers)
  287. # ordertext=response.json()
  288. # startlist = []
  289. # if not ordertext:
  290. # print("Empty array")
  291. # else:
  292. # for i in ordertext:
  293. # print (i, "PROCESSING")
  294. # try:
  295. # orderticket = OrderTicket(**i)
  296. # print(i, "ORDER ", orderticket)
  297. # startlist.append(orderticket)
  298. # except Exception as ex:
  299. # print(ex)
  300. # print (startlist)
  301. # return startlist
  302. def requestGetList(auth_token, url):
  303. headers = {'Authorization': f'Token {auth_token}'}
  304. response = requests.get(url, headers=headers)
  305. #response = requests.get(config.API_URL+"/dbsynce/api/orders/", headers=headers)
  306. ordertext=response.json()
  307. startlist = []
  308. if not ordertext:
  309. print("Empty array")
  310. else:
  311. for i in ordertext:
  312. print (i, "PROCESSING")
  313. try:
  314. order = Order(**i)
  315. print(i, "ORDER ", order)
  316. startlist.append(order)
  317. except Exception as ex:
  318. print(ex)
  319. print (startlist)
  320. return startlist
  321. class Ticket_user(object):
  322. def __init__(self, id, status, title, ticket_type, created_at, updated_at, due_date, priority, created_by, assigned_to):
  323. self.id = id
  324. self.status = status
  325. self.title = title
  326. self.ticket_type = ticket_type
  327. self.created_at = created_at
  328. self.updated_at = updated_at
  329. self.due_date = due_date
  330. self.priority = priority
  331. self.created_by = created_by
  332. self.assigned_to = assigned_to
  333. def __str__(self):
  334. return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}\n".format(
  335. self.id, self.status, self.title, self.ticket_type, self.created_at,
  336. self.updated_at, self.due_date, self.priority,
  337. self.created_by, self.assigned_to
  338. )
  339. def requestGetTicket_user(auth_token, url):
  340. headers = {'Authorization': f'Token {auth_token}'}
  341. response = requests.get(url, headers=headers)
  342. #response = requests.get(config.API_URL+"/dbsynce/api/orders/", headers=headers)
  343. tickettext=response.json()
  344. startlist = []
  345. if not tickettext:
  346. print("Empty array")
  347. else:
  348. for i in tickettext:
  349. try:
  350. ticket = Ticket_user(**i)
  351. startlist.append(ticket)
  352. except Exception as ex:
  353. print(ex)
  354. print (startlist)
  355. return startlist
  356. def requestPatchTicketUser(token,url, data):
  357. headers = {'Authorization': f'Token {token}'}
  358. response = requests.patch(url, json=data, headers=headers)
  359. return response
  360. def change_groups(auth_token, url,group):
  361. headers = {
  362. 'Content-Type': 'application/json',
  363. 'Authorization': f'Token {auth_token}'
  364. }
  365. response = requests.get(url, headers=headers)
  366. user_data = response.json()
  367. current_groups = user_data.get('groups', [])
  368. updated_groups = list(set([group]+current_groups))
  369. data = {'groups': updated_groups}
  370. print(data)
  371. response = requests.put(url, json=data, headers=headers)
  372. print(url)
  373. print(user_data)
  374. return response
  375. def change_status_company(auth_token, url,id_metaservice):
  376. headers = {
  377. 'Content-Type': 'application/json',
  378. 'Authorization': f'Token {auth_token}'
  379. }
  380. response = requests.get(url, headers=headers)
  381. user_data = response.json()
  382. print(user_data)
  383. current_metaservice = user_data.get('id_metaservice', [])
  384. repsonse = requests.put(config.API_URL+f"dbsynce/api/company/{id_metaservice}", json=data, headers=headers)
  385. return response
  386. class answer(object):
  387. def __init__(self,order_id,provider,answer):
  388. self.order_id = order_id
  389. self.provider = provider
  390. self.answer = answer
  391. def to_answer(jsonstring):
  392. json_answer = json.loads(jsonstring)
  393. print(json_answer)
  394. u = answer(**json_answer)
  395. return u
  396. def change_to_task(localtask,token):
  397. headers = {
  398. 'Authorization': f'Token {token}',
  399. 'Content-Type': 'application/json' # Установка заголовка Content-Type
  400. }
  401. data = json.dumps(localtask.__dict__)
  402. response = requests.patch(config.API_URL+f"/dbsynce/api/orders/{localtask.id}/", headers=headers, data=data)
  403. return response