Skip to content

Commit

Permalink
tele2 float sms
Browse files Browse the repository at this point in the history
  • Loading branch information
artyl committed Nov 19, 2022
1 parent 5c211e4 commit 4531ac0
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 24 deletions.
3 changes: 3 additions & 0 deletions changelist.md
Original file line number Diff line number Diff line change
Expand Up @@ -444,3 +444,6 @@ ADD: Сделал опцию прибавить Balance2 к основному
ADD: Можно использовать mbplugin как библиотеку в собственном коде (пока в стадии beta).
FIX: Похоже zadarma проводит ребрендинг на novofon, сам сайт по старому открывается, но авторизация переехала на новый адрес
FIX: Исправлена работа tele2 API

## mbplugin v1.00.41 (19.11.22) tele2 float sms
FIX: У Теле2 для sms теперь float (как оказалось я этот вариант пропустил). Это наверное чтобы 2.5 SMS отправлять
34 changes: 16 additions & 18 deletions plugin/store.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,26 @@ def validate_json(data):
return False # Invalid JSON
return True # Valid JSON

def fix_num_params(result, int_params):
'Коррекция SMS и Min (должны быть integer или приводится к integer), округление - удаление микрокопеек'
for param in int_params:
if param in result:
result[param] = str(result[param])
if re.match(r'^-?\d+(?:\.\d+)?$', result[param]):
result[param] = int(float(result[param]))
else:
logging.error(f'Bad {param} value: {result[param]}')
del result[param]
for k, v in result.items():
if type(v) == float:
result[k] = round(v, 2) # Чтобы не было паразитных микрокопеек
return result

def correct_result(result):
'Дополнительные коррекции после проверки'
if type(result) != dict:
return result
result = fix_num_params(result, int_params=['SMS', 'Min'])
if 'Balance' in result and 'Balance2' in result:
if options('balance2') == 'swap':
result['Balance'], result['Balance2'] = result['Balance2'], result['Balance']
Expand Down Expand Up @@ -526,32 +542,14 @@ def read_stocks(stocks_name):
return stocks


def fix_int_params(result, params):
'Коррекция SMS и Min (должны быть integer или приводится к integer)'
for param in params:
if param in result:
result[param] = str(result[param])
if result[param].isdigit():
result[param] = int(result[param])
else:
logging.error(f'Bad {param} value: {result[param]}')
del result[param]
return result


def result_to_xml(result):
'Конвертирует словарь результатов в готовый к отдаче вид '
result = fix_int_params(result, params=['SMS', 'Min'])
for k, v in result.items():
if type(v) == float:
result[k] = round(v, 2) # Чтобы не было паразитных микрокопеек
body = ''.join([f'<{k}>{v}</{k}>' for k, v in result.items()])
return f'<Response>{body}</Response>'


def result_to_html(result):
'Конвертирует словарь результатов в готовый к отдаче вид '
result = fix_int_params(result, params=['SMS', 'Min'])
body = json.dumps(result, ensure_ascii=False)
return f'<html><meta charset="windows-1251"><p id=response>{body}</p></html>'

Expand Down
16 changes: 10 additions & 6 deletions tests/test_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,31 @@ def test_ini_class_phones_ini_write():


@pytest.fixture(scope="function", params=[
({'Balance': 124.45, 'SMS': 43, 'Min': 222}, '<Response><Balance>124.45</Balance><SMS>43</SMS><Min>222</Min></Response>'),
({'Balance': 124.45, 'SMS': '43', 'Min': '222'}, '<Response><Balance>124.45</Balance><SMS>43</SMS><Min>222</Min></Response>'),
({'Balance': 123.45, 'SMS': 43, 'Min': 222}, '<Response><Balance>123.45</Balance><SMS>43</SMS><Min>222</Min></Response>'),
({'Balance': -224.45, 'SMS': 53.3, 'Min': 333.3}, '<Response><Balance>-224.45</Balance><SMS>53</SMS><Min>333</Min></Response>'),
({'Balance': 324.45, 'SMS': '63', 'Min': '444'}, '<Response><Balance>324.45</Balance><SMS>63</SMS><Min>444</Min></Response>'),
])
def param_test_result_to_xml(request):
return request.param

def test_result_to_xml(param_test_result_to_xml):
(input, expected_result) = param_test_result_to_xml
result = store.result_to_xml(input)
input_prep = store.fix_num_params(input, int_params=['SMS', 'Min'])
result = store.result_to_xml(input_prep)
print(f"input={input} result={result} expected_result={expected_result}")
assert result == expected_result

@pytest.fixture(scope="function", params=[
({'Balance': 124.45, 'SMS': 43, 'Min': 222}, '<html><meta charset="windows-1251"><p id=response>{"Balance": 124.45, "SMS": 43, "Min": 222}</p></html>'),
({'Balance': 124.45, 'SMS': '43', 'Min': '222'}, '<html><meta charset="windows-1251"><p id=response>{"Balance": 124.45, "SMS": 43, "Min": 222}</p></html>'),
({'Balance': 424.45, 'SMS': 43, 'Min': 222}, '<html><meta charset="windows-1251"><p id=response>{"Balance": 424.45, "SMS": 43, "Min": 222}</p></html>'),
({'Balance': -524.45, 'SMS': 53.0, 'Min': 333.0}, '<html><meta charset="windows-1251"><p id=response>{"Balance": -524.45, "SMS": 53, "Min": 333}</p></html>'),
({'Balance': 624.45, 'SMS': '63', 'Min': '444'}, '<html><meta charset="windows-1251"><p id=response>{"Balance": 624.45, "SMS": 63, "Min": 444}</p></html>'),
])
def param_test_result_to_html(request):
return request.param

def test_result_to_html(param_test_result_to_html):
(input, expected_result) = param_test_result_to_html
result = store.result_to_html(input)
input_prep = store.fix_num_params(input, int_params=['SMS', 'Min'])
result = store.result_to_html(input_prep)
print(f"input={input} result={result} expected_result={expected_result}")
assert result == expected_result

0 comments on commit 4531ac0

Please sign in to comment.