from datetime import timedelta, datetime
import matplotlib.pyplot as plt
from matplotlib import dates
import pandas as pd
import numpy as np
import requests
import pytest
import datetime
from dateutil.relativedelta import relativedelta
now = datetime.datetime.now()
old = now + relativedelta(hours=-1)
class ApiClient:
def __init__(self, base_address):
self.base_address = base_address
def post(self, path="/", params=None, data=None, json=None, headers=None):
url = f"{self.base_address}{path}"
return requests.post(url=url, params=params, data=data, json=json, headers=headers)
def get(self, path="/", params=None, headers=None):
url = f"{self.base_address}{path}"
return requests.get(url=url, params=params, headers=headers)
@pytest.fixture
def ol_api():
return ApiClient(base_address="https://api.owencloud.ru/")
def test_create_token(ol_api):
data = "{ "login" : "demo@owen.ru", "password" : "demo123" }"
response = ol_api.post(path="v1/auth/open",data=data)
assert response.status_code == 200, f"Неверный код ответа, получен {response.status_code}"
response = response.json()
return response["token"]
def test_info_pribors(ol_api, token):
headers = { 'Authorization' : 'Bearer ' + token }
response = ol_api.post("v1/device/index",headers=headers)
assert response.status_code == 200, f"Неверный код ответа, получен {response.status_code}"
#response = response.json()
#for unit in response:
# print(unit["id"],unit["name"])
def test_info_prib(ol_api, token, unit):
headers = { 'Authorization' : 'Bearer ' + token }
response = ol_api.post("v1/device/"+unit,headers=headers)
assert response.status_code == 200, f"Неверный код ответа, получен {response.status_code}"
response = response.json()
unit = response["parameters"][0]
return unit["id"]
def test_data(ol_api, token, stuff):
headers = { 'Authorization' : 'Bearer ' + token }
data = "{ "ids" : "+str(stuff)+", "start" : ""+old.strftime("%Y-%m-%d %H:%M:%S")+"", "end" : ""+now.strftime("%Y-%m-%d %H:%M:%S")+"", "step" : 100 }"
print(data)
response = ol_api.post("v1/parameters/data",headers=headers,data=data)
assert response.status_code == 200, f"Неверный код ответа, получен {response.status_code}"
response = response.json()
fig, ax = plt.subplots(figsize = [18,6], nrows = 1)
plt.title('Данные из разных источников')
for unit in response:
refer = unit["values"]
col_name = ['PARAMETER']
df = pd.DataFrame(columns=col_name)
for val in refer:
df.loc[pd.to_datetime(val["d"], unit='s')] = [val["v"]]
df = df.astype('float32')
ax.plot(df.index, df['PARAMETER'], label= 'ID параметра:'+str(unit['id']) )
ax.legend(loc = 'upper left', prop=dict(size=12))
ax.tick_params(axis = 'x', labelrotation = 45)
plt.show()
sec_token = ''
id_param = list()
if __name__ == "__main__":
sec_token = test_create_token(ol_api())
test_info_pribors(ol_api(),sec_token)
id_param.append( test_info_prib(ol_api(),sec_token,'43539') )
id_param.append( test_info_prib(ol_api(),sec_token,'43543') )
id_param.append( test_info_prib(ol_api(),sec_token,'43549') )
test_data(ol_api(),sec_token,id_param)