Эх сурвалжийг харах

added functions: create, createOrder, testCreateOrder

Vitaliy Kungurtsev 1 жил өмнө
parent
commit
91bcfdda19

+ 0 - 17
config_template.py

@@ -1,17 +0,0 @@
-#rename this file to config.py
-#JID="example@msg.sharix-app.org"
-BOTLIST=["open_template_bot","open_strequest_assigned","open_strequest_inprocess","open_strequest_new","open_strequest_reopened","open_strequest_wontfix","open_strequest_done","open_strequest_duplicate","open_strequest_closed","open_accessrequest_pending","open_accessrequest_accepted","open_accessrequest_declined","open_negrequest_pending","open_negrequest_accepted","open_negrequest_declined","open_servicerequest_template","open_servicerequest_booked","open_servicerequest_assigned","open_servicerequest_accepted","open_servicerequest_pending","open_servicerequest_declined","open_servicerequest_prestart","open_servicerequest_process","open_servicerequest_forcemajeure","open_servicerequest_forcemajeurecancelled","open_servicerequest_done","open_servicerequest_cancelled","open_servicerequest_closed"]
-JSERVER="ej.sharix-app.org"
-PASSWORD="12345"
-PORT=349
-API_URL = "https://testbase.sharix-app.org"
-#AUTH_API_URL = "https://testbase.sharix-app.org/auth/token/login/"
-#REG_API_URL = "https://testbase.sharix-app.org/v1/auth/users/"
-#тут надо указывать еще порт сервера
-
-#первое время пусть пароль будет у всех обработчиков одинаковый, далее надо будет генерировать уникальные связки на основе логина и ключа, указанного в файле.
-
-# бот в конверс
-
-# JID="bottickets@msg.sharix-app.org"
-# PASSWORD="12345!"

+ 148 - 3
jsonAndRequest.py

@@ -3,8 +3,9 @@ import requests
 import config
 import ast
 import logging
-import loggingConfig
-import pprint
+import loggingConfig 
+import pprint # Форматирование текста в human readable формате
+import sys
 
 #Тестовый класс User и Address (ВАЖНО!!!) поля классов должны называться также как и поля json объекта
 '''
@@ -140,6 +141,58 @@ class Order(object):
 }
 '''
 
+orderJson = {
+    "ticket": 123,
+    "status": 111,
+
+    "priority": 1, 
+    "title": "123",
+    "note": "123", 
+    "due_date": "2000-01-01",
+
+    "id_metaservice": 1,
+    "is_global": False,
+    "is_visible": False,
+    "service": 1,
+    "service_type": 1,
+
+    "status_changed_date": "2023-05-15T17:16:22.955601Z", 
+    "time_placed": "2023-05-15T16:40:32.179777Z",
+    "time_start": "2023-05-15T16:40:32.179777Z", 
+    "time_start_predicted": "2023-05-15T16:40:32.179777Z",
+    "time_finish_predicted": "2023-05-15T16:40:32.179777Z",
+    "time_start_real": "2023-05-15T16:40:32.179777Z",
+    "time_finish_real": "2023-05-15T16:40:32.179777Z",
+
+    "order_place_type": "address",
+    "order_place_start": "р-н Беговой",
+    "order_place_start_gps": "55.751941, 37.607513",
+    "order_place_start_sector": 4,
+    "order_place_start_real": "р-н Беговой",
+    "order_place_start_real_gps": "55.751941, 37.607513",
+    "order_place_finish_predicted": "р-н Мещанский",
+    "order_place_finish_predicted_gps": "55.751941, 37.607513",
+    "order_place_finish_sector": 4,
+    "order_place_finish_real": "р-н Мещанский",
+    "order_place_finish_real_gps": "55.751941, 37.607513",
+
+    "predicted_price": 1000,
+    "real_price": 1001,
+    "payment_transaction_id": 1, 
+    "rating_id": 1,
+
+    "provider": 1,  
+    "provider_screen_name": "Vasya Ispolnitelev",
+    "receiver": 1,
+    "receiver_screen_name": "Marfa Clientovna",
+    "client_id": 1, 
+    "client_screen_name": "Fedor Client",
+    "resource_id": None, 
+    "attempts": None,
+    "state": "ok"
+
+}
+
 class OrderTicket(object):
     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):
         self.id = id
@@ -188,6 +241,7 @@ def requestGetToken(login, password, url) -> str:
     response = requests.post(url, json=data)
     result = response.json()
     return result['auth_token']
+
 #Функция обращения к апи и получение токена
 def createUser(username, phone, password, url) -> str:
     data = {
@@ -198,6 +252,7 @@ def createUser(username, phone, password, url) -> str:
     response = requests.post(url, json=data)
     result = response.json()
     return result
+
 #Функция обращения к апи и получение списка пользователей
 def requestGetListUser():
     auth_token=requestGetToken()
@@ -212,15 +267,18 @@ def requestGetListUser():
     logging.debug(f"Auth token: {response.json()}")
 
 
+
 def requestGetList(auth_token, url):
     #auth_token=requestGetToken(login, password, url)
     #print(auth_token)
     headers = {'Authorization': f'Token {auth_token}'}
     #url = 'https://user.sharix-app.org/platform/api/sharix-users/'
+    
     response = requests.get(config.API_URL+"/tickets/api/tickets/?list_id=10", headers=headers)
+    
     #response = requests.get(config.API_URL+"/metaservicesynced/api/orders/", headers=headers)
     #print(response)
-    logging.debug(response)
+    
     #return response.json()
     #print(response.json())
     logging.debug(pprint.pformat(response.json()))
@@ -263,7 +321,87 @@ def requestGetList(auth_token, url):
     return startlist
 
 
+def update_partially(url, field, value, headers):
+    """
+    Изменить конкретное поле
+    """
+    return
 
+
+def create(url, json, headers) -> str:
+    """
+    Создать элемент с помощью POST
+    Возвращает: json строку с данными созданного элемента или ошибки
+    Статус выполнения: проверена работа на локальном сервере
+    """
+    response = requests.post(url, json=json, headers=headers)
+    if response.status_code != 201:
+        logging.error(response.json())
+        return
+    
+    return response.json()
+
+
+def createOrder(url, order, headers):
+    """
+    Создать заказ
+    Возвращает: json строку с данными созданного заказа или ошибки
+    Статус выполнения: проверена работа на локальном сервере
+    """
+    # Конвертировать объект в json
+    try:
+        json = vars(order)
+    except Exception as e:
+        logging.error("Ошибка конвертации в json", exc_info=True)
+        return
+    
+    logging.info("Успешная конвертация в json")
+    logging.debug(pprint.pformat(json))
+    
+    # Создать заказ
+    # none - ошибка создания, json строка - успешное создание
+    created_json = create(url, json, headers)
+
+    # Проверить успешность создания
+    if created_json:
+        logging.info("Заказ успешно создан.")
+        return created_json
+
+    logging.info("Ошибка создания заказа.")
+    return 
+        
+
+def testCreateOrder():
+    """
+    Код для тестирования создания заказа
+    """
+
+    test_token = "4a9333794bb8296083aaa898954affe6a74e6a20"
+    test_headers = {'Authorization': f'Token {test_token}'}
+
+    try:
+        order1 = Order(
+            ticket=1,
+            state=1,
+            id_metaservice=1,
+            is_global=1,
+            is_visible=1,
+            service=1,
+            service_type=1,
+            time_placed="2000-01-01",
+            order_place_finish_predicted_gps="55.751941, 37.607513"
+        )
+    except Exception as e:
+        logging.error("order wasn't created", exc_info=True)
+        sys.exit()
+    else: 
+        logging.info("order created successfully")
+        createOrder("http://127.0.0.1:8000/openlocal/api/orderslocal/", order1, test_headers)
+
+
+
+'''
+https://testbase.sharix-app.org/openlocal/api/orderslocal/
 уже есть:
 чтение
 
@@ -278,3 +416,10 @@ def requestGetList(auth_token, url):
 
 отправлять vs создать
 
+
+
+вложенные json убрать (сделать одноуровневым)
+вернуть attempts  в json
+
+xmpppy как отправлять сообшение в группу?
+'''

+ 14 - 2
loggingConfig.py

@@ -1,5 +1,17 @@
+# Настройка работы библиотеки logging
+
 import logging
-logging.basicConfig(filename='app.log', filemode='w', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(module)s/%(funcName)s/%(lineno)d : %(message)s', datefmt='%d/%m/%y %H:%M:%S')
+import sys
+
+logging.basicConfig(
+    level=logging.DEBUG, 
+    format='%(asctime)s [%(levelname)s] - %(module)s/%(funcName)s/%(lineno)d : %(message)s', 
+    datefmt='%d/%m/%y %H:%M:%S',
+    handlers=[
+        logging.FileHandler("app.log", "w"), # Запись в файл
+        logging.StreamHandler(sys.stdout), # Вывод в консоль
+    ]
+)
 
-# Раскомментируй, чтобы полностью отключить добавление в .log файл (создатся пустой)
+# Раскомментируй, чтобы полностью отключить logging (note: создатся пустой .log)
 # logging.disable(logging.CRITICAL)

+ 1 - 0
open_template_bot.py

@@ -145,6 +145,7 @@ tasklist = []
 #надо инициализировать tasklist при запуске из API
 logging.info("Инициализация токена...")
 token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+print(token)
 logging.info("Токен инициализирован")
 logging.debug(f"token: {token}")